./PaxHeaders/cb2bib-2.0.30000644000000000000000000000013215104461634012001 xustar0030 mtime=1762812828.598754939 30 atime=1762812827.918760301 30 ctime=1762812828.598754939 cb2bib-2.0.3/0000755000175000001440000000000015104461634013712 5ustar00constansusers00000000000000cb2bib-2.0.3/PaxHeaders/configure0000644000000000000000000000007415104461330013623 xustar0030 atime=1762812827.994759702 30 ctime=1762812827.362764685 cb2bib-2.0.3/configure0000755000175000001440000003107615104461330015621 0ustar00constansusers00000000000000#!/bin/sh #------------------------------------------------------------------------------ # cb2Bib configuration script: # - Checks for QTDIR # -- If set, checks for qmake at QTDIR # -- If not set, checks for qmake at PATH and other usual locations # - Manages Installation directory data # - Runs qmake # # Modifications for the cb2Bib Gentoo build descriptions # by Hugo Mildenberger and Andreas K. Huettel # Copyright 2009 Hugo Mildenberger and Andreas K. Huettel # - December 2009: do not use temporary files, fix sed regular # expression, set both enable/disable for options, and add # call to qmake option. # # Modifications for the cb2Bib Debian distribution package # by Filippo Rusconi # Copyright 2009 Filippo Rusconi # - June 2009: replace ' ' with ':' along with use of IFS=: as # word-splitting delimiter for PATH-related tasks (Thanks Lionel # Mamane). # - September 2009: protect all shell variables against spaces. # #------------------------------------------------------------------------------ # ( originally based upon 'shell script to configure doxygen', # http://www.stack.nl/~dimitri/doxygen/ # Copyright (C) 1997-2001 by Dimitri van Heesch ) # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby # granted. No representations are made about the suitability of this software # for any purpose. It is provided "as is" without express or implied warranty # See the GNU General Public License for more details #------------------------------------------------------------------------------ platform=`uname -s` echo echo "Configuration script for cb2Bib (Unix/Linux/MacOSX)" echo f_prefix=/usr f_bindir=/usr/bin f_datadir=/usr/share/cb2bib f_desktopdatadir=/usr/share/applications f_icondir=/usr/share/pixmaps f_qmake=NO f_make=NO f_enable_cbpoll=NO f_enable_lz4=y f_enable_lzo=NO f_enable_lzsse=NO f_enable_qt_zlib=NO f_enable_avx2=NO f_disable_qmake_call=NO while test -n "$1"; do case $1 in --prefix | -prefix) shift; f_prefix="$1" ; f_bindir="$1/bin" ; f_datadir="$1/share/cb2bib" ; f_desktopdatadir="$1/share/applications" ; f_icondir="$1/share/pixmaps" ;; --bindir | -bindir) shift; unset f_prefix ; f_bindir="$1" ;; --datadir | -datadir) shift; unset f_prefix ; f_datadir="$1/cb2bib" ;; --desktopdatadir | -desktopdatadir) shift; unset f_prefix ; f_desktopdatadir="$1" ;; --icondir | -icondir) shift; unset f_prefix ; f_icondir="$1" ;; --qmakepath | -qmakepath) shift; unset f_qmake ; f_qmake="$1" ;; -h | --help | -help) f_help=y ;; --enable-cbpoll | -enable-cbpoll) f_enable_cbpoll=y ;; --disable-cbpoll | -disable-cbpoll) f_enable_cbpoll=NO ;; --enable-lzo | -enable-lzo) f_enable_lz4=NO ; f_enable_lzo=y ; f_enable_lzsse=NO ; f_enable_qt_zlib=NO ;; --enable-lzsse | -enable-lzsse) f_enable_lz4=NO ; f_enable_lzO=NO ; f_enable_lzsse=y ; f_enable_qt_zlib=NO ;; --enable-qt-zlib | -enable-qt-zlib) f_enable_lz4=NO ; f_enable_lzO=NO ; f_enable_lzsse=NO ; f_enable_qt_zlib=y ;; --enable-lz4 | -enable-lz4) f_enable_lz4=y ; f_enable_lzO=NO ; f_enable_lzsse=NO ; f_enable_qt_zlib=NO ;; --enable-avx2 | -enable-avx2) f_enable_avx2=y ;; --enable-qmake-call | -enable-qmake-call) f_disable_qmake_call=NO ;; --disable-qmake-call | -disable-qmake-call) f_disable_qmake_call=y ;; *) echo "-----------------------------------------------------------------------" echo Error: Unknown argument $1 echo "-----------------------------------------------------------------------" echo "" f_help=y f_error=y ;; esac shift done if test "$f_help" = y; then cat </dev/null | grep GNU`"; then make_prog="$j/$i" break 2 fi fi done done unset IFS f_make="$make_prog" fi if test "$f_make" != NO; then echo "using $f_make." else echo "not found." fi #- Setting dirs and start qmake ----------------------------------------------- echo sed -i -e 's%^.*cb2bibdata\.path .*$%cb2bibdata.path = '$f_datadir'%g' \ -e 's%^.*cb2bibdoc\.path .*$%cb2bibdoc.path = '$f_datadir'/doc%g' \ -e 's%^.*target\.path .*$%target.path = '$f_bindir'%g' \ -e 's%^.*script\.path .*$%script.path = '$f_bindir'%g' \ -e 's%^.*desktop\.path .*$%desktop.path = '$f_desktopdatadir'%g' \ -e 's%^.*icons\.path .*$%icons.path = '$f_icondir'%g' src/src.pro sed -i 's%^const QLatin1String C2B_DATA_DIR.*$%const QLatin1String C2B_DATA_DIR("'$f_datadir'/");%g' src/c2b/cb2bib_parameters.h f_configs= if test "$f_enable_cbpoll" = y; then echo "Setting clipboardPoll enabled" f_configs="$f_configs -config enable_cbpoll" fi if test "$f_enable_lz4" = y; then echo "Setting LZ4 enabled" f_configs="$f_configs -config use_lz4" fi if test "$f_enable_lzo" = y; then echo "Setting LZO enabled" f_configs="$f_configs -config use_lzo" fi if test "$f_enable_lzsse" = y; then echo "Setting LZSSE enabled" f_configs="$f_configs -config use_lzsse" fi if test "$f_enable_qt_zlib" = y; then echo "Setting Qt ZLIB enabled" f_configs="$f_configs -config use_qt_zlib" fi if test "$f_enable_avx2" = y; then echo "Setting AVX2 enabled" f_configs="$f_configs -config use_avx2" fi if test "$f_disable_qmake_call" = NO; then echo "" echo "Running $f_qmake $f_configs -o Makefile" "$f_qmake" $f_configs -o Makefile else echo "" echo "Writing qmake flags to file 'qmake-additional-args'" echo $f_configs > qmake-additional-args fi echo " " if test "$f_make" = NO; then echo "-----------------------------------------------------------------------" echo "Configuration ended. 'make' not found." echo "Build toolchain might not be completed." echo "-----------------------------------------------------------------------" exit 1 else echo "-----------------------------------------------------------------------" echo "- NOTE: Type 'make distclean' or, preferably, untar again to set other" echo " configure flags." echo "-----------------------------------------------------------------------" echo " " echo "-----------------------------------------------------------------------" if test "$f_disable_qmake_call" = NO; then echo "Configuration ended. Type 'make' and 'make install'." else echo "Configuration ended. Run qmake, and type 'make' and 'make install'." fi echo "-----------------------------------------------------------------------" echo " " fi cb2bib-2.0.3/PaxHeaders/data0000644000000000000000000000013215104461634012555 xustar0030 mtime=1762812828.602754908 30 atime=1762812827.994759702 30 ctime=1762812828.602754908 cb2bib-2.0.3/data/0000755000175000001440000000000015104461634014623 5ustar00constansusers00000000000000cb2bib-2.0.3/data/PaxHeaders/netqinf.txt0000644000000000000000000000007415104461330015035 xustar0030 atime=1762812827.994759702 30 ctime=1762812827.178766136 cb2bib-2.0.3/data/netqinf.txt0000644000175000001440000004670615104461330017036 0ustar00constansusers00000000000000############################################################ # CB2BIB/EDITOR BOOKMARKS AND NETWORK QUERY INFORMATION FILE ############################################################ ########### # BOOKMARKS ########### # Syntax: # bookmark=Description|Target URL # Notes: # - cb2Bib tags, e. g. BibTeX fields enclosed as <<...>>, can be included in the URL. These tags will be # substituted by the current values. # - The non BibTeX tag <> is the placeholder for the current text selection. # - Some special characters, such as |, might need percent encoding to properly work. # Bookmark Examples: bookmark=PubMed Citation Finder|https://pubmed.ncbi.nlm.nih.gov/citmatch/ bookmark=DBLP Bibliography|https://dblp.org/search/ bookmark=arXiv.org e-Print archive|https://arxiv.org/ bookmark=CiteSeerX|https://citeseerx.ist.psu.edu/ bookmark=Directory of Open Access Journals|https://doaj.org/search bookmark=PLoS - The Public Library of Science|https://www.plos.org/ bookmark=OAIster|https://www.oclc.org/en/oaister.html bookmark=Search ACS Publications|https://pubs.acs.org/search/advanced bookmark=Google Scholar|https://scholar.google.com/ bookmark= | bookmark=Search arXiv for selected text|https://search.arxiv.org:8081/?query=<> bookmark=Search CiteSeerX for Title|https://citeseerx.ist.psu.edu/search?q=title%3A<>&sort=cite bookmark=Search PubMed for Title|https://www.ncbi.nlm.nih.gov/pubmed?term=<<title>> bookmark=Search PubMed for DOI|https://www.ncbi.nlm.nih.gov/pubmed?term=<<doi>> bookmark=Search Google for literal Title|https://www.google.com/search?ie=UTF-8&q=%22<<title>>%22 bookmark=Search Scholar for literal Title|https://scholar.google.com/scholar?ie=UTF-8&q=%22<<title>>%22 bookmark=Search Crossref for Journal + Volume + Page|https://www.crossref.org/guestquery/?search_type=journal&auth=&issn=&title=<<journal>>&art_title=&volume=<<volume>>&page=<<pages>>&isbn=&comp_num=&series_title=&multi_hit=on&view_records=Search bookmark=Search ISBN Database|https://isbndb.com/search-all.html?kw=<<isbn>> bookmark=Open DOI Document|https://doi.org/<<doi>> ################## # EDITOR BOOKMARKS ################## # Syntax: # editorbookmark=Description|Target file name|Shortcut|Icon file name # Bookmark Example: editorbookmark=Bookmarks Description|https://www.molspaces.com/cb2bib/doc/bibeditor/#bookmarks|| ########################### # NETWORK QUERY INFORMATION ########################### # Description: # The cb2Bib tags # <<journal>>, # <<volume>>, # <<pages>>, # <<eprint>>, # <<doi>>, # and/or # <<excerpt>> # are substituted in the Submission Form (see below) by the actual values of the # reference. # 1) In a first step, the 'query' URL containing above substituted tags is sent to the # database server or publisher's website. # 2) Once the URL is retrieved, in a second step, cb2Bib captures a database identifier # for the desired reference. This step is a regular expression caption. # # Steps 1) and 2) are therefore a mapping from the given reference fields to the server # database identifier. # # 3) In the next step the server identifier is used to retrieve the complete # bibliographic reference, # 4) and possibly the link or URL for the target document, usually a PDF file. # # # In summary, queries are performed in these 4 steps: # 1) Post Query( journal-fullname, volume, first page; or doi; or excerpt ) (HTML post + # cb2Bib tags) # 2) Capture referenceurl and pdfurl from query (RegExp) # 3) Retrieve referenceurl = referenceurl_prefix + capture_from_query + referenceurl_sufix # 4) Schedule for retrieving pdfurl = pdfurl_prefix + capture_from_query + pdfurl_sufix # # NOTE: If pdfurl_prefix contains a cb2Bib tag, for example # pdfurl_prefix=http://example.com/<<doi>> # then pdfurl will be formed by substituting <<doi>> instead of capture_from_query # # NOTE: For the single query cases with no htm2txt_query and referenceurl_prefix # capture_from_query can be used for checking the suitability of the query # result # #-------------------------------------------------------------------------------------------- # Submission Form # All field/lines required, ordered as here, no comment or blank lines in between #-------------------------------------------------------------------------------------------- # QUERY INFO FOR #journal=cb2Bib Long Journal Name|journal code (or left blank if none needed, see ACS example) #query= (use '<<post>>http://www...' for http post method, instead of get method) #capture_from_query= #referenceurl_prefix= #referenceurl_sufix= #pdfurl_prefix= #pdfurl_sufix= #action= # #-------------------------------------------------------------------------------------------- # ACTION Description: #-------------------------------------------------------------------------------------------- # # blank = cb2Bib imports query output to clipboard panel and deletes previous panel contents # merge_all_metadata = cb2Bib appends query and referenceurl output to clipboard panel # merge_referenceurl_metadata = cb2Bib appends referenceurl output to clipboard panel # browse_query = cb2Bib opens the url in query # browse_referenceurl = cb2Bib opens referenceurl_prefix + capture_from_query + referenceurl_sufix # # Perform HTML to text conversion before importing to clipboard panel: # htm2txt_query = cb2Bib imports the url in query # htm2txt_referenceurl = cb2Bib imports referenceurl_prefix + capture_from_query + referenceurl_sufix # #-------------------------------------------------------------------------------------------- # Examples below explain and clarify the query syntax #-------------------------------------------------------------------------------------------- # Check arXiv for <<eprint>>, if DOI is returned check CR, merge_all_metadata for a complete # bibliographic record, and schedule PDF download journal= query=https://export.arxiv.org/api/query?id_list=<<eprint>> capture_from_query=>(10\.\d[^<]+)< referenceurl_prefix=https://api.crossref.org/works/ referenceurl_sufix= pdfurl_prefix=https://arxiv.org/pdf/<<eprint>> pdfurl_sufix= action=merge_all_metadata # Check arXiv for <<eprint>>, use capture_from_query to ensure received data is correct, # schedule PDF download journal= query=https://export.arxiv.org/api/query?id_list=<<eprint>> capture_from_query=arxiv\.org/abs/(<<eprint>>) referenceurl_prefix= referenceurl_sufix= pdfurl_prefix=https://arxiv.org/pdf/<<eprint>> pdfurl_sufix= action=merge_all_metadata # Check PubMed for <<doi>> and schedule PDF download if available journal= query=https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=<<doi>>&field=doi&retmode=xml capture_from_query=<Id>(\d+)</Id> referenceurl_prefix=https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&report=xml&format=text&id= referenceurl_sufix= pdfurl_prefix=https://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action= # Check CR for <<doi>>, use merge_all_metadata to keep clipboard contents for a manual # extraction of the abstract journal= query=https://api.crossref.org/works/<<doi>> capture_from_query=("status":.*"ok") referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=merge_all_metadata # Check PubMed for <<journal>>|<<volume>>|<<pages>>, use journal to set specific codes for # specific journals journal=Proteins: Structure, Function, and Bioinformatics|Proteins journal=Proteins: Structure, Function, and Genetics|Proteins query=https://eutils.ncbi.nlm.nih.gov/entrez/eutils/ecitmatch.cgi?db=pubmed&retmode=xml&bdata=<<journal>>||<<volume>>|<<pages>>||c2bquery| capture_from_query=c2bquery\|(\d+)\b referenceurl_prefix=https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&report=xml&format=text&id= referenceurl_sufix= pdfurl_prefix=https://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action= # Check PubMed for <<journal>>|<<volume>>|<<pages>> for any journal journal= query=https://eutils.ncbi.nlm.nih.gov/entrez/eutils/ecitmatch.cgi?db=pubmed&retmode=xml&bdata=<<journal>>||<<volume>>|<<pages>>||c2bquery| capture_from_query=c2bquery\|(\d+)\b referenceurl_prefix=https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&report=xml&format=text&id= referenceurl_sufix= pdfurl_prefix=https://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action= # Check CR for <<journal>>|<<volume>>|<<pages>> journal= query=https://www.crossref.org/guestquery?search_type=journal&auth=&issn=&title=<<journal>>&art_title=&volume=<<volume>>&issue=&page=<<pages>>%20&year=&isbn=&comp_num=&series_title=&multi_hit=on&view_records=Search&queryType=bibsearch capture_from_query=>\s*http://dx\.doi\.org/(.+)</a> referenceurl_prefix=https://api.crossref.org/works/ referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=merge_referenceurl_metadata # At this point all previous searches had been unsuccessful, then use the clipboard contents # summary, <<excerpt>> tag, for browsing a generic internet search journal= query=https://scholar.google.com/scholar?hl=en&lr=&ie=UTF-8&q=<<excerpt>>&btnG=Search capture_from_query= referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=browse_query %c2b_stop_parsing #-------------------------------------------------------------------------------------------- # Examples below are deprecated, they are kept here to further clarify the query syntax #-------------------------------------------------------------------------------------------- # QUERY INFO FOR IJQC # No BibTeX reference available. Instead, set 'action=browse_referenceurl'. # Reference and PDF file can later be extracted from browser, by selecting it. journal=International Journal of Quantum Chemistry| query=http://www3.interscience.wiley.com/search/allsearch?mode=citation&contextLink=%3Ca+href%3D%22%2Findex.html%22+target%3D%22_top%22%3EHome%3C%2Fa%3E+%2F+%3Ca+href%3D%22%2Fcgi-bin%2Fbrowsebysubject%3Fcode%3DCHEM%22+target%3D%22_top%22%3EChemistry%3C%2Fa%3E+%2F+%3Ca+href%3D%22%2Fcgi-bin%2Fbrowsebycategory%3Fcode%3DCH65%22+target%3D%22_top%22%3EComputational+Chemistry+and+Molecular+Modeling%3C%2Fa%3E&issn=1097-461X&volume=<<volume>>&issue=&pages=<<pages>> capture_from_query=/journal/(\d+)/abstract referenceurl_prefix=http://www3.interscience.wiley.com/journal/ referenceurl_sufix=/abstract pdfurl_prefix= pdfurl_sufix= action=browse_referenceurl # QUERY INFO FOR PNAS (Volume and Page) # Extracts BibTeX reference and article PDF file journal=Proceedings of the National Academy of Sciences of the United States of America| query=http://www.pnas.org/search?submit=yes&submit=Submit&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&doi=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=1915&tmonth=Jul&tyear=2025&tocsectionid=all&format=standard&hits=10&sortspec=relevance&submit=yes capture_from_query=/content/(.+)\.(extract|abstract|full) referenceurl_prefix=http://www.pnas.org/citmgr?type=bibtex&gca=pnas; referenceurl_sufix= pdfurl_prefix=http://www.pnas.org/content/ pdfurl_sufix=.full.pdf action= # QUERY INFO FOR PNAS (DOI) # Extracts BibTeX reference and article PDF file journal=Proceedings of the National Academy of Sciences of the United States of America| query=http://www.pnas.org/search?submit=yes&submit=Submit&doi=<<doi>> capture_from_query=/content/(.+)\.(extract|abstract|full) referenceurl_prefix=http://www.pnas.org/citmgr?type=bibtex&gca=pnas; referenceurl_sufix= pdfurl_prefix=http://www.pnas.org/content/ pdfurl_sufix=.full.pdf action= # QUERY INFO FOR BIOMETRIKA # Extracts BibTeX reference journal=Biometrika| query=http://biomet.oxfordjournals.org/cgi/search?sendit=Search&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&DOI=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=&tocsectionid=all&RESULTFORMAT=1&hits=10&hitsbrief=25&sortspec=relevance&sortspecbrief=relevance capture_from_query=http://biomet\.oxfordjournals\.org/cgi/content/abstract/([/\d\w]+)\? referenceurl_prefix=http://biomet.oxfordjournals.org/cgi/citmgr?type=bibtex&gca=biomet; referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action= # QUERY INFO FOR NAR # Extracts BibTeX reference and article PDF file journal=Nucleic Acids Research| query=http://nar.oxfordjournals.org/cgi/search?sendit=Search&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&DOI=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=1990&tocsectionid=all&RESULTFORMAT=1&hits=10&hitsbrief=25&sortspec=relevance&sortspecbrief=relevance capture_from_query=http://nar\.oxfordjournals\.org/cgi/content/abstract/([/\d\w]+)\? referenceurl_prefix=http://nar.oxfordjournals.org/cgi/citmgr?type=bibtex&gca=nar; referenceurl_sufix= pdfurl_prefix=http://nar.oxfordjournals.org/cgi/reprint/ pdfurl_sufix=.pdf action= # QUERY INFO FOR B # Extracts BibTeX reference and article PDF file journal=Bioinformatics| query=http://bioinformatics.oxfordjournals.org/cgi/search?sendit=Search&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&DOI=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=1990&tocsectionid=all&RESULTFORMAT=1&hits=10&hitsbrief=25&sortspec=relevance&sortspecbrief=relevance capture_from_query=http://bioinformatics\.oxfordjournals\.org/cgi/reprint/([/\d\w]+)\? referenceurl_prefix=http://bioinformatics.oxfordjournals.org/cgi/citmgr?type=bibtex&gca=bioinfo; referenceurl_sufix= pdfurl_prefix=http://bioinformatics.oxfordjournals.org/cgi/reprint/ pdfurl_sufix=.pdf action= # QUERY INFO FOR PubMed # Extracts Medline reference # Blank journal meaning 'any journal name' journal= query=http://www.ncbi.nlm.nih.gov/pubmed?term=<<doi>> capture_from_query=\bPMID:\D{1,10}(\d+)\D referenceurl_prefix=http://www.ncbi.nlm.nih.gov/pubmed/ referenceurl_sufix=?report=xml&format=text pdfurl_prefix=http://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action=htm2txt_referenceurl # QUERY INFO FOR PubMed, SPECIAL CASES (PubMed doesn't know full journal name) # Extracts Medline reference journal=Proteins: Structure, Function, and Bioinformatics|Proteins journal=Proteins: Structure, Function, and Genetics|Proteins query=http://www.ncbi.nlm.nih.gov/pubmed?term=<<journal>>[Jour]+AND+<<volume>>[volume]+AND+<<pages>>[page] capture_from_query=\bPMID:\D{1,10}(\d+)\D referenceurl_prefix=http://www.ncbi.nlm.nih.gov/pubmed/ referenceurl_sufix=?report=xml&format=text pdfurl_prefix=http://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action=htm2txt_referenceurl # QUERY INFO FOR PubMed # Extracts Medline reference # Blank journal meaning 'any journal name' journal= query=http://www.ncbi.nlm.nih.gov/pubmed?term=<<journal>>[Jour]+AND+<<volume>>[volume]+AND+<<pages>>[page] capture_from_query=\bPMID:\D{1,10}(\d+)\D referenceurl_prefix=http://www.ncbi.nlm.nih.gov/pubmed/ referenceurl_sufix=?report=xml&format=text pdfurl_prefix=http://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action=htm2txt_referenceurl # QUERY INFO FOR ACS # Point to the abstract page. journal=Accounts of Chemical Research|achre4 journal=ACS Applied Materials and Interfaces|aamick journal=Analytical Chemistry|ancham journal=Analytical Chemistry A-Pages|anchama journal=Biochemistry|bichaw journal=Bioconjugate Chemistry|bcches journal=Biomacromolecules|bomaf6 journal=Biotechnology Progress|bipret journal=Chemical Research in Toxicology|crtoec journal=Chemical Reviews|chreay journal=Chemistry of Materials|cmatex journal=Crystal Growth and Design|cgdefu journal=Energy and Fuels|enfuem journal=Environmental Science and Technology A-Pages|esthaga journal=Environmental Science and Technology|esthag journal=Industrial and Engineering Chemistry|iechad journal=Industrial and Engineering Chemistry Research Fundamentals|iecfa7 journal=Industrial and Engineering Chemistry Research|iecred journal=Inorganic Chemistry|inocaj journal=Journal of Agricultural and Food Chemistry|jafcau journal=Journal of Chemical and Engineering Data|jceaax journal=Journal of Chemical Information and Computer Sciences|jcisd8 journal=Journal of Chemical Information and Modeling|jcisd8 journal=Journal of Chemical Theory and Computation|jctcce journal=Journal of Combinatorial Chemistry|jcchff journal=Journal of Medicinal Chemistry|jmcmar journal=Journal of Natural Products|jnprdf journal=Journal of Organic Chemistry|joceah journal=The Journal of Physical Chemistry A|jpcafh journal=The Journal of Physical Chemistry B|jpcbfk journal=The Journal of Physical Chemistry C|jpccfk journal=Journal of Physical Chemistry|jpchax journal=Journal of Proteome Research|jprobs journal=Journal of the American Chemical Society|jacsat journal=Langmuir|langd5 journal=Macromolecules|mamobx journal=Molecular Pharmaceutics|mpohbp journal=Nano Letters|nalefd journal=Organic Letters|orlef7 journal=Organic Process Research and Development|oprdfk journal=Organometallics|orgnd7 query=http://pubs.acs.org/action/quickLink?quickLinkJournal=<<journal>>&quickLinkVolume=<<volume>>&quickLinkPage=<<pages>>&cookieSet=1 capture_from_query= referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=browse_query # QUERY INFO FOR JCP, JAP and JMP # Extracts BibTeX reference journal=The Journal of Chemical Physics|JCP journal=Journal of Chemical Physics|JCP journal=Journal of Applied Physics|JAP journal=Journal of Mathematical Physics|JMP query=http://link.aip.org/link/?<<journal>>/<<volume>>/<<pages>> capture_from_query=filetype=pdf&id=([\w\d]+)& referenceurl_prefix=http://scitation.aip.org/getabs/servlet/GetCitation?fn=view_bibtex2&source=scitation&PrefType=ARTICLE&PrefAction=Add+Selected&SelectCheck= referenceurl_sufix=&downloadcitation=+Go+ pdfurl_prefix=http://scitation.aip.org/getpdf/servlet/GetPDFServlet?filetype=pdf&id= pdfurl_sufix=&idtype=cvips action= # QUERY INFO FOR DOI # If DOI is known, and so far the reference is not found, at least browse reference journal= query=http://dx.doi.org/<<doi>> capture_from_query= referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=browse_query # QUERY INFO FOR CR journal= query=http://www.crossref.org/guestquery?search_type=journal&auth=&issn=&title=<<journal>>&art_title=&volume=<<volume>>&issue=&page=<<pages>>%20&year=&isbn=&comp_num=&series_title=&multi_hit=on&view_records=Search&queryType=bibsearch capture_from_query=>\s*http://dx\.doi\.org/(.+)</a> referenceurl_prefix=http://dx.doi.org/ referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=browse_referenceurl # QUERY INFO FOR PubMed # Extracts Medline reference # Uses <<title>> tag journal= query=http://www.ncbi.nlm.nih.gov/pubmed?term=<<title>> capture_from_query=\bPMID:\D{1,10}(\d+)\D referenceurl_prefix=http://www.ncbi.nlm.nih.gov/pubmed/ referenceurl_sufix=?report=xml&format=text pdfurl_prefix=http://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action=htm2txt_referenceurl # QUERY INFO FOR Google Scholar journal= query=https://scholar.google.com/scholar?hl=en&lr=&ie=UTF-8&q=<<doi>>&btnG=Search capture_from_query=info:(\w+):scholar referenceurl_prefix=https://scholar.google.com/scholar.bib?hl=en&lr=&ie=UTF-8&q=info: referenceurl_sufix=:scholar.google.com/&output=citation&oe=ASCII&oi=citation pdfurl_prefix= pdfurl_sufix= action= # QUERY INFO FOR Google Scholar # Uses <<excerpt>> tag journal= query=https://scholar.google.com/scholar?hl=en&lr=&ie=UTF-8&q=<<excerpt>>&btnG=Search capture_from_query=info:(\w+):scholar referenceurl_prefix=https://scholar.google.com/scholar.bib?hl=en&lr=&ie=UTF-8&q=info: referenceurl_sufix=:scholar.google.com/&output=citation&oe=ASCII&oi=citation pdfurl_prefix= pdfurl_sufix= action= ����������������������������������������������������������cb2bib-2.0.3/data/PaxHeaders/tex2html_local_mathjax_header.html�������������������������������������0000644�0000000�0000000�00000000132�15104461633�021464� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.334764906 30 atime=1762812827.994759702 30 ctime=1762812827.334764906 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/tex2html_local_mathjax_header.html������������������������������������������������0000644�0001750�0000144�00000000444�15104461633�023457� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<script type="text/x-mathjax-config"> MathJax.Hub.Config({ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]} }); </script> <script type="text/javascript" src="/usr/share/javascript/mathjax/MathJax.js"></script> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/PaxHeaders/regexps.txt������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015046� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.178766136 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/regexps.txt�����������������������������������������������������������������������0000644�0001750�0000144�00000001000�15104461330�017021� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cb2Bib 0.0.1 Pattern: PDF Import Example article journal volume pages year title author abstract ^(Ars Magna), (\d+), ([\d\-–\s]+), (\d\d\d\d)<NewLine1>(.+)<NewLine3>(.+)<NewLine5>.+SUMMARY(.+)<NewLine13>.+$ # cb2Bib 0.0.1 Pattern: Example with Multiple Author Sets article journal volume pages year title author author abstract ^(Journal Name), (\d+), ([\d|\-|\s]+), (\d\d\d\d) <NewLine1><NewLine2> <NewLine3>(.+)<NewLine4><NewLine5> <NewLine6>(.+)<NewLine7>.+<NewLine10>(.+)<NewLine11>.+Abstract:(.+)$ cb2bib-2.0.3/data/PaxHeaders/references.css���������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015464� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.330764937 30 atime=1762812827.994759702 30 ctime=1762812827.330764937 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/references.css��������������������������������������������������������������������0000644�0001750�0000144�00000001422�15104461633�017454� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cb2Bib References CSS */ /* general */ body { font-size: 100%; font-family: sans-serif; background-color: #E7E7E7; color: black; padding: 0; margin: 0; } a { color: #010141; text-decoration: none; } a:link { color: #010141; text-decoration: underline; } h1 { background-color: #010141; color: #DBDBDB; font-size: 20px; font-variant: small-caps; font-family: sans-serif; } /* references */ #references{ background-color: #DBDBDB; } #references blockquote{ font-size: small; } #references span{ color: #0000FF; } #excerpt{ font-style: italic; } /* header */ #header { vertical-align: middle; } /* footer */ #footer { color: black; font-family: arial, sans-serif; font-size: 9pt; } #footer td{ padding: 10px; padding-left: 5px; padding-right: 5px; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/PaxHeaders/tex2html.css�����������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015112� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.338764874 30 atime=1762812827.994759702 30 ctime=1762812827.338764874 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/tex2html.css����������������������������������������������������������������������0000644�0001750�0000144�00000005534�15104461633�017112� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cb2Bib Annote CSS */ /* general */ body { background-color: #E7E7E7; border-color: #72726A; border-style: solid; border-width: 1px; color: black; margin: 1px; padding-left: 25px; padding-right: 25px; padding-top: 25px; } h1 { background-color: #010141; border-color: black; border-style: solid; border-width: 1px; color: #E3E3E3; font-family: sans-serif; font-size: 120%; padding-left: 10px; } h2 { color: #010141; font-family: sans-serif; font-size: 110%; padding-left: 10px; } h3 { color: #010141; font-family: sans-serif; font-size: 100%; font-style: italic; padding-left: 10px; } a { color: #293747; font-size: 100%; text-decoration: underline; } p { padding-right: 20px; text-indent: 20px; } pre { background-color: #DBDBDB; border-color: #72726A; border-style: solid; border-width: 1px; font-family: monospace; font-size: 80%; padding: 10px; } ul li { list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAJCAYAAADkZNYtAAAABGdBTUEAANbY1E9YMgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9gMCBQ5B7ky4rkAAAFHSURBVBjTTcoxasJQAIDhPy8JlfCKGpe+LIUuQhAnN0FEikcodOvSnqCLV+lYEA/QCi4GnERyhE5FsGoCDgZ9oMnr0pZ+8G+/xQ+lVLXVaj31+/378/lsOY5jJpPJaDabvWRZtuMfv9PpjKIoMkmSmDRNzXa7NdPp1LTb7RHgA9iACILgcTAYPFerVbTWaK3Z7XbkeU69Xm/M5/OvLMtiAbjNZvPO8zy01uz3+7+01nieR6PRuANcB3CVUje1Wg0pJa7rYts2eZ5zOp0olUoEQXDzO4skSVa+719JKXPLsizbtjHGACCEEJvNZgUIARSLxWK8Xq+RUtrlcllIKUWlUhFSSrFcLonjeAwUABdA2O12J3Ecm8PhYLTW5ng8miiKTBiGb0AIXFiAAC6VUqHv+w+9Xu/WcZzroig+h8Phe5qmr8AHkH0DzH6Pqv7Vyi4AAAAASUVORK5CYII=); padding-right: 100px; text-indent: 15px; } /* header */ .header { vertical-align: middle; } /* footer */ .footer { color: black; font-family: arial, sans-serif; font-size: 50%; } .footer td { padding: 10px; padding-left: 5px; padding-right: 5px; } .footer a { color: #293747; font-weight: bold; text-decoration: underline; } /* index */ .index { background-color: #DBDBDB; border-color: #72726A; border-style: solid; border-width: 1px; font-family: sans-serif; font-size: 80%; } .index a { color: #293747; font-weight: bold; text-decoration: none; } .index a:hover { color: #010141; font-weight: bold; text-decoration: none; } .index ul li { list-style-image: none; } /* abstract */ #abstract { background-color: #DBDBDB; border-color: #72726A; border-style: solid; border-width: 1px; font-size: 95%; font-style: italic; padding-bottom: 10px; padding-left: 50px; padding-right: 70px; padding-top: 10px; text-indent: 20px; } /* citations */ .citations { font-size: 80%; } .citations a { text-decoration: none; } .citations a:active { color: #010141; text-decoration: none; } /* references */ .references { font-size: 80%; font-family: sans-serif; padding-right: 50px; } .references a { color: black; text-decoration: none; } .references a:link { color: #293747; font-weight: bold; text-decoration: none; } .references a:visited { color: #293747; font-weight: bold; text-decoration: none; }��������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/PaxHeaders/abbreviations.txt������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016221� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.178766136 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/abbreviations.txt�����������������������������������������������������������������0000644�0001750�0000144�00001570332�15104461330�020220� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������A|Addiction|Addiction A1|Adicciones|Adicciones A2|Adipocyte|Adipocyte A3|Adsorption|Adsorption: Journal of the International Adsorption Society A4|Afinidad|Afinidad A5|Alcohol|Alcohol A6|Algorithmica|Algorithmica A7|Algorithms|Algorithms A8|Allergy|Allergy A9|Ambio|Ambio A10|Ambix|Ambix A11|Anaerobe|Anaerobe A12|Anaesthesia|Anaesthesia A13|Anaesthesist|Der Anaesthesist A14|Analyst|The Analyst A15|Andrologia|Andrologia A16|Andrology=Andrology US|Andrology A17|Anesthesiology|Anesthesiology A18|Angiogenesis|Angiogenesis A19|Angiology|Angiology A20|Animal|Animal: An International Journal of Animal Bioscience A21|Apoptosis|Apoptosis: An International Journal on Programmed Cell Death A22|Appetite|Appetite A23|Archaea|Archaea: An International Microbiological Journal A24|Arkivoc|Arkivoc A25|Arthroscopy|Arthroscopy: The Journal of Arthroscopic & Related Surgery=Arthroscopy: The Journal of Arthroscopic and Related Surgery A26|Assessment|Assessment A27|Asterisque|Asterisque A28|Astrobiology|Astrobiology A29|Atherosclerosis|Atherosclerosis A30|Autism|Autism: The International Journal of Research and Practice A31|Autoimmunity|Autoimmunity A32|Autophagy|Autophagy AA|Acoust. Aust.|Acoustics Australia AA1|Acta Arithmet.|Acta Arithmetica AA2|Adv. Anesth.|Advances in Anesthesia AA3|Age Ageing|Age and Ageing AA4|Alcohol Alcohol|Alcohol and Alcoholism: International Journal of the Medical Council on Alcoholism AA5|Aldrichimica Acta=Aldrichim. Acta|Aldrichimica Acta AA6|Amino Acids|Amino Acids AA7|Anal. Appl.|Analysis and Applications AA8|Anesth. Analg.|Anesthesia and Analgesia AA9|Ann. Anatomy|Annals of Anatomy-Anatomischer Anzeiger AA10|Appl. Acoust.|Applied Acoustics=Applied Acoustics. Acoustique Applique. Angewandte Akustik AA11|Appl. Anal.=Applic. Analysis|Applicable Analysis AA12|Arch. Acoust.|Archives of Acoustics AA13|Asymptotic Anal.|Asymptotic Analysis AAA|Abstr. Appl. Anal.|Abstract and Applied Analysis AAAI|Ann. Allergy Asthma Immunol.=Ann. Allerg. Asthma Im.|Annals of Allergy, Asthma & Immunology AAAMC|Antiinflamm. Antiallergy Agents Med. Chem.|Anti-Inflammatory & Anti-Allergy Agents in Medicinal Chemistry AABC|An. Acad. Bras. Cienc.=An. Acad. Brasil. Cienc.|Anais Da Academia Brasileira de Ciências AAC|Antimicrob. Agents Chemother.=Antimicrob. Agents Ch.|Antimicrobial Agents and Chemotherapy AAC1|Augment. Altern. Commun.=Augment. Altern. Comm.|Augmentative and Alternative Communication AACA|Adv. Appl. Clifford Algebr.|Advances in Applied Clifford Algebras AACNACC|AACN Adv. Crit. Care|AACN Advanced Critical Care AAD|Am. Ann. Deaf=Amer. Ann. Deaf|American Annals of the Deaf AADM|Appl. Anal. Discret. Math.|Applicable Analysis and Discrete Mathematics AAECB|Adv. Anat. Embryol. Cell Biol.=Advan. Anat. Embryol. Cell Biol.|Advances in Anatomy, Embryology, and Cell Biology AAECC|Appl. Algebr. Eng. Commun. Comp.|Applicable Algebra in Engineering Communication and Computing AAEM|Ann. Agric. Environ. Med.=Ann. Agr. Env. Med.|Annals of Agricultural and Environmental Medicine AAM|Acta Appl. Math.|Acta Applicandae Mathematicae AAM1|Adv. Appl. Math.=Advan. Appl. Math.|Advances in Applied Mathematics AAM2|Adv. Appl. Microbiol.=Advan. Appl. Microbiol.|Advances in Applied Microbiology AAM3|Ann. Afr. Med.|Annals of African Medicine AAMAS|Auton. Agent Multi Agent Syst.=Auton. Agents Multi Agent Syst.|Autonomous Agents and Multi-Agent Systems AAMC|Anticancer Agents Med. Chem.=Anti Cancer Agents Med. Chem.|Anti-Cancer Agents in Medicinal Chemistry AAMM|Adv. Appl. Math. Mech.|Advances in Applied Mathematics and Mechanics AAMS|Ann. Acad. Med. Singap.|Annals Academy of Medicine Singapore=Annals of the Academy of Medicine, Singapore AAN|Arch. Anim. Nutr.|Archives of Animal Nutrition AANZ|Anthropol. ANZ|Anthropologischer Anzeiger=Anthropologischer Anzeiger: Bericht Über Die Biologisch-Anthropologische Literatur AAP|A A Pract.|A&A Practice AAP1|Accid. Anal. Prev.=Accident Anal. Prev.|Accident: Analysis and Prevention AAP2|Adv. Anat. Pathol.|Advances in Anatomic Pathology AAP3|Adv. Appl. Probab.=Advan. Appl. Probab.|Advances in Applied Probability AAP4|Allergy Asthma Proc.|Allergy and Asthma Proceedings : AAP5|Ann. Appl. Probab.|Annals of Applied Probability=The Annals of Applied Probability AAP6|Arch. Argent. Pediatr.|Archivos Argentinos de Pediatría AAP7|Auton. Autacoid Pharmacol.|Autonomic & Autacoid Pharmacology AAPSPST|AAPS PharmSciTech|AAPS PharmSciTech AAS|Acta Anaesthesiol. Scand.=Acta Anaesth. Scand.|Acta Anaesthesiologica Scandinavica AAS1|Alcohol Alcohol Suppl.|Alcohol and Alcoholism. Supplement AAS2|Ann. Appl. Stat.|Annals of Applied Statistics=The Annals of Applied Statistics AASA|Asta Adv. Stat. Anal.|Asta-Advances in Statistical Analysis AASFM|Ann. Acad. Sci. Fenn. Math.|Annales Academiae Scientiarum Fennicae-Mathematica AATS|Ann. Am. Thorac. Soc.|Annals of the American Thoracic Society AAUA|Acta Acust. United Acust.=Acta Acust. United Ac.|Acta Acustica United with Acustica AB|Acta Biomater.|Acta Biomaterialia AB1|Acta Biomed|Acta Bio-Medica: Atenei Parmensis AB2|Acta Biotheor.|Acta Biotheoretica AB3|Addict. Behav.|Addictive Behaviors AB4|Addict. Biol.|Addiction Biology AB5|Adv. Biophys.|Advances in Biophysics AB6|Aggress. Behav.=Aggressive Behav.|Aggressive Behavior AB7|Anal. Biochem.|Analytical Biochemistry AB8|Anim. Biotechnol.|Animal Biotechnology AB9|Ann. Bot.=Ann. Bot. London|Annals of Botany AB10|Arch. Bronconeumol.|Archivos de Bronconeumología ABB|Acta Bioeng. Biomech.|Acta of Bioengineering and Biomechanics ABB1|Appl. Biochem. Biotechnol.=Appl. Biochem. Biotech.|Applied Biochemistry and Biotechnology ABB2|Appl. Bionics Biomech.|Applied Bionics and Biomechanics ABB3|Arch. Biochem. Biophys.|Archives of Biochemistry and Biophysics ABBS|Acta Biochim. Biophys. Sinica|Acta Biochimica et Biophysica Sinica ABC|Anal. Bioanal. Chem.|Analytical and Bioanalytical Chemistry ABC1|Arq. Bras. Cardiol.|Arquivos Brasileiros de Cardiologia ABCL|Acta Bioquim. Clin. Latinamer.|Acta Bioquimica Clinica Latinoamericana ABD|An. Bras. Dermatol.=An. Brasil. Dermatol.|Anais Brasileiros de Dermatologia ABE|Ann. Biomed. Eng.|Annals of Biomedical Engineering ABEB|Adv. Biochem. Eng. Biotechnol.=Adv. Biochem. Eng. Biot.|Advances in Biochemical Engineering / Biotechnology ABH|Acta Biol. Hung.|Acta Biologica Hungarica ABM|Ann. Behav. Med.=Ann. Behavioral Med.|Annals of Behavioral Medicine ABMET|Appl. Biochem. Microbiol. Engl. T|Applied Biochemistry and Microbiology ABO|Arq. Bras. Oftalmol.|Arquivos Brasileiros de Oftalmologia ABP|Acta Biochim. Pol.|Acta Biochimica Polonica ABR|Adv. Biol. Regul.|Advances in Biological Regulation ABS|Arch. Biol. Sci.|Archives of Biological Sciences AC|Acta Cardiol.|Acta Cardiologica AC1|Acta Chromatogr.|Acta Chromatographica AC2|Acta Cytol.|Acta Cytologica AC3|Adv. Cardiol.=Advan. Cardiol.|Advances in Cardiology AC4|Adv. Catal.|Advances in Catalysis AC5|Adv. Chromatogr.|Advances in Chromatography AC6|Adv. Comput.|Advances in Computers AC7|Aging Cell|Aging Cell AC8|Algebr. Colloq.|Algebra Colloquium AC9|Anal. Chem.|Analytical Chemistry AC10|Anesthesiol. Clin.|Anesthesiology Clinics AC11|Anim. Cogn.|Animal Cognition AC12|Ann. Comb.|Annals of Combinatorics AC13|Ars Combinatoria|Ars Combinatoria AC14|Astron. Comput.|Astronomy and Computing ACA|Acta Crystallogr. A=Acta Crystallogr. A Found. Adv.|Acta Crystallographica Section A=Acta Crystallographica Section A: Foundations and Advances ACA1|Anal. Chim. Acta|Analytica Chimica Acta ACA2|Ann. Card. Anaesth.|Annals of Cardiac Anaesthesia ACAG|Appl. Catal. A Gen.|Applied Catalysis. A, General ACB|Acta Chir. Belg.|Acta Chirurgica Belgica ACB1|Acta Cir. Bras.|Acta Cirúrgica Brasileira ACB2|Acta Clin. Belg.|Acta Clinica Belgica ACB3|Acta Crystallogr. B=Acta Crystallogr. B Struct. Sci. Cryst. Eng. Mater.|Acta Crystallographica Section B=Acta Crystallographica Section B: Structural Science, Crystal Engineering and Materials ACB4|Alkaloids Chem. Biol.|The Alkaloids. Chemistry and Biology ACB5|Ann. Clin. Biochem.|Annals of Clinical Biochemistry ACB6|Appl. Catal. B=Appl. Catal. B Environ.|Applied Catalysis B=Applied Catalysis. B, Environmental ACC|Acta Clin. Croat.|Acta Clinica Croatica ACC1|Acta Crystallogr. C=Acta Crystallogr. C Struct. Chem.|Acta Crystallographica Section C=Acta Crystallographica Section C: Structural Chemistry ACC2|Acute Card. Care|Acute Cardiac Care ACC3|Adv. Clin. Chem.=Advan. Clin. Chem.|Advances in Clinical Chemistry ACC4|Antivir. Chem. Chemother.|Antiviral Chemistry & Chemotherapy ACC5|Aust. Crit. Care|Australian Critical Care ACCB|Adv. Carbohydr. Chem. Biochem.=Advan. Carbohyd. Chem. Biochem.|Advances in Carbohydrate Chemistry and Biochemistry ACCPM|Anaesth. Crit. Care Pain Med.=Anaesth. Crit. Care Pa.|Anaesthesia, Critical Care & Pain Medicine ACD|Acta Crystallogr. D=Acta Crystallogr. D Struct. Biol.|Acta Crystallographica Section D=Acta Crystallographica Section D: Structural Biology ACD1|Arch. Cardiovasc. Dis.|Archives of Cardiovascular Diseases ACDB|Adv. Child Dev. Behav.=Adv. Child Develop. Behav.|Advances in Child Development and Behavior ACE|Acta Crystallogr. E=Acta Crystallogr. E Crystal. Commun.|Acta Crystallographica Section E=Acta Crystallographica Section E: Crystallographic Communications ACEM|Adv. Clin. Exp. Med.|Advances in Clinical and Experimental Medicine ACER|Aging Clin. Exp. Res.|Aging Clinical and Experimental Research ACER1|Alcohol. Clin. Exp. Res.|Alcoholism, Clinical and Experimental Research ACF|Acta Crystallogr. F=Acta Crystallogr. F Struct. Biol. Commun.|Acta Crystallographica Section F=Acta Crystallographica Section F: Structural Biology Communications ACHA|Appl. Comput. Harmon. Anal.=Appl. Comput. Harmonic Anal.|Applied and Computational Harmonic Analysis ACI|Appl. Clin. Inform.|Applied Clinical Informatics ACIE|Angew. Chem. Int. Ed.=Angew. Chem. Int. Edit.|Angewandte Chemie-International Edition ACIEE|Angew. Chem. Int. Ed. Engl.|Angewandte Chemie=Angewandte Chemie International Edition in English ACIS|Adv. Colloid Interface Sci.=Advan. Colloid Interface Sci.|Advances in Colloid and Interface Science ACKD|Adv. Chronic Kidney Dis.=Adv. Chronic Kidney D.|Advances in Chronic Kidney Disease ACLS|Ann. Clin. Lab. Sci.|Annals of Clinical Laboratory Science=Annals of Clinical and Laboratory Science ACM|Adv. Comput. Math.|Advances in Computational Mathematics ACM1|Arch. Cardiol. Mex.|Archivos de Cardiología de México ACMA|Ann. Clin. Microbiol. Antimicrob.=Ann. Clin. Microb. Anti.|Annals of Clinical Microbiology and Antimicrobials ACMB|Appl. Comput. Math. Bak|Applied and Computational Mathematics ACMCS|ACM Comput. Surv.|ACM Computing Surveys ACMJCCH|ACM J. Comput. Cult. Herit.|ACM Journal on Computing and Cultural Heritage ACMJEA|ACM J. Exp. Algorithmics|ACM Journal of Experimental Algorithmics ACMJETCS|ACM J. Emerg. Technol. Comput. Syst.=ACM J. Emerg. Technol. Comput. Sy.|ACM Journal on Emerging Technologies in Computing Systems ACMLPLS|ACM Lett. Program. Lang. Syst.|ACM Letters on Programming Languages and Systems ACMP|Adv. Condens. Matter Phys.|Advances in Condensed Matter Physics ACMSIGCOMMCCR|ACM SIGCOMM Comp. Commun. Rev.|ACM SIGCOMM Computer Communication Review ACMTA|ACM Trans. Algorithms|ACM Transactions on Algorithms ACMTAAS|ACM Trans. Auton. Adapt. Syst.|ACM Transactions on Autonomous and Adaptive Systems ACMTACO|ACM Trans. Archit. Code Optim.|ACM Transactions on Architecture and Code Optimization ACMTALRL|ACM Trans. Asian Low Resour. La.|ACM Transactions on Asian and Low-Resource Language Information Processing ACMTAP|ACM Trans. Appl. Percept.=ACM T. Appl. Percept.|ACM Transactions on Applied Perception ACMTCE|ACM Trans. Comput. Educ.|ACM Transactions on Computing Education ACMTCHI|ACM Trans. Comput. Hum. Interact.=ACM T. Comput. Hum. Int.|ACM Transactions on Computer-Human Interaction ACMTCL|ACM Trans. Comput. Log.|ACM Transactions on Computational Logic ACMTCS|ACM Trans. Comput. Syst.|ACM Transactions on Computer Systems ACMTDAES|ACM Transact. Des. Automat. El. S.|ACM Transactions on Design Automation of Electronic Systems ACMTDS|ACM Trans. Database Syst.|ACM Transactions on Database Systems ACMTECS|ACM Trans. Embed. Comput. Syst.|ACM Transactions on Embedded Computing Systems ACMTG|ACM Trans. Graph.=ACM Trans. Graphic.|ACM Transactions on Graphics ACMTIS|ACM Trans. Inf. Syst.=ACM Trans. Inform. Syst.|ACM Transactions on Information Systems ACMTIST|ACM Trans. Intell. Syst. Technol.=ACM T. Intel. Syst. Tec.|ACM Transactions on Intelligent Systems and Technology ACMTIT|ACM Trans. Internet Technol.|ACM Transactions on Internet Technology ACMTKDD|ACM Trans. Knowl. Discov. Data=ACM T. Knowl. Discov. D.|ACM Transactions on Knowledge Discovery From Data ACMTMCC|ACM Trans. Multimed. Comput. Com.|ACM Transactions on Multimedia Computing Communications and Applications ACMTMCS|ACM Trans. Model. Comput. Simul.=ACM T. Model. Comput. S.|ACM Transactions on Modeling and Computer Simulation ACMTMS|ACM Trans. Math. Softw.=ACM Trans. Math. Software|ACM Transactions on Mathematical Software ACMTPLS|ACM Trans. Program. Lang. Syst.|ACM Transactions on Programming Languages and Systems ACMTPS|ACM Trans. Priv. Secur.|ACM Transactions on Privacy and Security ACMTRTS|ACM Trans. Reconfigurable Technol. Syst.=ACM Trans. Reconfigurable Tech.|ACM Transactions on Reconfigurable Technology and Systems ACMTS|ACM Trans. Storage|ACM Transactions on Storage ACMTSEM|ACM Trans. Softw. Eng. Methodol.|ACM Transactions on Software Engineering and Methodology ACMTSN|ACM Trans. Sens. Netw.=ACM T. Sensor Network.|ACM Transactions on Sensor Networks ACMTW|ACM Trans. Web|ACM Transactions on the Web ACN|Arch. Clin. Neuropsychol.=Arch. Clin. Neuropsych.|Archives of Clinical Neuropsychology ACNB|Artif. Cells Nanomed. Biotechnol.=Artif. Cell. Nanomed. Biotechnol.|Artificial Cells, Nanomedicine, and Biotechnology ACOTC|Acta Chir. Orthop. Traumatol. Cech.=Acta Chir. Orthop. Traumatol. Ce.|Acta Chirurgiae Orthopaedicae et Traumatologiae Cechoslovaca ACP|Acta Chir. Plast.|Acta Chirurgiae Plasticae ACP1|Adv. Chem. Phys.=Adv. Chem. Physics|Advances in Chemical Physics ACP2|Anal. Cell. Pathol.|Analytical Cellular Pathology=Analytical Cellular Pathology: The Journal of the European Society for Analytical Cellular Pathology ACP3|Ann. Clin. Psychiatry|Annals of Clinical Psychiatry ACP4|Atmos. Chem. Phys.|Atmospheric Chemistry and Physics ACPE|Ann. Chir. Plast. Esthet.=Ann. Chir. Plast. Esth.|Annales de Chirurgie Plastique Esthetique=Annales de Chirurgie Plastique et Esthétique ACR|Acc. Chem. Res.=Accounts Chem. Res.|Accounts of Chemical Research ACR1|Adv. Cancer Res.=Advan. Cancer Res.|Advances in Cancer Research ACS|Acta Chim. Sinica|Acta Chimica Sinica ACS1|Acta Chim. Slov.|Acta Chimica Slovenica ACS2|Adv. Complex Syst.|Advances in Complex Systems ACS3|Anim. Cells Syst.|Animal Cells and Systems ACS4|Appl. Categor. Structures|Applied Categorical Structures ACSAMI|ACS Appl. Mater. Interfaces=ACS Appl. Mater. Inter.|ACS Applied Materials & Interfaces=ACS Applied Materials and Interfaces ACSC|ACS Catal.|ACS Catalysis ACSCB|ACS Chem. Biol.|ACS Chemical Biology ACSCN|ACS Chem. Neurosci.|ACS Chemical Neuroscience ACSCS|ACS Cent. Sci.=ACS Central Sci.|ACS Central Science ACSCS1|ACS Comb. Sci.|ACS Combinatorial Science ACSESC|ACS Earth Space Chem.|ACS Earth & Space Chemistry=ACS Earth and Space Chemistry ACSID|ACS Infect. Dis.|ACS Infectious Diseases ACSMCL|ACS Med. Chem. Lett.|ACS Medicinal Chemistry Letters ACSML|ACS Macro Lett.|ACS Macro Letters ACSN|ACS Nano|ACS Nano ACSO|ACS Omega|ACS Omega ACSP|ACS Photonics|ACS Photonics ACSS|ACS Sens.|ACS Sensors ACSSB|ACS Synth. Biol.|ACS Synthetic Biology ACSSCE|ACS Sustain. Chem. Eng.|ACS Sustainable Chemistry & Engineering ACSSS|ACS Symp. Ser.|ACS Symposium Series ACTA|Asian Cardiovasc. Thorac. Ann.|Asian Cardiovascular & Thoracic Annals ACV|Adv. Calc. Var.|Advances in Calculus of Variations AD|Acta Diabetol.|Acta Diabetologica AD1|Actas Dermosifiliogr.|Actas Dermo-Sifiliográficas AD2|Alzheimers Dement.|Alzheimers & Dementia=Alzheimer's & Dementia: The Journal of the Alzheimer's Association AD3|Ann. Dyslexia|Annals of Dyslexia AD4|Anticancer Drugs=Anti Cancer Drug.|Anti-Cancer Drugs AD5|Avian Dis.|Avian Diseases ADAC|Adv. Data Anal. Classif.=Adv. Data Anal. Classi.|Advances in Data Analysis and Classification ADAD|Alzheimer Dis. Assoc. Disord.|Alzheimer Disease and Associated Disorders ADAPA|Acta Dermatovenerol. Alp. Pannonica Adriat.|Acta Dermatovenerologica Alpina, Pannonica, et Adriatica ADC|Acta Dermatovenerol. Croat.=Acta Dermatovener. Cr.|Acta Dermatovenerologica Croatica ADC1|Arch. Dis. Child.|Archives of Disease in Childhood ADCEPE|Arch. Dis. Child. Educ. Pract. Ed.=Arch. Dis. Childhood Educ. Pract.|Archives of Disease in Childhood. Education and Practice Edition ADCFNE|Arch. Dis. Child. Fetal Neonatal Ed.=Arch. Dis. Child. Fetal Neonatal|Archives of Disease in Childhood. Fetal and Neonatal Edition ADDR|Adv. Drug Deliv. Rev.=Advan. Drug Delivery Rev.|Advanced Drug Delivery Reviews ADDT|Assay Drug Dev. Technol.=Assay Drug Dev. Techn.|Assay and Drug Development Technologies ADE|Adv. Differ. Equ.=Adv. Differ. Equ. NY|Advances in Difference Equations ADE1|Adv. Differential Equ.|Advances in Differential Equations ADHD|Atten. Defic. Hyperact. Disord.|Attention Deficit and Hyperactivity Disorders ADJ|Aust. Dent. J.|Australian Dental Journal ADNDT|At. Data Nucl. Data Tables|Atomic Data and Nuclear Data Tables ADP|Ann. Diagn. Pathol.|Annals of Diagnostic Pathology ADR|Adv. Dent. Res.|Advances in Dental Research ADR1|Arch. Dermatol. Res.|Archives of Dermatological Research ADV|Acta Derm. Venereol.=Acta Dermato Venereol.|Acta Dermato-Venereologica ADV1|Ann. Dermatol. Venereol.=Ann. Dermatol. Vener.|Annales de Dermatologie et de Vénéréologie AE|Ann. Epidemiol.|Annals of Epidemiology AE1|Appl. Ergon.|Applied Ergonomics AEC|Australas. Emerg. Care|Australasian Emergency Care AECT|Arch. Environ. Contam. Toxicol.=Arch. Environ. Con. Tox.|Archives of Environment Contamination and Toxicology=Archives of Environmental Contamination and Toxicology AEJ|Aust. Endod. J.|Australian Endodontic Journal=Australian Endodontic Journal: The Journal of the Australian Society of Endodontology Inc AEM|Acad. Emerg. Med.|Academic Emergency Medicine AEM1|Ann. Emerg. Med.|Annals of Emergency Medicine AEM2|Appl. Environ. Microbiol.=Appl. Environ. Microb.|Applied and Environment Microbiology=Applied and Environmental Microbiology AEM3|Arch. Endocrinol. Metab.=Arch. Endocrin. Metab.|Archives of Endocrinology Metabolism=Archives of Endocrinology and Metabolism AEMB|Adv. Exp. Med. Biol.=Advan. Experiment. Med. Biol.|Advances in Experimental Medicine and Biology AENJ|Adv. Emerg. Nurs. J.|Advanced Emergency Nursing Journal AEOH|Arch. Environ. Occup. Health=Arch. Environ. Occup. H.|Archives of Environmental & Occupational Health AEP|Actas Esp. Psiquiatr.=Actas Esp. Psiquiatria|Actas Españolas de Psiquiatría AEP1|Ann. Endocrinol. Paris|Annales D Endocrinologie AES|Adv. Eng. Softw.|Advances in Engineering Software AEU|Arch. Esp. Urol.|Archivos Españoles de Urología AFA|Ann. Funct. Anal.|Annals of Functional Analysis AFM|Ann. Fam. Med.|Annals of Family Medicine AFNR|Adv. Food Nutr. Res.|Advances in Food and Nutrition Research AFP|Am. Fam. Physician=Amer. Fam. Physician|American Family Physician AG|Adv. Genet.|Advances in Genetics AG1|Adv. Geom.|Advances in Geometry AG2|Anim. Genet.|Animal Genetics AG3|Arq. Gastroenterol.|Arquivos de Gastroenterologia AGAG|Ann. Glob. Anal. Geom.|Annals of Global Analysis and Geometry AGB|Acta Gastroenterol. Belg.=Acta Gastro Enterol. Belg.|Acta Gastro-Enterologica Belgica AGG|Arch. Gerontol. Geriatr.=Arch. Gerontol. Geriat.|Archives of Gerontology and Geriatrics AGH|Ann. Glob. Health|Annals of Global Health AGO|Arch. Gynecol. Obstet.|Archives of Gynecology and Obstetrics AGT|Algebr. Geom. Topol.|Algebraic and Geometric Topology AH|Acta Haematol.=Acta Haematol. Basel|Acta Haematologica AH1|Acta Histochem.|Acta Histochemica AH2|Ann. Hematol.|Annals of Hematology AH3|Ann. Hepatol.|Annals of Hepatology AHB|Ann. Hum. Biol.|Annals of Human Biology AHC|Acta Histochem. Cytochem.=Acta Histochem. Cytoc.|Acta Histochemica et Cytochemica AHC1|Adv. Heterocycl. Chem.|Advances in Heterocyclic Chemistry AHCM|Adv. Health Care Manag.|Advances in Health Care Management AHD|Attach. Hum. Dev.|Attachment & Human Development AHE|Anat. Histol. Embryol.|Anatomia, Histologia, Embryologia AHEHP|Appl. Health Econ. Health Policy=Appl. Health Econ. Health Polic.|Applied Health Economics and Health Policy AHEP|Adv. High Energy Phys.|Advances in High Energy Physics AHG|Ann. Hum. Genet.|Annals of Human Genetics AHJ|Am. Heart J.=Amer. Heart J.|American Heart Journal AHM|Adv. Healthc. Mater.|Advanced Healthcare Materials AHN|Ad Hoc Netw.|Ad Hoc Networks AHP|Ann. Henri Poincare|Annales Henri Poincare AHR|Aust. Health Rev.|Australian Health Review AHRR|Anim. Health Res. Rev.|Animal Health Research Reviews AHRT|Arh. Hig. Rada Toksikol.=Arh. Hig. Rada Toksiko.|Arhiv Za Higijenu Rada i Toksikologiju=Arhiv Za Higijenu Rada i Toksikologiju-Archives of Industrial Hygiene and Toxicology AHS|Afr. Health Sci.|African Health Sciences AHSETP|Adv. Health Sci. Educ. Theory Pract.|Advances in Health Sciences Education: Theory and Practice AHSWN|Ad Hoc Sens. Wirel. Netw.|Ad Hoc & Sensor Wireless Networks AI|Acta Inform.|Acta Informatica AI1|Adv. Immunol.=Advan. Immunol.|Advances in Immunology AI2|Allergol. Int.|Allergology International AI3|Ann. Ig.|Annali di Igiene: Medicina Preventiva e di Comunità AI4|Artif. Intell.|Artificial Intelligence AIANMHR|Am. Indian Alsk. Native Ment. Health Res.|American Indian and Alaska Native Mental Health Research: Journal of the National Center=American Indian and Alaska Native Mental Health Research: The Journal of the National Center AIB|Arch. Ital. Biol.|Archives Italiennes de Biologie AIBP|Arch. Insect Biochem. Physiol.=Arch. Insect Biochem.|Archives of Insect Biochemistry and Physiology AIC|Adv. Inorg. Chem.|Advances in Inorganic Chemistry AIC1|Anaesth. Intensive Care=Anaesth. Intens. Care|Anaesthesia and Intensive Care AIC2|Ann. Ital. Chir.|Annali Italiani di Chirurgia AICRP|Ann. ICRP|Annals of the ICRP AIDSB|AIDS Behav.|AIDS and Behavior AIDSC|AIDS Care|AIDS Care-Psychological and Socio-Medical Aspects of AIDS/HIV AIDSEP|AIDS Educ. Prev.|AIDS Education and Prevention AIDSPCSTDS|AIDS Patient Care STDS=AIDS Patient Care St|AIDS Patient Care and STDS AIDSR|AIDS Rev.|AIDS Reviews AIDSRHR|AIDS Res. Hum. Retroviruses=AIDS Res. Hum. Retrovirus.|AIDS Research and Human Retroviruses AIDSRT|AIDS Res. Ther.|AIDS Research and Therapy AIEP|Adv. Imag. Electron Phys.|Advances in Imaging and Electron Physics AIF|Ann. Inst. Fourier|Annales de L Institut Fourier AIHPA|Ann. Inst. Henri Poincare Anal.|Annales de L Institut Henri Poincare-Analyse Non Lineaire AIHPP|Ann. Inst. Henri Poincare Prob.|Annales de L Institut Henri Poincare-Probabilites et Statistiques AIJEC|Aeu Int. J. Electron. Commun.|Aeu-International Journal of Electronics and Communications AIM|Ann. Intern. Med.|Annals of Internal Medicine AIM1|Arch. Iran. Med.|Archives of Iranian Medicine AIM2|Artif. Intell. Med.|Artificial Intelligence in Medicine AIMM|Appl. Immunohistochem. Mol. Morphol.=Appl. Immunohistochem. Mol. Morp.|Applied Immunohistochemistry & Molecular Morphology AINS|Anasthesiol. Intensivmed. Notfallmed. Schmerzther.=Anasthesiol. Intens. N.|Anästhesiologie, Intensivmedizin, Notfallmedizin, Schmerztherapie AIPA|AIP Adv.|AIP Advances AIR|Artif. Intell. Rev.|Artificial Intelligence Review AIR1|Assist. Inferm. Ric.|Assistenza Infermieristica e Ricerca AISM|Ann. Inst. Stat. Math.=Ann. Inst. Statist. Math.|Annals of the Institute of Statistical Mathematics AISS|Ann. Ist Super. Sanita=Ann. I Super. Sanita|Annali Dell'istituto Superiore di Sanità AIT|Anaesthesiol. Intensive Ther.|Anaesthesiology Intensive Therapy AIUA|Arch. Ital. Urol. Androl.|Archivio Italiano di Urologia, Andrologia AJ|Aiche J.=Alche J.|Aiche Journal=Aiche Journal. American Institute of Chemical Engineers AJ1|Anziam J.|Anziam Journal AJA|Am. J. Addict.|The American Journal on Addictions AJA1|Am. J. Audiol.|American Journal of Audiology AJA2|Asian J. Androl.|Asian Journal of Andrology AJA3|Asian J. Anesthesiol.|Asian Journal of Anesthesiology AJA4|Australas. J. Ageing|Australasian Journal on Ageing AJAC|Am. J. Analyt. Chem.|American Journal of Analytical Chemistry AJADOD|Am. J. Alzheimers Dis. Other Demen.=Am. J. Alzheimers Dis. Other Dem.|American Journal of Alzheimer's Disease and Other Dementias AJAIDSR|Afr. J. AIDS Res.|African Journal of AIDS Research AJAMS|Am. J. Appl. Math. Stat.|American Journal of Applied Mathematics and Statistics AJB|Am. J. Bioeth.=Am. J. Bioethics|American Journal of Bioethics=The American Journal of Bioethics AJB1|Am. J. Bot.=Amer. J. Bot.|American Journal of Botany AJC|Am. J. Cardiol.=Amer. J. Cardiol.|American Journal of Cardiology=The American Journal of Cardiology AJC1|Anatol. J. Cardiol.|Anatolian Journal of Cardiology AJC2|Arab. J. Chem.|Arabian Journal of Chemistry AJC3|Aust. J. Chem.|Australian Journal of Chemistry AJCC|Am. J. Crit. Care|American Journal of Critical Care AJCD|Am. J. Cardiovasc. Drugs=Am. J. Cardiovasc. Drug.|American Journal of Cardiovascular Drugs=American Journal of Cardiovascular Drugs: Drugs, Devices, and Other Interventions AJCD1|Am. J. Clin. Dermatol.|American Journal of Clinical Dermatology AJCH|Am. J. Clin. Hypn.=Amer. J. Clin. Hypn.|American Journal of Clinical Hypnosis=The American Journal of Clinical Hypnosis AJCM|Am. J. Chin. Med.|The American Journal of Chinese Medicine AJCN|Am. J. Clin. Nutr.=Amer. J. Clin. Nutr.|American Journal of Clinical Nutrition=The American Journal of Clinical Nutrition AJCO|Am. J. Clin. Oncol.|American Journal of Clinical Oncology AJCP|Am. J. Clin. Pathol.=Amer. J. Clin. Pathol.|American Journal of Clinical Pathology AJCP1|Am. J. Community Psychol.=Amer. J. Commun. Psychol.|American Journal of Community Psychology AJCR|Am. J. Case Rep.|The American Journal of Case Reports AJD|Am. J. Dermatopathol.|The American Journal of Dermatopathology AJD1|Australas. J. Dermatol.|Australasian Journal of Dermatology=The Australasian Journal of Dermatology AJDAA|Am. J. Drug Alcohol Abuse|The American Journal of Drug and Alcohol Abuse AJE|Am. J. Epidemiol.=Amer. J. Epidemiol.|American Journal of Epidemiology AJEM|Am. J. Emerg. Med.=Amer. J. Emerg. Med.|American Journal of Emergency Medicine=The American Journal of Emergency Medicine AJES|Asian J. Endosc. Surg.|Asian Journal of Endoscopic Surgery AJFMP|Am. J. Forensic Med. Pathol.|The American Journal of Forensic Medicine and Pathology AJG|Am. J. Gastroenterol.=Amer. J. Gastroenterol.|American Journal of Gastroenterology=The American Journal of Gastroenterology AJG1|Arab J. Gastroenterol.|Arab Journal of Gastroenterology AJGP|Am. J. Geriatr. Psychiatry|The American Journal of Geriatric Psychiatry AJGP1|Aust. J. Gen. Pract.|Australian Journal of General Practice AJH|Am. J. Hematol.=Amer. J. Hematol.|American Journal of Hematology AJH1|Am. J. Hypertens.=Amer. J. Hypertens.|American Journal of Hypertension AJHB|Am. J. Health Behav.|American Journal of Health Behavior AJHB1|Am. J. Hum. Biol.=Amer. J. Hum. Biol.|American Journal of Human Biology AJHG|Am. J. Hum. Genet.=Amer. J. Hum. Genet.|American Journal of Human Genetics AJHP|Am. J. Health Promot.=Amer. J. Health Promotion|American Journal of Health Promotion AJHPC|Am. J. Hosp. Palliat. Care|The American Journal of Hospice & Palliative Care AJHSP|Am. J. Health Syst. Pharm.|American Journal of Health-System Pharmacy AJIC|Am. J. Infect. Control=Amer. J. Infect. Control|American Journal of Infection Control AJIDD|Am. J. Intellect. Dev. Disabil.|American Journal on Intellectual and Developmental Disabilities AJIM|Am. J. Ind. Med.=Amer. J. Ind. Med.|American Journal of Industrial Medicine AJKD|Am. J. Kidney Dis.=Amer. J. Kidney Dis.|American Journal of Kidney Diseases AJLM|Am. J. Law Med.=Amer. J. Law Med.|American Journal of Law & Medicine AJM|Am. J. Med.=Amer. J. Med.|American Journal of Medicine=The American Journal of Medicine AJM1|Amer. J. Math.|American Journal of Mathematics AJM2|Asian J. Math.|Asian Journal of Mathematics AJMC|Am. J. Manag. Care|American Journal of Managed Care=The American Journal of Managed Care AJMGA|Am. J. Med. Genet. A=Am. J. Med. Genet. Part A|American Journal of Medical Genetics. Part A AJMGBNG|Am. J. Med. Genet. B Neuropsychiatr. Genet.=Am. J. Med. Genet. Part B|American Journal of Medical Genetics Part B: Neuropsychiatric Genetics AJMGCSMG|Am. J. Med. Genet. C Semin. Med. Genet.=Am. J. Med. Genet. Part C|American Journal of Medical Genetics Part C: Seminars in Medical Genetics AJMH|Am. J. Mens Health|American Journal of Men's Health AJMQ|Am. J. Med. Qual.=Amer. J. Med. Qual.|American Journal of Medical Quality AJMS|Am. J. Med. Sci.=Amer. J. Med. Sci.|American Journal of the Medical Sciences=The American Journal of the Medical Sciences AJN|Am. J. Nephrol.=Amer. J. Nephrol.|American Journal of Nephrology AJN1|Am. J. Nurs.=Amer. J. Nurs.|American Journal of Nursing=The American Journal of Nursing AJNRAJN|AJNR Am. J. Neuroradiol.|AJNR. American Journal of Neuroradiology AJNT|Arab J. Nephrol. Transplant.|Arab Journal of Nephrology and Transplantation AJO|Am. J. Ophthalmol.=Amer. J. Ophthalmol.|American Journal of Ophthalmology AJO1|Am. J. Orthop.|The American Journal of Orthopedics AJO2|Am. J. Orthopsychiatry|The American Journal of Orthopsychiatry AJO3|Am. J. Otolaryngol.=Amer. J. Otolaryngol.|American Journal of Otolaryngology AJOBEB|AJOB Empir. Bioeth.|AJOB Empirical Bioethics AJOC|Asian J. Org. Chem.|Asian Journal of Organic Chemistry AJODO|Am. J. Orthod. Dentofacial Orthop.=Amer. J. Orthodont. Dent. Orthop.|American Journal of Orthodontics and Dentofacial Orthopedics AJOG|Am. J. Obstet. Gynecol.=Amer. J. Obstet. Gynecol.|American Journal of Obstetrics and Gynecology AJOT|Am. J. Occup. Ther.=Amer. J. Occup. Ther.|American Journal of Occupational Therapy=The American Journal of Occupational Therapy AJP|Am. J. Pathol.=Amer. J. Pathol.|American Journal of Pathology=The American Journal of Pathology AJP1|Am. J. Perinatol.=Amer. J. Perinatol.|American Journal of Perinatology AJP2|Am. J. Phys.=Amer. J. Phys.|American Journal of Physics AJP3|Am. J. Primatol.=Amer. J. Primatol.|American Journal of Primatology AJP4|Am. J. Psychiatry|The American Journal of Psychiatry AJP5|Am. J. Psychoanal.|American Journal of Psychoanalysis AJP6|Asian J. Psychiatr.|Asian Journal of Psychiatry AJP7|Aust. J. Phys.|Australian Journal of Physics AJPA|Am. J. Phys. Anthropol.=Amer. J. Phys. Anthropol.|American Journal of Physical Anthropology AJPCP|Am. J. Physiol. Cell Physiol.=Amer. J. Physiol. Cell Physiol.|American Journal of Physiology. Cell Physiology AJPE|Am. J. Pharm. Educ.=Amer. J. Pharm. Educ.|American Journal of Pharmaceutical Education AJPEM|Am. J. Physiol. Endocrinol. Metab.=Amer. J. Physiol. Endocrinol. Met.|American Journal of Physiology. Endocrinology and Metabolism AJPGLP|Am. J. Physiol. Gastrointest. Liver Physiol.=Amer. J. Physiol. Gastrointest. L.|American Journal of Physiology. Gastrointestinal and Liver Physiology AJPH|Am. J. Public Health=Amer. J. Public Health|American Journal of Public Health AJPH1|Aust. J. Prim. Health|Australian Journal of Primary Health AJPHCFM|Afr. J. Prim. Health Care Fam. Med.|African Journal of Primary Health Care & Family Medicine AJPHCP|Am. J. Physiol. Heart Circ. Physiol.=Amer. J. Physiol. Heart Circ. Phy.|American Journal of Physiology. Heart and Circulatory Physiology AJPLCMP|Am. J. Physiol. Lung Cell. Mol. Physiol.=Amer. J. Physiol. Lung Cell. M. Ph.|American Journal of Physiology. Lung Cellular and Molecular Physiology AJPM|Am. J. Prev. Med.=Amer. J. Prev. Med.|American Journal of Preventive Medicine AJPMR|Am. J. Phys. Med. Rehabil.=Amer. J. Phys. Med. Rehabil.|American Journal of Physical Medicine & Rehabilitation AJPRICP|Am. J. Physiol. Regul. Integr. Comp. Physiol.=Amer. J. Physiol. Regul. Integr. C.|American Journal of Physiology. Regulatory, Integrative and Comparative Physiology AJPRP|Am. J. Physiol. Renal Physiol.=Amer. J. Physiol. Renal Physiol.|American Journal of Physiology. Renal Physiology AJPS|Afr. J. Paediatr. Surg.|African Journal of Paediatric Surgery AJRA|Am. J. Rhinol. Allergy|American Journal of Rhinology & Allergy AJRAJR|AJR Am. J. Roentgenol.|AJR. American Journal of Roentgenology AJRCCM|Am. J. Respir. Crit. Care Med.=Amer. J. Respir. Crit. Care Med.|American Journal of Respiratory and Critical Care Medicine AJRCMB|Am. J. Respir. Cell Mol. Biol.=Amer. J. Respir. Cell Molec. Biol.|American Journal of Respiratory Cell and Molecular Biology AJRH|Afr. J. Reprod. Health|African Journal of Reproductive Health AJRH1|Aust. J. Rural Health|Australian Journal of Rural Health=The Australian Journal of Rural Health AJRI|Am. J. Reprod. Immunol.=Amer. J. Reprod. Immunol.|American Journal of Reproductive Immunology AJS|Am. J. Surg.=Amer. J. Surg.|American Journal of Surgery AJS1|Asian J. Surg.|Asian Journal of Surgery AJSLP|Am. J. Speech Lang. Pathol.=Am. J. Speech Lang. Pat.|American Journal of Speech-Language Pathology AJSM|Am. J. Sports Med.|The American Journal of Sports Medicine AJSP|Am. J. Surg. Pathol.=Amer. J. Surg. Pathol.|American Journal of Surgical Pathology=The American Journal of Surgical Pathology AJT|Am. J. Ther.|American Journal of Therapeutics AJT1|Am. J. Transplant.|American Journal of Transplantation AJTMH|Am. J. Trop. Med. Hyg.=Amer. J. Trop. Med. Hyg.|American Journal of Tropical Medicine and Hygiene=The American Journal of Tropical Medicine and Hygiene AJTR|Am. J. Transl. Res.|American Journal of Translational Research AJVR|Am. J. Vet. Res.=Amer. J. Vet. Res.|American Journal of Veterinary Research AL|Algebr. Log.|Algebra and Logic AL1|Am. Lab.=Amer. Lab.|American Laboratory AL2|Anal. Lett.|Analytical Letters AL3|Artif. Life|Artificial Life ALA|Altern. Lab. Anim.|Alternatives to Laboratory Animals ALAJPMS|Alea Lat. Am. J. Probab. Math. Sta.|Alea-Latin American Journal of Probability and Mathematical Statistics ALCR|Adv. Life Course Res.|Advances in Life Course Research ALM|Ann. Lab. Med.|Annals of Laboratory Medicine ALSFD|Amyotroph. Lateral Scler. Frontotemporal Degener.|Amyotrophic Lateral Sclerosis & Frontotemporal Degeneration AM|Acad. Med.|Academic Medicine=Academic Medicine: Journal of the Association of American Medical Colleges AM1|Acta Microsc.|Acta Microscopica AM2|Acta Myol.|Acta Myologica: Myopathies and Cardiomyopathies AM3|Acupunct. Med.|Acupuncture in Medicine=Acupuncture in Medicine: Journal of the British Medical Acupuncture Society AM4|Advan. Math.|Advances in Mathematics AM5|Aequationes Math.|Aequationes Mathematicae AM6|Aging Male|The Aging Male AM7|Anal. Math.|Analysis Mathematica AM8|Anal. Methods=Anal. Methods UK|Analytical Methods=Analytical Methods: Advancing Methods and Applications AM9|Ann. Math.|Annals of Mathematics AM10|Ann. Med.|Annals of Medicine AM11|Anthropol. Med.|Anthropology & Medicine AM12|Arch. Math.|Archiv Der Mathematik=Archiv Der Mathematik. Archives of Mathematics. Archives Mathematiques AM13|Arch. Microbiol.|Archives of Microbiology AM14|Ark. Mat.|Arkiv for Matematik AMA|Acta Med. Acad.|Acta Medica Academica AMAJE|AMA J. Ethics|AMA Journal of Ethics AMB|Adv. Mar. Biol.=Advan. Mar. Biol.|Advances in Marine Biology AMB1|Algorithms Mol. Biol.=Algorithm. Mol. Biol.|Algorithms for Molecular Biology AMB2|Appl. Microbiol. Biotechnol.=Appl. Microbiol. Biot.|Applied Microbiology and Biotechnology AMBM|Adv. Mind Body Med.|Advances in Mind-Body Medicine AMC|Adv. Math. Commun.|Advances in Mathematics of Communications AMC1|Appl. Math. Comput.|Applied Mathematics and Computation AMC2|Appl. Math. Czech|Applications of Mathematics AMC3|Ars Math. Contemp.|Ars Mathematica Contemporanea AMD|Acta Math. Djursholm|Acta Mathematica AMH|Acta Math. Hung.|Acta Mathematica Hungarica AMH1|Aging Ment. Health|Aging & Mental Health AMHA|Acta Med. Hist. Adriat.|Acta Medico-Historica Adriatica AMHP|Aerosp. Med. Hum. Perform.=Aerosp. Med. Hum. Perf.|Aerospace Medicine and Human Performance AMI|Acta Med. Indones.|Acta Medica Indonesiana AMIH|Acta Microbiol. Immunol. Hung.=Acta Microbiol. Imm. H.|Acta Microbiologica et Immunologica Hungarica AMJ|Air Med. J.|Air Medical Journal AMJCUSB|Appl. Math. J. Chin. Univ. Ser. B|Applied Mathematics-A Journal of Chinese Universities Series B AML|Appl. Math. Lett.|Applied Mathematics Letters AML1|Arch. Math. Logic|Archive for Mathematical Logic AMM|Am. Math. Mon.=Amer. Math. Mon.|American Mathematical Monthly=The American Mathematical Monthly AMM1|Appl. Math. Model.|Applied Mathematical Modelling AMO|Acta Med. Okayama|Acta Medica Okayama=Acta Medicinae Okayama AMO1|Appl. Math. Optim.=Appl. Math. Opt.|Applied Mathematics and Optimization AMP|Acta Med. Port.=Acta Medica Port.|Acta Médica Portuguesa AMP1|Adv. Math. Phys.|Advances in Mathematical Physics AMP2|Adv. Microb. Physiol.=Advan. Microb. Physiol.|Advances in Microbial Physiology AMP3|Anal. Math. Phys.|Analysis and Mathematical Physics AMPA|Ann. Mat. Pur. Appl.|Annali di Matematica Pura Ed Applicata AMR|Appl. Magn. Reson.|Applied Magnetic Resonance AMR1|Arch. Med. Res.|Archives of Medical Research AMS|Acta Math. Sci.|Acta Mathematica Scientia AMS1|Adv. Med. Sci.=Adv. Med. Sci. Poland|Advances in Medical Sciences AMS2|Ann. Math. Stat.=Ann. Math. Statist.|Annals of Mathematical Statistics AMSES|Acta Math. Sin. Engl. Ser.=Acta Math. Sin. English Series|Acta Mathematica Sinica, English Series AMSK|Arch. Med. Sadowej Kryminol.|Archiwum Medycyny Sadowej i Kryminologii=Archiwum Medycyny Sa̧dowej i Kryminologii AMSUH|Abh. Math. Sem. Univ. Hamburg|Abhandlungen Aus Dem Mathematischen Seminar Der Universitat Hamburg AMW|Adv. Mater. Weinheim=Advan. Mater.|Advanced Materials AN|Acta Naturae=Acta Nat.|Acta Naturae AN1|Acta Neuropathol.|Acta Neuropathologica AN2|Acta Neuropsychiatr.|Acta Neuropsychiatrica AN3|Acta Numer.|Acta Numerica AN4|Adv. Neurobiol.|Advances in Neurobiology AN5|Adv. Nutr.|Advances in Nutrition AN6|Am. Nat.=Amer. Naturalist|American Naturalist=The American Naturalist AN7|Ann. Neurol.|Annals of Neurology AN8|Appl. Nanosci.|Applied Nanoscience AN9|Arq. Neuropsiquiatr.=Arq. Neuro Psiquiat.|Arquivos de Neuro-Psiquiatria AN10|Audiol. Neurootol=Audiol. Neuro Otol.|Audiology & Neuro-Otology=Audiology and Neuro-Otology AN11|Auton. Neurosci.=Auton. Neurosci. Basic Clin.|Autonomic Neuroscience: Basic & Clinical ANA|Adv. Nonlinear Anal.|Advances in Nonlinear Analysis ANA1|Appl. Neuropsychol. Adult=Appl. Neuropsych. Adul.|Applied Neuropsychology. Adult ANB|Acta Neurol. Belg.|Acta Neurologica Belgica ANC|Acta Neuropathol. Commun.=Acta Neuropathol. Com.|Acta Neuropathologica Communications ANC1|Adv. Neonatal Care=Adv. Neonat. Care|Advances in Neonatal Care ANC2|Appl. Neuropsychol. Child=Appl. Neuropsych. Chil.|Applied Neuropsychology. Child ANE|Ann. Noninvasive Electrocardiol.=Ann. Noninvasive Electrocardio.|Annals of Noninvasive Electrocardiology ANL|Auris Nasus Larynx|Auris, Nasus, Larynx ANM|Ann. Nucl. Med.|Annals of Nuclear Medicine ANM1|Ann. Nutr. Metab.|Annals of Nutrition & Metabolism=Annals of Nutrition and Metabolism ANM2|Appl. Numer. Math.|Applied Numerical Mathematics=Applied Numerical Mathematics: Transactions of IMACS ANR|Appl. Nurs. Res.=Appl. Nursing Res.|Applied Nursing Research ANS|Acta Neurochir. Suppl.|Acta Neurochirurgica. Supplement ANS1|Acta Neurol. Scand.|Acta Neurologica Scandinavica ANS2|Adv. Nonlinear Stud.|Advanced Nonlinear Studies ANSANS|ANS Adv. Nurs. Sci.|ANS. Advances in Nursing Science ANT|Acta Neurol. Taiwan.|Acta Neurologica Taiwanica ANT1|Algebr. Number Theory|Algebra & Number Theory ANYAS|Ann. NY Acad. Sci.|Annals of the New York Academy of Sciences ANZJOG|Aust. NZ J. Obstet. Gynaecol.=Aust. NZ J. Obstet. Gyn.|Australian & New Zealand Journal of Obstetrics & Gynaecology=The Australian & New Zealand Journal of Obstetrics & Gynaecology ANZJP|Aust. NZ J. Psychiatry|The Australian and New Zealand Journal of Psychiatry ANZJPH|Aust. NZ J. Public Health=Aust. NZ Publ. Health|Australian and New Zealand Journal of Public Health ANZJS|ANZ J. Surg.|ANZ Journal of Surgery ANZJS1|Aust. NZ J. Stat.|Australian & New Zealand Journal of Statistics AO|Acta Oncol.|Acta Oncologica AO1|Acta Ophthalmol.|Acta Ophthalmologica AO2|Acta Orthop.|Acta Orthopaedica AO3|Acta Otolaryngol.=Acta Oto Laryngol.|Acta Oto-Laryngologica AO4|Adv. Otorhinolaryngol.|Advances in Oto-Rhino-Laryngology AO5|Angle Orthod.=Angle Orthodont.|Angle Orthodontist=The Angle Orthodontist AO6|Ann. Oncol.|Annals of Oncology AO7|Appl. Ontol.|Applied Ontology AO8|Appl. Opt.=Appl. Optics|Applied Optics AO9|Arch. Osteoporos.|Archives of Osteoporosis AO10|Artif. Organs|Artificial Organs AOB|Acta Orthop. Belg.|Acta Orthopaedica Belgica AOB1|Arch. Oral Biol.|Archives of Oral Biology AOC|Adv. Organometal. Chem.|Advances in Organometallic Chemistry AOC1|Appl. Organomet. Chem.=Appl. Organometal. Chem.|Applied Organometallic Chemistry AOE|Acta Otorrinolaringol. Esp.|Acta Otorrinolaringológica Española AOGS|Acta Obstet. Gynecol. Scand.=Acta Obstet. Gyn. Scan.|Acta Obstetricia et Gynecologica Scandinavica AOI|Acta Otorhinolaryngol. Ital.=Acta Otorhinolaryngo.|Acta Otorhinolaryngologica Italica AOL|Acta Odontol. Latinoam.|Acta Odontológica Latinoamericana AOM|Acta Ortop. Mex.|Acta Ortopédica Mexicana AOMSCNA|Atlas Oral Maxillofac. Surg. Clin. North Am.|Atlas of the Oral and Maxillofacial Surgery Clinics of North America AOP|Adv. Opt. Photonics|Advances in Optics and Photonics AOR|Ann. Oper. Res.|Annals of Operations Research AORL|Ann. Otol. Rhinol. Laryngol.=Ann. Oto. Rhinol. Laryn.|Annals of Otology Rhinology and Laryngology=The Annals of Otology, Rhinology, and Laryngology AOS|Acta Odontol. Scand.|Acta Odontologica Scandinavica AOS1|Acta Orthop. Suppl.|Acta Orthopaedica. Supplementum AOS2|Acta Otolaryngol. Suppl.|Acta Oto-Laryngologica. Supplementum AOTJ|Aust. Occup. Ther. J.|Australian Occupational Therapy Journal AOTS|Arch. Orthop. Trauma Surg.=Arch. Orthop. Traum. Surg.|Archives of Orthopaedic and Trauma Surgery=Archives of Orthopaedic and Traumatic Surgery. Archiv fur Orthopadische und Unfall-Chirurgie AOTT|Acta Orthop. Traumatol. Turc.=Acta Orthop. Traumato.|Acta Orthopaedica et Traumatologica Turcica AP|Acad. Pediatr.|Academic Pediatrics AP1|Acad. Psychiatry=Acad. Psychiatr.|Academic Psychiatry AP2|Acoust. Phys.=Acoust. Phys. Engl. Tr.|Acoustical Physics AP3|Acta Paediatr.=Acta Paediat.|Acta Paediatrica AP4|Acta Parasitol.|Acta Parasitologica AP5|Acta Physiol.|Acta Physiologica AP6|Adv. Parasitol.=Advan. Parasitol.|Advances in Parasitology AP7|Adv. Pediatr.|Advances in Pediatrics AP8|Adv. Pharmacol.|Advances in Pharmacology AP9|Adv. Phys.=Advan. Phys.|Advances in Physics AP10|Am. Psychol.=Amer. Psychol.|American Psychologist=The American Psychologist AP11|Anesth. Prog.|Anesthesia Progress AP12|Ann. Parasitol.|Annals of Parasitology AP13|Ann. Pathol.|Annales de Pathologie AP14|Ann. Pharmacother.|Annals of Pharmacotherapy=The Annals of Pharmacotherapy AP15|Ann. Phys.=Ann. Phys. Berlin|Annalen Der Physik AP16|Ann. Probab.|Annals of Probability AP17|Arch. Pediatr.|Archives de Pédiatrie: Organe Officiel de la Sociéte Française de Pédiatrie AP18|Aten. Primaria=Aten. Prim.|Atencion Primaria AP19|Australas. Psychiatry|Australasian Psychiatry=Australasian Psychiatry: Bulletin of Royal Australian and New Zealand College of Psychiatrists AP20|Avian Pathol.|Avian Pathology=Avian Pathology: Journal of the W.V.P.A APACS|Abstr. Pap. Amer. Chem. Soc.|Abstracts of Papers of the American Chemical Society APAL|Ann. Pure Appl. Logic|Annals of Pure and Applied Logic APAMSP|Appl. Phys. A Mater. Sci. Process.=Appl. Phys. A Mat. Sci. Process.|Applied Physics. A, Materials Science & Processing APAQ|Adapt. Phys. Activ. Q.=Adapt. Phys. Act. Quart.|Adapted Physical Activity Quarterly APB|Appl. Phys. B=Appl. Phys. B Lasers Opt.|Applied Physics B=Applied Physics. B, Lasers and Optics APB1|Appl. Psychophysiol. Biofeedback=Appl. Psychophysiol. Biofeedbac.|Applied Psychophysiology and Biofeedback APB2|Arch. Physiol. Biochem.|Archives of Physiology and Biochemistry APC|Adv. Protein Chem.|Advances in Protein Chemistry APCS|Acta Phys. Chim. Sin.|Acta Physico-Chimica Sinica APCSB|Adv. Protein Chem. Struct. Biol.=Adv. Protein Chem. Struc. Biol.|Advances in Protein Chemistry and Structural Biology APDE|Anal. PDE|Analysis & PDE APE|Adv. Physiol. Educ.|Advances in Physiology Education APESM|Australas. Phys. Eng. Sci. Med.=Australas. Phys. Eng. S.|Australasian Physical & Engineering Sciences in Medicine APEXPRESS|Appl. Phys. EXPRESS|Applied Physics EXPRESS APF|Ann. Pharm. Fr.|Annales Pharmaceutiques Françaises APHWB|Appl. Psychol. Health Well Being=Appl. Psychol. Health Well Bein.|Applied Psychology. Health and Well-Being APJAI|Asian Pac. J. Allergy Immunol.=Asian Pac. J. Allergy|Asian Pacific Journal of Allergy and Immunology APJCE|Asia Pac. J. Chem. Eng.|Asia-Pacific Journal of Chemical Engineering APJCN|Asia Pac. J. Clin. Nutr.|Asia Pacific Journal of Clinical Nutrition APJCO|Asia Pac. J. Clin. Oncol.=Asia Pac. J. Clin. Onco.|Asia-Pacific Journal of Clinical Oncology APJCP|Asian Pac. J. Cancer Prev.|Asian Pacific Journal of Cancer Prevention APJPH|Asia Pac. J. Public Health=Asia Pac. J. Public He.|Asia-Pacific Journal of Public Health APL|Appl. Phys. Lett.|Applied Physics Letters APLM|Arch. Pathol. Lab. Med.|Archives of Pathology & Laboratory Medicine APLP|APL Photonics|APL Photonics APM|Adv. Psychosom. Med.=Advan. Psychosom. Med.|Advances in Psychosomatic Medicine APM1|Ann. Palliat. Med.|Annals of Palliative Medicine APM2|Ann. Pol. Math.|Annales Polonici Mathematici APM3|Appl. Psychol. Meas.=Appl. Psych. Meas.|Applied Psychological Measurement APMH|Adm. Policy Ment. Health|Administration and Policy in Mental Health APMIS0|APMIS|APMIS APMISS|APMIS Suppl.|APMIS. Supplementum APMR|Arch. Phys. Med. Rehabil.=Arch. Phys. Med. Rehab.|Archives of Physical Medicine and Rehabilitation APN|Arch. Psychiatr. Nurs.=Archives Psychiatr. Nurs.|Archives of Psychiatric Nursing APNY|Ann. Phys. New York|Annals of Physics APOC|Adv. Phys. Org. Chem.=Advan. Phys. Organ. Chem.|Advances in Physical Organic Chemistry APP|Asia Pac. Psychiatry=Asia Pac. Psychiat.|Asia-Pacific Psychiatry APP1|Atten. Percept. Psychophys.=Atten. Percept. Psycho.|Attention, Perception & Psychophysics APPA|Acta Phys. Pol. A|Acta Physica Polonica A APPB|Acta Phys. Pol. B|Acta Physica Polonica B APR|Appl. Phys. Rev.|Applied Physics Reviews APR1|Arch. Pharm. Res.=Arch. Pharm. Research|Archives of Pharmacal Research APRM|Ann. Phys. Rehabil. Med.|Annals of Physical and Rehabilitation Medicine APS|Acta Pharmacol. Sin.|Acta Pharmacologica Sinica APS1|Acta Phys. Slovaca|Acta Physica Slovaca APS2|Acta Polym. Sin.|Acta Polymerica Sinica APS3|Acta Psychiatr. Scand.=Acta Psychiat. Scand.|Acta Psychiatrica Scandinavica APS4|Adv. Polym. Sci.|Advances in Polymer Science APS5|Aesthetic Plast. Surg.=Aesthet. Plast. Surg.|Aesthetic Plastic Surgery APS6|Ann. Plast. Surg.=Ann. Plastic Surg.|Annals of Plastic Surgery APSCE|Acta Phys. Sin. Chinese Ed.|Acta Physica Sinica APSS|Acta Psychiatr. Scand. Suppl.|Acta Psychiatrica Scandinavica. Supplementum APT|Adv. Polym. Technol.|Advances in Polymer Technology APT1|Adv. Powder Technol.=Advanced Powder Technol.|Advanced Powder Technology=Advanced Powder Technology: The International Journal of the Society of Powder Technology, Japan APT2|Aliment. Pharmacol. Ther.=Aliment. Pharmacol. Therapeut.|Alimentary Pharmacology & Therapeutics AQA|Accredit. Qual. Assur.|Accreditation and Quality Assurance AQC|Adv. Quantum Chem.|Advances in Quantum Chemistry AQCH|Anal. Quant. Cytopathol. Histpathol=Anal. Quant. Cytopathol. Histopa.|Analytical and Quantitative Cytopathology and Histopathology AR|Acad. Radiol.|Academic Radiology AR1|Account. Res.|Accountability in Research=Accountability in Research: Policies and Quality Assurance AR2|Acta Radiol.|Acta Radiologica AR3|Alcohol Res.=Alcohol Res. Curr. Rev.|Alcohol Research: Current Reviews AR4|Algal Res.|Algal Research=Algal Research-Biomass Biofuels and Bioproducts AR5|Anat. Rec.|The Anatomical Record=Anatomical Record-Advances in Integrative Anatomy and Evolutionary Biology AR6|Anticancer Res.|Anticancer Research AR7|Antiviral Res.=Antivir. Res.|Antiviral Research AR8|Appl. Rheol.|Applied Rheology AR9|Autism Res.|Autism Research AR10|Autoimmun. Rev.|Autoimmunity Reviews ARAB|Annu. Rev. Anim. Biosci.|Annual Review of Animal Biosciences ARAC|Annu. Rev. Anal. Chem.|Annual Review of Analytical Chemistry ARB|Annu. Rev. Biochem.|Annual Review of Biochemistry ARB1|Annu. Rev. Biophys.|Annual Review of Biophysics ARBBS|Annu. Rev. Biophys. Biomol. Struct.|Annual Review of Biophysics and Biomolecular Structure ARBE|Annu. Rev. Biomed. Eng.|Annual Review of Biomedical Engineering ARCBE|Annu. Rev. Chem. Biomol. Eng.=Annu. Rev. Chem. Biomol.|Annual Review of Chemical and Biomolecular Engineering ARCC|Annu. Rep. Comput. Chem.|Annual Reports in Computational Chemistry ARCDB|Annu. Rev. Cell Dev. Biol.=Annu. Rev. Cell Dev. Bi.|Annual Review of Cell and Developmental Biology ARCET|Automat. Remote Contr. Engl. Tr.|Automation and Remote Control ARCMP|Annu. Rev. Condens. Matter Phys.=Annu. Rev. Conden. Ma. P.|Annual Review of Condensed Matter Physics ARCP|Annu. Rev. Clin. Psychol.=Annu. Rev. Clin. Psycho.|Annual Review of Clinical Psychology ARCSE|Ann. R. Coll. Surg. Engl.=Ann. Roy. Coll. Surg. Engl.|Annals of the Royal College of Surgeons of England ARD|Ann. Rheum. Dis.|Annals of the Rheumatic Diseases ARE|Annu. Rev. Entomol.|Annual Review of Entomology ARFM|Annu. Rev. Fluid Mech.|Annual Review of Fluid Mechanics ARFST|Annu. Rev. Food Sci. Technol.=Annu. Rev. Food Sci. T.|Annual Review of Food Science and Technology ARG|Annu. Rev. Genet.|Annual Review of Genetics ARGHG|Annu. Rev. Genomics Hum. Genet.=Annu. Rev. Genom. Hum. G.|Annual Review of Genomics and Human Genetics ARI|Annu. Rev. Immunol.|Annual Review of Immunology ARI1|Appl. Radiat. Isot.=Appl. Radiat. Isotopes|Applied Radiation and Isotopes ARI2|Arch. Razi Inst.|Archives of Razi Institute ARIC|Antimicrob. Resist. Infect. Control=Antimicrob. Resist. Infect. Cont.|Antimicrobial Resistance and Infection Control ARM|Adv. Respir. Med.|Advances in Respiratory Medicine ARM1|Annu. Rev. Med.|Annual Review of Medicine ARM2|Annu. Rev. Microbiol.|Annual Review of Microbiology ARMA|Arch. Ration. Mech. Anal.=Arch. Ration. Mech. An.|Archive for Rational Mechanics and Analysis ARMS|Ann. Rev. Mar. Sci.=Annu. Rev. Mar. Sci.|Annual Review of Marine Science ARN|Annu. Rev. Neurosci.|Annual Review of Neuroscience ARN1|Annu. Rev. Nutr.|Annual Review of Nutrition ARNPS|Annu. Rev. Nucl. Par. Sci.|Annual Review of Nuclear and Particle Science ARNR|Annu. Rev. Nurs. Res.|Annual Review of Nursing Research ARP|Acta Reumatol. Port.|Acta Reumatológica Portuguesa ARP1|Annu. Rev. Pathol.|Annual Review of Pathology ARP2|Annu. Rev. Pharmacol.=Annu. Rev. Pharmacool Toxicol.|Annual Review of Pharmacology=Annual Review of Pharmacology and Toxicology ARP3|Annu. Rev. Physiol.|Annual Review of Physiology ARP4|Annu. Rev. Phytopathol.|Annual Review of Phytopathology ARP5|Annu. Rev. Psychol.|Annual Review of Psychology ARPB|Annu. Rev. Plant Biol.|Annual Review of Plant Biology ARPC|Annu. Rev. Phys. Chem.|Annual Review of Physical Chemistry ARPH|Annu. Rev. Public Health=Annu. Rev. Publ. Health|Annual Review of Public Health ARR|Ageing Res. Rev.|Ageing Research Reviews ARS|Anim. Reprod. Sci.|Animal Reproduction Science ARS1|Antioxid. Redox Signal.=Antioxid. Redox Sign.|Antioxidants & Redox Signaling ARSA|Annu. Rev. Stat. Appl.=Annu. Rev. Stat.|Annual Review of Statistics and its Application ART|Algebr. Represent. Theory|Algebras and Representation Theory ART1|Alzheimers Res. Ther.|Alzheimer's Research & Therapy ART2|Arthritis Res. Ther.|Arthritis Research & Therapy ARV|Annu. Rev. Virol.=Ann. Rev. Virol.|Annual Review of Virology ARVS|Annu. Rev. Vis. Sci.=Annual Rev. Vis. Sci.|Annual Review of Vision Science AS|Adv. Surg.|Advances in Surgery AS1|Advanced Sci.|Advanced Science AS2|Am. Sci.=Amer. Sci.|American Scientist AS3|Am. Stat.=Amer. Statist.|American Statistician=The American Statistician AS4|Am. Surg.|The American Surgeon AS5|Anal. Sci.|Analytical Sciences=Analytical Sciences: The International Journal of the Japan Society for Analytical Chemistry AS6|Ann. Sci.|Annals of Science AS7|Ann. Stat.=Ann. Statist.|Annals of Statistics=The Annals of Statistics AS8|Ann. Surg.|Annals of Surgery AS9|Appl. Spectrosc.|Applied Spectroscopy AS10|Appl. Stat.|Applied Statistics AS11|Atheroscler. Suppl.=Atherosclerosis Supp.|Atherosclerosis. Supplements AS12|Atom. Spectrosc.|Atomic Spectroscopy ASB|Arch. Sex. Behav.|Archives of Sexual Behavior ASC|Adv. Synth. Catal.|Advanced Synthesis & Catalysis=Advanced Synthesis and Catalysis ASC1|Anxiety Stress Coping=Anxiety Stress Copin.|Anxiety, Stress, and Coping ASC2|Appl. Soft Comput.|Applied Soft Computing ASCP|Addict. Sci. Clin. Pract.|Addiction Science & Clinical Practice ASD|Arthropod Struct. Dev.|Arthropod Structure & Development ASE|Anat. Sci. Educ.|Anatomical Sciences Education ASE1|Automat. Softw. Eng.|Automated Software Engineering ASENS|Ann. Sci. Ecole Norm. Super.|Annales Scientifiques de L Ecole Normale Superieure ASEO|Arch. Soc. Esp. Oftalmol.|Archivos de la Sociedad Española de Oftalmología ASI|Anat. Sci. Int.|Anatomical Science International ASJ|Aesthet. Surg. J.|Aesthetic Surgery Journal ASM|Ann. Saudi Med.|Annals of Saudi Medicine ASNN|ASN Neuro|ASN Neuro ASNSPCS|Ann. Sc. Norm. Super. Pisa Cl. Sci.|Annali Della Scuola Normale Superiore di Pisa-Classe di Scienze ASO|Ann. Surg. Oncol.=Annals Surg. Oncology|Annals of Surgical Oncology ASPTA|Acta Sci. Pol. Technol. Aliment.|Acta Scientiarum Polonorum. Technologia Alimentaria ASR|Am. Sociol. Rev.=Amer. Sociol. Rev.|American Sociological Review ASR1|Appl. Spectrosc. Rev.|Applied Spectroscopy Reviews ASR2|Arch. Suicide Res.|Archives of Suicide Research ASS|Appl. Surf. Sci.|Applied Surface Science ASSN|An. Sist. Sanit. Navar.|Anales Del Sistema Sanitario de Navarra AST|Adsorpt. Sci. Technol.|Adsorption Science & Technology=Adsorption Science and Technology AST1|Aerosol Sci. Technol.=Aerosol Sci. Tech.|Aerosol Science and Technology=Aerosol Science and Technology: The Journal of the American Association for Aerosol Research ASTINB|ASTIN Bull.|ASTIN Bulletin ASUOC|Analele Stiint. Univ. Ovidius C.|Analele Stiintifice Ale Universitatii Ovidius Constanta-Seria Matematica ASWC|Adv. Skin Wound Care|Advances in Skin & Wound Care AT|Acta Trop.|Acta Tropica AT1|Adv. Ther.=Advan. Ther.|Advances in Therapy AT2|Ann. Telecommun.|Annals of Telecommunications AT3|Ann. Transplant.=Ann. Transpl.|Annals of Transplantation AT4|Aquat. Toxicol.|Aquatic Toxicology AT5|Arch. Toxicol.|Archives of Toxicology AT6|Assist. Technol.|Assistive Technology ATCS|Ann. Thorac. Cardiovasc. Surg.=Ann. Thorac. Cardiovas.|Annals of Thoracic and Cardiovascular Surgery ATHM|Altern. Ther. Health Med.=Altern. Ther. Health M.|Alternative Therapies in Health and Medicine ATMP|Adv. Theor. Math. Phys.|Advances in Theoretical and Mathematical Physics ATS|Ann. Thorac. Surg.|Annals of Thoracic Surgery=The Annals of Thoracic Surgery ATSN|Adv. Tech. Stand. Neurosurg.|Advances and Technical Standards in Neurosurgery ATVB|Arterioscler. Thromb. Vasc. Biol.=Arterioscl. Throm. Vas.|Arteriosclerosis, Thrombosis, and Vascular Biology AU|Aktuelle Urol.=Aktuel. Urol.|Aktuelle Urologie AU1|Algebra Univ.|Algebra Universalis AUE|Actas Urol. Esp.|Actas Urologicas Españolas AUS|Aging US|Aging-US AV|Acta Virol.|Acta Virologica AV1|Arch. Virol.|Archives of Virology AVH|Acta Vet. Hung.|Acta Veterinaria Hungarica AVJ|Aust. Vet. J.|Australian Veterinary Journal AVL|Antonie Van Leeuwenhoek|Antonie Van Leeuwenhoek AVR|Adv. Virus Res.=Advan. Virus Res.|Advances in Virus Research AVS|Acta Vet. Scand.|Acta Veterinaria Scandinavica AVS1|Ann. Vasc. Surg.=Ann. Vascular Surg.|Annals of Vascular Surgery AWEH|Ann. Work Expo. Health=Ann. Work Expos. Health|Annals of Work Exposures and Health AWMH|Arch. Womens Ment. Health=Arch. Women Ment. Hlth.|Archives of Women's Mental Health B|3 Biotech|3 Biotech B1|Bernoulli|Bernoulli B2|Bioanalysis|Bioanalysis B3|Biocell=Bio. Cell|Biology of the Cell B4|Biochemistry=Biochemistry USA|Biochemistry B5|Biochimie|Biochimie B6|Biodegradation|Biodegradation B7|Biodrugs|Biodrugs: Clinical Immunotherapeutics, Biopharmaceuticals and Gene Therapy B8|Bioelectrochemistry|Bioelectrochemistry B9|Bioelectromagnetics|Bioelectromagnetics B10|Bioengineered|Bioengineered B11|Bioessays|Bioessays: News and Reviews in Molecular, Cellular and Developmental Biology B12|Bioethics|Bioethics B13|Biofabrication|Biofabrication B14|Biofactors|Biofactors B15|Biofizika|Biofizika B16|Biofouling|Biofouling B17|Biogerontology|Biogerontology B18|Bioinformatics|Bioinformatics B19|Bioinformation|Bioinformation B20|Biointerphases|Biointerphases B21|Biologia|Biologia B22|Biologicals|Biologicals: Journal of the International Association of Biological Standardization B23|Biomacromolecules|Biomacromolecules B24|Biomarkers|Biomarkers: Biochemical Indicators of Exposure, Response, and Susceptibility to Chemicals B25|Biomaterials|Biomaterials B26|Biomatter|Biomatter B27|Biomedica|Biomédica: Revista Del Instituto Nacional de Salud B28|Biometals|Biometals: An International Journal on the Role of Metal Ions in Biology, Biochemistry, and Medicine B29|Biometrics|Biometrics B30|Biometrika|Biometrika B31|Biomicrofluidics|Biomicrofluidics B32|Biomolecules|Biomolecules B33|Biopolymers|Biopolymers B34|Biorheology|Biorheology B35|Bioscience|Bioscience B36|Biostatistics|Biostatistics B37|Biosystems|Bio Systems B38|Biotechniques|Biotechniques B39|Birth|Birth B40|Bit|Bit Numerical Mathematics B41|Blood|Blood B42|Bone|Bone B43|Brachytherapy|Brachytherapy B44|Brain|Brain: A Journal of Neurology B45|Breast|The Breast B46|Burns|Burns: Journal of the International Society for Burn Injuries BA|Bayesian Anal.|Bayesian Analysis BA1|Biol. Aujourdhui|Biologie Aujourd'hui BA2|Biotechnol. Adv.|Biotechnology Advances BA3|Blood Adv.|Blood Advances BAB|Biotechnol. Appl. Biochem.=Biotechnol. Appl. Bioc.|Biotechnology and Applied Biochemistry BABT|Braz. Arch. Biol. Technol.|Brazilian Archives of Biology and Technology BAMS|Bull. Amer. Math. Soc.|Bulletin of the American Mathematical Society BAMS1|Bull. Aust. Math. Soc.|Bulletin of the Australian Mathematical Society BB|Biocatal. Biotransformation=Biocatal. Biotransform.|Biocatalysis and Biotransformation BB1|Bioinspir. Biomim.|Bioinspiration & Biomimetics BB2|Biopreserv. Biobank.|Biopreservation and Biobanking BB3|Biosens. Bioelectron.|Biosensors & Bioelectronics=Biosensors and Bioelectronics BB4|Biotechnol. Bioeng.|Biotechnology and Bioengineering BB5|Biotechnol. Biofuels|Biotechnology for Biofuels BB6|Brain Behav.|Brain and Behavior BB7|Brief. Bioinformatics=Brief. Bioinform.|Briefings in Bioinformatics BBA|Biochim. Biophys. Acta|Biochimica et Biophysica Acta BBAB|BBA Bioenergetics|Biochimica et Biophysica Acta-Bioenergetics BBAB1|BBA Biomembranes|Biochimica et Biophysica Acta-Biomembranes BBAGRM|BBA Gene Regul. Mech.|Biochimica et Biophysica Acta-Gene Regulatory Mechanisms BBAGS|BBA Gen. Subjects|Biochimica et Biophysica Acta-General Subjects BBAMCBL|BBA Mol. Cell Biol. Lipids|Biochimica et Biophysica Acta-Molecular and Cell Biology of Lipids BBAMCR|BBA Mol. Cell Res.|Biochimica et Biophysica Acta-Molecular Cell Research BBAPP|BBA Proteins Proteomics|Biochimica et Biophysica Acta-Proteins and Proteomics BBB|Biofuels Bioprod. Biorefining|Biofuels Bioproducts & Biorefining-Biofpr BBB1|Biosci. Biotechnol. Biochem.=Biosci. Biotech. Bioch.|Bioscience, Biotechnology, and Biochemistry BBE|Bioprocess Biosyst. Eng.=Bioproc. Biosyst. Eng.|Bioprocess and Biosystems Engineering BBE1|Biotechnol. Bioprocess Eng.=Biotechnol. Bioproc. E.|Biotechnology and Bioprocess Engineering BBE2|Biotechnol. Biotechnol. Equip.=Biotechnol. Biotec. Eq.|Biotechnology & Biotechnological Equipment=Biotechnology and Biotechnological Equipment BBE3|Brain Behav. Evol.=Brain Behav. Evolut.|Brain, Behavior and Evolution BBF|Behav. Brain Funct.|Behavioral and Brain Functions BBI|Brain Behav. Immun.|Brain, Behavior, and Immunity BBMS|Bull. Braz. Math. Soc.|Bulletin of the Brazilian Mathematical Society BBMSSS|Bull. Belg. Math. Soc. Simon Stev.|Bulletin of the Belgian Mathematical Society-Simon Stevin BBMT|Biol. Blood Marrow Transplant.=Biol. Blood Marrow Tr.|Biology of Blood and Marrow Transplantation=Biology of Blood and Marrow Transplantation: Journal of the American Society for Blood and Marrow Transplantation BBN|Bioinspired Biomim. Nanobiomat.|Bioinspired Biomimetic and Nanobiomaterials BBR|Behav. Brain Res.|Behavioural Brain Research BBRC|Biochem. Biophys. Res. Commun.=Biochem. Bioph. Res. Co.|Biochemical and Biophysical Research Communications BBS|Behav. Brain Sci.|Behavioral and Brain Sciences=The Behavioral and Brain Sciences BC|Bioconjug. Chem.|Bioconjugate Chemistry BC1|Biol. Chem.|Biological Chemistry BC2|Biol. Conserv.|Biological Conservation BC3|Biol. Cybern.|Biological Cybernetics BC4|Biomed. Chromatogr.|Biomedical Chromatography BC5|Biomol. Concepts|Biomolecular Concepts BC6|Bioorg. Chem.|Bioorganic Chemistry BC7|Biophys. Chem.|Biophysical Chemistry BC8|Brain Cogn.=Brain Cognition|Brain and Cognition BC9|Brain Connect.|Brain Connectivity BC10|Breast Cancer=Breast Cancer Tokyo|Breast Cancer: The Journal of the Japanese Breast Cancer Society BC11|Bull. Cancer=B. Cancer|Bulletin du Cancer BCA|Bioinorg. Chem. Appl.|Bioinorganic Chemistry and Applications BCB|Biochem. Cell Biol.|Biochemistry and Cell Biology=Biochemistry and Cell Biology-Biochimie et Biologie Cellulaire BCC|Bulg. Chem. Commun.|Bulgarian Chemical Communications BCF|Blood Coagul. Fibrinolysis|Blood Coagulation & Fibrinolysis: An International Journal in Haemostasis and Thrombosis BCJ|Blood Cancer J.|Blood Cancer Journal BCMD|Blood Cells Mol. Dis.|Blood Cells, Molecules & Diseases BCP|Behav. Cogn. Psychother.=Behav. Cognitive Psychother.|Behavioural and Cognitive Psychotherapy BCPT|Basic Clin. Pharmacol. Toxicol.=Basic Clin. Pharmacol.|Basic & Clinical Pharmacology & Toxicology BCR|Breast Cancer Res.|Breast Cancer Research BCRT|Breast Cancer Res. Treat.=Breast Cancer Res. Tr.|Breast Cancer Research and Treatment BCSE|Bull. Chem. Soc. Ethiop.=Bull. Chem. Soc. Ethiopia|Bulletin of the Chemical Society of Ethiopia BCSJ|Bull. Chem. Soc. Jpn.=B. Chem. Soc. Jpn.|Bulletin of the Chemical Society of Japan BD|Big Data=Big Data US|Big Data BD1|Biol. Direct|Biology Direct BD2|Bipolar Disord.|Bipolar Disorders BD3|Brain Dev.=Brain Develop.|Brain & Development BD4|Breast Dis.|Breast Disease BDD|Biopharm. Drug Dispos.|Biopharmaceutics & Drug Disposition=Biopharmaceutics and Drug Disposition BDJ|Br. Dent. J.=Brit. Dent. J.|British Dental Journal BDJ1|Braz. Dent. J.|Brazilian Dental Journal BDR|Big Data Res.|Big Data Research BDR1|Birth Defects Res.|Birth Defects Research BE|Biosyst. Eng.|Biosystems Engineering BE1|Build. Environ.=Bldg. Environ.|Building and Environment BEBM|Bull. Exp. Biol. Med.=Bull. Exp. Biol. Med. Engl. Tr.|Bulletin of Experimental Biology and Medicine BEBT|Biomed. Eng. Biomed. Tech.|Biomedical Engineering-Biomedizinische Technik BECT|Bull. Environ. Contam. Toxicol.=B. Environ. Contam. Tox.|Bulletin of Environment Contamination and Toxicology=Bulletin of Environmental Contamination and Toxicology BEJ|Biochem. Eng. J.|Biochemical Engineering Journal BEO|Biomed. Eng. Online|Biomedical Engineering Online BER|Bull. Entomol. Res.=B. Entomol. Res.|Bulletin of Entomological Research BES|Biomed. Environ. Sci.|Biomedical and Environmental Sciences BET|Biochemistry Engl. Tr.|Biochemistry-Moscow BFG|Brief. Funct. Genomics|Briefings in Functional Genomics BG|Behav. Genet.|Behavior Genetics BG1|Biochem. Genet.|Biochemical Genetics BGER|Biotechnol. Genet. Eng. Rev.=Biotechnol. Genet. Eng.|Biotechnology & Genetic Engineering Reviews BGG|Bundesgesundheitsblatt Gesundheitsforschung Gesundheitsschutz=Bundesgesundheitsblatt Gesund.|Bundesgesundheitsblatt, Gesundheitsforschung, Gesundheitsschutz BH|Biotech. Histochem.|Biotechnic & Histochemistry=Biotechnic and Histochemistry BHM|Bull. Hist. Med.=B. Hist. Med.|Bulletin of the History of Medicine BI|Body Image|Body Image BI1|Brain Inj.|Brain Injury BIB|Brain Imaging Behav.|Brain Imaging and Behavior BICA|Biol. Inspired Cogn. Archit.|Biologically Inspired Cognitive Architectures BIMS|Bull. Iran. Math. Soc.|Bulletin of the Iranian Mathematical Society BISE|Bus. Inform. Syst. Eng.|Business & Information Systems Engineering BIT0|Biomed. Instrum. Technol.|Biomedical Instrumentation & Technology BJ|Biochem. J.|Biochemical Journal=The Biochemical Journal BJ1|Biochip J.|Biochip Journal BJ2|Biom. J.=Biometrical J.|Biometrical Journal=Biometrical Journal. Biometrische Zeitschrift BJ3|Biomed. J.|Biomedical Journal BJ4|Biophys. J.|Biophysical Journal BJ5|Biotechnol. J.|Biotechnology Journal BJ6|Breast J.|Breast Journal=The Breast Journal BJA|Br. J. Anaesth.=Brit. J. Anaesth.|British Journal of Anaesthesia BJB|Braz. J. Biol.|Brazilian Journal of Biology BJBMS|Bosn. J. Basic Med. Sci.=Bosnian J. Basic Med. Sci.|Bosnian Journal of Basic Medical Sciences BJBS|Br. J. Biomed. Sci.=Brit. J. Biomed. Sci.|British Journal of Biomedical Science BJC|Br. J. Cancer=Brit. J. Cancer|British Journal of Cancer BJCE|Braz. J. Chem. Eng.|Brazilian Journal of Chemical Engineering BJCN|Br. J. Community Nurs.|British Journal of Community Nursing BJCP|Br. J. Clin. Pharmacol.=Brit. J. Clin. Pharmacol.|British Journal of Clinical Pharmacology BJCP1|Br. J. Clin. Psychol.|The British Journal of Clinical Psychology BJCS|Braz. J. Cardiovasc. Surg.=Braz. J. Cardiova. Surg.|Brazilian Journal of Cardiovascular Surgery BJD|Br. J. Dermatol.|The British Journal of Dermatology BJDP|Br. J. Dev. Psychol.|The British Journal of Developmental Psychology BJEP|Br. J. Educ. Psychol.|The British Journal of Educational Psychology BJGP|Br. J. Gen. Pract.|The British Journal of General Practice: The Journal of the Royal College of General Practitioners BJH|Br. J. Haematol.=Brit. J. Haematol.|British Journal of Haematology BJHP|Br. J. Health Psychol.=Brit. J. Health Psych.|British Journal of Health Psychology BJHS|Br. J. Hist. Sci.=Brit. J. Hist. Sci.|British Journal for the History of Science BJID|Braz. J. Infect. Dis.|Brazilian Journal of Infectious Diseases=The Brazilian Journal of Infectious Diseases BJJ|Bone Joint J.|Bone & Joint Journal=The Bone & Joint Journal BJMA|Banach J. Math. Anal.|Banach Journal of Mathematical Analysis BJMG|Balkan J. Med. Genet.=Balk. J. Med. Genet.|Balkan Journal of Medical Genetics BJMSP|Br. J. Math. Stat. Psychol.|The British Journal of Mathematical and Statistical Psychology BJN|Br. J. Neurosurg.=Brit. J. Neurosurg.|British Journal of Neurosurgery BJN1|Br. J. Nurs.|British Journal of Nursing BJN2|Br. J. Nutr.|The British Journal of Nutrition BJO|Br. J. Ophthalmol.|The British Journal of Ophthalmology BJO1|Braz. J. Otorhinolaryngol.=Braz. J. Otorhinolar.|Brazilian Journal of Otorhinolaryngology BJOC|Beilstein J. Org. Chem.|Beilstein Journal of Organic Chemistry BJOMS|Br. J. Oral Maxillofac. Surg.|The British Journal of Oral & Maxillofacial Surgery BJP|Br. J. Pharmacol.=Brit. J. Pharmacol.|British Jornal of Pharmacology=British Journal of Pharmacology BJP1|Br. J. Psychiatry|The British Journal of Psychiatry: The Journal of Mental Science BJP2|Br. J. Psychol.=Brit. J. Psychol.|British Journal of Psychology BJP3|Braz. J. Phys.|Brazilian Journal of Physics BJPS|Br. J. Psychiatry Suppl.|The British Journal of Psychiatry. Supplement BJPS1|Braz. J. Probab. Stat.|Brazilian Journal of Probability and Statistics BJPT|Braz. J. Phys. Ther.|Brazilian Journal of Physical Therapy BJR|Bone Joint Res.=Bone Jt. Res.|Bone & Joint Research BJR1|Br. J. Radiol.|The British Journal of Radiology BJS|Br. J. Sociol.|The British Journal of Sociology BJS1|Br. J. Surg.|The British Journal of Surgery BJSM|Br. J. Sports Med.=Brit. J. Sport. Med.|British Journal of Sports Medicine BJUI|BJU Int.|BJU International BK|Biomed. Khim.|Biomeditsinskaia Khimiia=Biomedit︠s︡inskai︠a︡ Khimii︠a︡ BK1|Bunseki Kagaku|Bunseki Kagaku BKCS|Bull. Korean Chem. Soc.=B. Korean Chem. Soc.|Bulletin of the Korean Chemical Society BKMS|Bull. Korean Math. Soc.|Bulletin of the Korean Mathematical Society BL|Biol. Lett.=Biology Lett.|Biology Letters BL1|Biotechnol. Lett.|Biotechnology Letters BL2|Brain Lang.|Brain and Language BLL|Bratisl. Lek. Listy|Bratislavské Lekárske Listy BLMS|Bull. Lond. Math. Soc.|Bulletin of the London Mathematical Society BLPI|Bull. Lebedev Phys. Inst.|Bulletin of the Lebedev Physics Institute BLR|Biotechnol. Law Rep.|Biotechnology Law Report BLTJ|Bell Labs Tech. J.|Bell Labs Technical Journal BM|Behav. Med.|Behavioral Medicine BM1|Behav. Modif.|Behavior Modification BM2|Benef. Microbes|Beneficial Microbes BM3|Biochem. Medica|Biochemia Medica BM4|Biochemistry Mosc.|Biochemistry. Biokhimiia=Biochemistry. Biokhimii︠a︡ BM5|Biodata Min.|Biodata Mining BM6|Biol. Membrany|Biologicheskie Membrany BM7|Biomark. Med.|Biomarkers in Medicine BM8|Biomed. Mater.|Biomedical Materials BM9|Biomed. Microdevices|Biomedical Microdevices BM10|Breastfeed. Med.|Breastfeeding Medicine BMB|Br. Med. Bull.=Brit. Med. Bull.|British Medical Bulletin BMB1|Bull. Math. Biol.=B. Math. Biol.|Bulletin of Mathematical Biology BMBE|Biochem. Mol. Biol. Educ.=Biochem. Mol. Biol. Edu.|Biochemistry and Molecular Biology Education BMBR|BMB Rep.|BMB Reports BMC|Bioorg. Med. Chem.=Bioorgan. Med. Chem.|Bioorganic & Medicinal Chemistry=Bioorganic and Medicinal Chemistry BMC1|Bull. Menninger Clin.=B. Menninger Clin.|Bulletin of the Menninger Clinic BMCA|BMC Anesthesiol.|BMC Anesthesiology BMCB|BMC Biochem.|BMC Biochemistry BMCB1|BMC Bioinformatics|Biomed Central Bioinformatics BMCB2|BMC Biol.|BMC Biology BMCB3|BMC Biophys.|BMC Biophysics BMCB4|BMC Biotechnol.|BMC Biotechnology BMCC|BMC Cancer|BMC Cancer BMCCAM|BMC Complement. Altern. Med.=BMC Complem. Altern. M.|BMC Complementary and Alternative Medicine BMCCB|BMC Cell Biol.|BMC Cell Biology BMCCB1|BMC Chem. Biol.|BMC Chemical Biology BMCCD|BMC Cardiovasc. Disord.=BMC Cardiovasc. Disor.|BMC Cardiovascular Disorders BMCD|BMC Dermatol.|BMC Dermatology BMCDB|BMC Dev. Biol.|BMC Developmental Biology BMCE|BMC Ecol.|BMC Ecology BMCEB|BMC Evol. Biol.|BMC Evolutionary Biology BMCED|BMC Endocr. Disord.|BMC Endocrine Disorders BMCEM|BMC Emerg. Med.|BMC Emergency Medicine BMCFP|BMC Fam. Pract.|BMC Family Practice BMCG|BMC Gastroenterol.|BMC Gastroenterology BMCG1|BMC Genet.|BMC Genetics BMCG2|BMC Genomics|BMC Genomics BMCG3|BMC Geriatr.|BMC Geriatrics BMCHSR|BMC Health Serv. Res.|BMC Health Services Research BMCI|BMC Immunol.|BMC Immunology BMCID|BMC Infect. Dis.|BMC Infectious Diseases BMCIHHR|BMC Int. Health Hum. Rights=BMC Int. Health Hum. R.|BMC International Health and Human Rights BMCL|Bioorg. Med. Chem. Lett.=Bioorg. Medicinal Chem. Letter.|Bioorganic & Medicinal Chemistry Letters=Bioorganic and Medicinal Chemistry Letters BMCM|BMC Med.|BMC Medicine BMCM1|BMC Microbiol.|BMC Microbiology BMCMB|BMC Mol. Biol.|BMC Molecular Biology BMCMD|BMC Musculoskelet. Disord.=BMC Musculoskel. Dis.|BMC Musculoskeletal Disorders BMCME|BMC Med. Educ.|BMC Medical Education BMCME1|BMC Med. Ethics|BMC Medical Ethics BMCMG|BMC Med. Genet.|BMC Medical Genetics BMCMG1|BMC Med. Genomics|BMC Medical Genomics BMCMI|BMC Med. Imaging=BMC Med. Imag.|BMC Medical Imaging BMCMIDM|BMC Med. Inform. Decis. Mak.=BMC Med. Inform. Decis.|BMC Medical Informatics and Decision Making BMCMRM|BMC Med. Res. Methodol.|BMC Medical Research Methodology BMCN|BMC Nephrol.|BMC Nephrology BMCN1|BMC Neurol.|BMC Neurology BMCN2|BMC Neurosci.|BMC Neuroscience BMCO|BMC Ophthalmol.|BMC Ophthalmology BMCOH|BMC Oral Health|BMC Oral Health BMCP|BMC Pediatr.|BMC Pediatrics BMCP1|BMC Physiol.|BMC Physiology BMCP2|BMC Proc.|BMC Proceedings BMCP3|BMC Psychiatry|BMC Psychiatry BMCP4|BMC Psychol.|BMC Psychology BMCPB|BMC Plant Biol.|BMC Plant Biology BMCPC|BMC Palliat. Care|BMC Palliative Care BMCPC1|BMC Pregnancy Childbirth=BMC Pregnancy Childb.|BMC Pregnancy and Childbirth BMCPH|BMC Public Health|BMC Public Health BMCPM|BMC Pulm. Med.|BMC Pulmonary Medicine BMCPT|BMC Pharmacol. Toxicol.=BMC Pharmacol. Toxico.|BMC Pharmacology & Toxicology BMCRN|BMC Res. Notes|BMC Research Notes BMCS|BMC Surg.|BMC Surgery BMCSB|BMC Struct. Biol.|BMC Structural Biology BMCSB1|BMC Syst. Biol.|BMC Systems Biology BMCU|BMC Urol.|BMC Urology BMCVR|BMC Vet. Res.|BMC Veterinary Research BMCWH|BMC Womens Health|BMC Women's Health BME|Biomed Mater. Eng.=Bio Med. Mater. Eng.|Bio-Medical Materials and Engineering BMHIM|Bol. Med. Hosp. Infant. Mex.|Boletín Médico Del Hospital Infantil de México BMJ|Balkan Med. J.=Balk. Med. J.|Balkan Medical Journal BMJCR|BMJ Case Rep.|BMJ Case Reports BMJEBM|BMJ Evid. Based Med.|BMJ Evidence-Based Medicine BMJO|BMJ Open|BMJ Open BMJQS|BMJ Qual. Saf.|BMJ Quality & Safety BMJSPC|BMJ Support. Palliat. Care=BMJ Support. Palliat.|BMJ Supportive & Palliative Care BMJSRH|BMJ Sex. Reprod. Health|BMJ Sexual & Reproductive Health BMM|Biomech. Model. Mechanobiol.=Biomech. Model. Mechan.|Biomechanics and Modeling in Mechanobiology BMMSS|B. Malays. Math. Sci. Soc.|Bulletin of the Malaysian Mathematical Sciences Society BMS|Bull. Math. Sci.=B. Math. Sci.|Bulletin of Mathematical Sciences BMSSMR|Bull. Math. Soc. Sci. Math. Roum.|Bulletin Mathematique de la Societe des Sciences Mathematiques de Roumanie BMT|Bone Marrow Transplant.=Bone Marrow Transpl.|Bone Marrow Transplantation BN|Behav. Neurol.|Behavioural Neurology BN1|Behav. Neurosci.|Behavioral Neuroscience BNMRA|Biomol. NMR Assign.|Biomolecular NMR Assignments BO|Biol. Open|Biology Open BOEXPRESS|Biomed. Opt. EXPRESS|Biomedical Optics EXPRESS BOR|Braz. Oral Res.|Brazilian Oral Research BP|Behav. Pharmacol.|Behavioural Pharmacology BP1|Behav. Processes=Behav. Process.|Behavioural Processes BP2|Biochem. Pharmacol.|Biochemical Pharmacology BP3|Biol. Psychiatry=Biol. Psychiat.|Biological Psychiatry BP4|Biol. Psychol.|Biological Psychology BP5|Biotechnol. Prog.=Biotechnol. Progr.|Biotechnology Progress BP6|Blood Press.|Blood Pressure BP7|Blood Purif.=Blood Purificat.|Blood Purification BP8|Brain Pathol.|Brain Pathology BPB|Biol. Pharm. Bull.|Biological & Pharmaceutical Bulletin=Biological and Pharmaceutical Bulletin BPCNN|Biol. Psychiatry Cogn. Neurosci. Neuroimaging|Biological Psychiatry: Cognitive Neuroscience and Neuroimaging BPM|Blood Press. Monit.|Blood Pressure Monitoring BPMFUPOCR|Biomed. Pap. Med. Fac. Univ. Palacky Olomouc Czech. Repub.|Biomedical Papers of the Medical Faculty of the University Palacký, Olomouc, Czechoslovakia BPO|Biol. Proced. Online|Biological Procedures Online BPRCA|Best Pract. Res. Clin. Anaesthesiol.|Best Practice & Research. Clinical Anaesthesiology BPRCEM|Best Pract. Res. Clin. Endocrinol. Metab.=Best Pract. Res. Clin. Endoc. Met.|Best Practice & Research. Clinical Endocrinology & Metabolism BPRCG|Best Pract. Res. Clin. Gastroenterol.=Best Pract. Res. Clin. Gastroent.|Best Practice & Research. Clinical Gastroenterology BPRCH|Best Pract. Res. Clin. Haematol.=Best Pract. Res. Cl. Ha.|Best Practice & Research. Clinical Haematology BPRCOG|Best Pract. Res. Clin. Obstet. Gynaecol.=Best Pract. Res. Clin. Obstet. Gy.|Best Practice & Research. Clinical Obstetrics & Gynaecology BPRCR|Best Pract. Res. Clin. Rheumatol.=Best Pract. Res. Cl. Rh.|Best Practice & Research. Clinical Rheumatology=Best Practice & Research in Clinical Rheumatology BPS|Br. Poult. Sci.=Brit. Poultry Sci.|British Poultry Science BR|Biol. Reprod.|Biology of Reproduction BR1|Biol. Res.|Biological Research BR2|Biol. Rev.|Biological Reviews BR3|Biomed. Res.=Biomed. Res. Tokyo|Biomedical Research=Biomedical Research-Tokyo BR4|Biosci. Rep.=Bioscience Rep.|Bioscience Reports BR5|Blood Rev.|Blood Reviews BR6|Bone Res.|Bone Research BR7|Brain Res.|Brain Research BRB|Brain Res. Bull.|Brain Research Bulletin BRC|Basic Res. Cardiol.|Basic Research in Cardiology BRCPS|Biol. Rev. Camb. Philos. Soc.|Biological Reviews of the Cambridge Philosophical Society BRI|Biomed Res. Int.|Biomed Research International BRM|Behav. Res. Methods|Behavior Research Methods BRN|Biol. Res. Nurs.|Biological Research for Nursing BRR|Biol. Rhythm Res.|Biological Rhythm Research BRT|Behav. Res. Ther.|Behaviour Research and Therapy BS|Biocontrol Sci.|Biocontrol Science BS1|Biomater. Sci.=Biomater. Sci. UK|Biomaterials Science BS2|Brain Stimul.|Brain Stimulation BSD|Biol. Sex Differ.|Biology of Sex Differences BSE|Biochem. Syst. Ecol.|Biochemical Systematics and Ecology BSF|Brain Struct. Funct.|Brain Structure & Function BSL|Behav. Sci. Law|Behavioral Sciences & the Law BSL1|Bull. Symb. Log.|Bulletin of Symbolic Logic BSM|Behav. Sleep Med.|Behavioral Sleep Medicine BSM1|Bull. Sci. Math.|Bulletin des Sciences Mathematiques BSMF|Bull. Soc. Math. Fr.|Bulletin de la Societe Mathematique de France BSPE|Bull. Soc. Pathol. Exot.|Bulletin de la Société de Pathologie Exotique BSS|Biochem. Soc. Symp.|Biochemical Society Symposia=Biochemical Society Symposium BSSM|Boll. Stor. Sci. Mat.|Bollettino di Storia Delle Scienze Matematiche BST|Biochem. Soc. Trans.=Biochem. Soc. T.|Biochemical Society Transactions BST1|Biocontrol Sci. Technol.|Biocontrol Science and Technology BT|Behav. Ther.|Behavior Therapy BT1|Bioresour. Technol.=Bioresource Technol.|Bioresource Technology BT2|Biosci. Trends|Bioscience Trends BT3|Brain Topogr.|Brain Topography BTDC|Bull. Tokyo Dent. Coll.|The Bulletin of Tokyo Dental College BTER|Biol. Trace Elem. Res.=Biol. Tr. Elem. Res.|Biological Trace Element Research BTP|Brain Tumor Pathol.|Brain Tumor Pathology BUK|Biofuels UK|Biofuels-UK BVP|Bound. Value Probl.|Boundary Value Problems BW|Ber. Wiss.=Ber. Wissgesch|Berichte Zur Wissenschaftsgeschichte BWHO|Bull. World Health Organ.=B. World Health Organ.|Bulletin of the World Health Organization C|Calcolo|Calcolo C1|Cancer=Cancer Am. Cancer Soc.|Cancer C2|Carcinogenesis|Carcinogenesis C3|Cardiology|Cardiology C4|Cartilage|Cartilage C5|Caryologia|Caryologia C6|Catalysts|Catalysts C7|Cell|Cell C8|Cells=Cells Basel|Cells C9|Cephalalgia|Cephalalgia: An International Journal of Headache C10|Cerebellum|The Cerebellum C11|Channels|Channels C12|Chaos|Chaos C13|Chem=Chem US|Chem C14|Chembiochem|Chembiochem: A European Journal of Chemical Biology C15|Chemcatchem|Chemcatchem C16|Chemelectrochem|Chemelectrochem C17|Chemija|Chemija C18|Chemistry=Chem. Eur. J.|Chemistry: A European Journal C19|Chemistryopen|Chemistryopen C20|Chemistryselect|Chemistryselect C21|Chemmedchem|Chemmedchem C22|Chemosphere|Chemosphere C23|Chemotherapy|Chemotherapy C24|Chemphyschem|Chemphyschem: A European Journal of Chemical Physics and Physical Chemistry C25|Chempluschem|Chempluschem C26|Chemsuschem|Chemsuschem C27|Chest|Chest C28|Chimia|Chimia C29|Chirality|Chirality C30|Chirurg|Der Chirurg: Zeitschrift für Alle Gebiete Der Operativen Medizen C31|Chromatographia|Chromatographia C32|Chromosoma|Chromosoma C33|Circulation|Circulation C34|Climacteric|Climacteric: The Journal of the International Menopause Society C35|Codas|Codas C36|Cognition|Cognition C37|Combinatorica|Combinatorica C38|Complexity|Complexity C39|Computer|Computer C40|Computing|Computing C41|Constraints|Constraints: An International Journal C42|Contraception|Contraception C43|Cornea|Cornea C44|Cortex|Cortex: A Journal Devoted to the Study of the Nervous System and Behavior C45|Cranio=Cranio J. Craniomandib. Pract.|Cranio: The Journal of Craniomandibular Practice C46|Crisis|Crisis: The Journal of Crisis Intervention and Suicide Prevention C47|Cryobiology|Cryobiology C48|Cryogenics|Cryogenics C49|Cryptologia|Cryptologia C50|Curationis|Curationis C51|Cutis|Cutis C52|Cytokine|Cytokine C53|Cytopathology|Cytopathology C54|Cytoskeleton|Cytoskeleton C55|Cytotechnology|Cytotechnology C56|Cytotherapy|Cytotherapy CA|Clin. Anat.=Clin. Anatom.|Clinical Anatomy CA1|Commun. Algebra|Communications in Algebra CA2|Constr. Approx.|Constructive Approximation CAAR|Curr. Allergy Asthma Rep.=Curr. Allergy Asthm. R.|Current Allergy and Asthma Reports CABN|Cogn. Affect. Behav. Neurosci.=Cogn. Affect. Behav. Ne.|Cognitive, Affective & Behavioral Neuroscience CAC|Curr. Anal. Chem.|Current Analytical Chemistry CACJC|CA Cancer J. Clin.=CA A Cancer J. Clin.|CA: A Cancer Journal for Clinicians CACM|Commun. ACM|Communications of the ACM CAD|Comput. Aided Des.=Comput. Aided Design|Computer Aided Design CAD1|Coron. Artery Dis.=Coronary Artery Dis.|Coronary Artery Disease CAE|Circ. Arrhythm. Electrophysiol.=Circ. Arrhythmia Electrophysio.|Circulation. Arrhythmia and Electrophysiology CAEE|Comput. Appl. Eng. Educ.|Computer Applications in Engineering Education CAG|Commun. Anal. Geom.|Communications in Analysis and Geometry CAGD|Comput. Aided Geom. Des.=Comput. Aided Geom. Design|Computer Aided Geometric Design CAHO|Clin. Adv. Hematol. Oncol.|Clinical Advances in Hematology & Oncology CAJ|Chem. Asian J.|Chemistry, an Asian Journal CAM|Cell Adh. Migr.=Cell Adhes. Migr.|Cell Adhesion & Migration CAM1|Comput. Appl. Math.|Computational & Applied Mathematics CAMCS|Comm. App. Math. Comp. Sci.=Commun. Appl. Math. Comput. Sci.|Communications in Applied Mathematics and Computational Science CAMSB|Chin. Ann. Math. Ser. B|Chinese Annals of Mathematics Series B CAN|Child Abuse Negl.=Child Abuse Neglect|Child Abuse & Neglect CAOT|Complex Anal. Oper. Theory|Complex Analysis and Operator Theory CAP|Curr. Appl. Phys.|Current Applied Physics CAPCNA|Child Adolesc. Psychiatr. Clin. N. Am.=Child Adolesc. Psychiatr. Clin.|Child and Adolescent Psychiatric Clinics of North America CAR|Clin. Auton. Res.|Clinical Autonomic Research CAR1|Curr. Alzheimer Res.|Current Alzheimer Research CAR2|Curr. Atheroscler. Rep.=Curr. Atheroscleros. Rep.|Current Atherosclerosis Reports CAS|Curr. Aging Sci.|Current Aging Science CAVW|Comput. Animat. Virtual Worlds=Comput. Animat. Virt. W.|Computer Animation and Virtual Worlds CB|Cancer Biomark.|Cancer Biomarkers CB1|Cell Biosci.|Cell & Bioscience=Cell and Bioscience CB2|Chem. Biodivers.|Chemistry & Biodiversity CB3|Chem. Biol.|Chemistry & Biology CB4|Clin. Biochem.|Clinical Biochemistry CB5|Conserv. Biol.|Conservation Biology=Conservation Biology: The Journal of the Society for Conservation Biology CB6|Cuad. Bioet.|Cuadernos de Bioética CB7|Curr. Bioinform.|Current Bioinformatics CB8|Curr. Biol.|Current Biology CBB|Cell Biochem. Biophys.|Cell Biochemistry and Biophysics CBC|Clin. Breast Cancer|Clinical Breast Cancer CBC1|Comput. Biol. Chem.|Computational Biology and Chemistry CBCC|Cytometry B Clin. Cytom.=Cytometry Part B Clin. Cytom.|Cytometry Part B: Clinical Cytometry CBDD|Chem. Biol. Drug Des.|Chemical Biology & Drug Design CBELSE|CBE Life Sci. Educ.|CBE Life Sciences Education CBEQ|Chem. Biochem. Eng. Q.=Chem. Biochem. Eng. Quart.|Chemical and Biochemical Engineering Quarterly CBF|Cell Biochem. Funct.|Cell Biochemistry and Function CBI|Cell Biol. Int.|Cell Biology International CBI1|Chem. Biol. Interact.=Chem. Biol. Inter.|Chemico-Biological Interactions CBM|Comput. Biol. Med.|Computers in Biology and Medicine CBMH|Crim. Behav. Ment. Health=Crim. Behav. Ment. Heal.|Criminal Behaviour and Mental Health CBN|Cogn. Behav. Neurol.|Cognitive and Behavioral Neurology CBPBBMB|Comp. Biochem. Physiol. B Biochem. Mol. Biol.|Comparative Biochemistry and Physiology B: Biochemistry and Molecular Biology=Comparative Biochemistry and Physiology Part B: Biochemistry & Molecular Biology CBPCTP|Comp. Biochem. Physiol. C. Toxicol. Pharmacol.|Comparative Biochemistry and Physiology. Toxicology & Pharmacology CBPPA|Comp. Biochem. Physiol. Pt. A|Comparative Biochemistry and Physiology A-Molecular & Integrative Physiology CBPPAMIP|Comp. Biochem. Physiol. Part A Mol. Integr. Physiol.|Comparative Biochemistry and Physiology Part A: Molecular & Integrative Physiology CBPPB|Comp. Biochem. Physiol. Pt. B|Comparative Biochemistry and Physiology B-Biochemistry & Molecular Biology CBPPC|Comp. Biochem. Physiol. Pt. C|Comparative Biochemistry and Physiology C-Toxicology & Pharmacology CBPPD|Comp. Biochem. Physiol. Pt. D|Comparative Biochemistry and Physiology D-Genomics & Proteomics CBPPDGP|Comp. Biochem. Physiol. Part D Genomics Proteomics|Comparative Biochemistry and Physiology Part D: Genomics & Proteomics CBR|Cancer Biother. Radiopharm.=Cancer Biother. Radio.|Cancer Biotherapy & Radiopharmaceuticals=Cancer Biotherapy and Radiopharmaceuticals CBT|Cancer Biol. Ther.|Cancer Biology & Therapy CBT1|Cell Biol. Toxicol.|Cell Biology and Toxicology CBT2|Cogn. Behav. Ther.=Cogn. Behav. Therapy|Cognitive Behaviour Therapy CC|Cancer Cell|Cancer Cell CC1|Cancer Control|Cancer Control: Journal of the Moffitt Cancer Center CC2|Cancer Cytopathol.|Cancer Cytopathology CC3|Cardiol. Clin.|Cardiology Clinics CC4|Catal. Commun.|Catalysis Communications CC5|Cell Calcium|Cell Calcium CC6|Cell Cycle|Cell Cycle CC7|Cereal Chem.|Cereal Chemistry=Cereal Chemistry Journal CC8|Cereb. Cortex|Cerebral Cortex CC9|Chem. Commun.|Chemical Communications CC10|China Commun.|China Communications CC11|Cir. Cir.|Cirugía y Cirujanos CC12|Clin. Calcium|Clinical Calcium CC13|Clin. Cardiol.|Clinical Cardiology CC14|Clin. Chem.|Clinical Chemistry CC15|Cluster Comput.|Cluster Computing=Cluster Computing: The Journal of Networks Software Tools and Applications CC16|Cognit. Comput.=Cogn. Comput.|Cognitive Computation CC17|Comp. Cytogenet.|Comparative Cytogenetics CC18|Comput. Chem.=Comput. Chem. Oxford|Computers & Chemistry=Computers and Chemistry CC19|Comput. Commun.|Computer Communications CC20|Comput. Complexity|Computational Complexity CC21|Comput. Concrete|Computers and Concrete CC22|Concurr. Comput.=Concurr. Comput. Pract. Exp.|Concurrency and Computation: Practice & Experience=Concurrency and Computation: Practice and Experience CC23|Conscious. Cogn.|Consciousness and Cognition CC24|Crit. Care|Critical Care CC25|Cryptogr. Commun.|Cryptography and Communications: Discrete Structures, Boolean Functions and Sequences CCA|Cell Commun. Adhes.|Cell Communication & Adhesion=Cell Communication and Adhesion CCA1|Clin. Chim. Acta|Clinica Chimica Acta=Clinica Chimica Acta: International Journal of Clinical Chemistry CCA2|Croat. Chem. Acta|Croatica Chemica Acta=Croatica Chemica Acta. Arhiv Za Kemiju CCADD|Curr. Comput. Aided Drug Des.=Curr. Comput. Aid. Drug|Current Computer-Aided Drug Design CCAN|Compr. Child Adolesc. Nurs.|Comprehensive Child and Adolescent Nursing CCB|Cell Chem. Biol.|Cell Chemical Biology CCC|Cancer Causes Control=Cancer Cause. Control|Cancer Causes & Control CCC1|Clin. Colorectal Cancer=Clin. Colorectal Canc.|Clinical Colorectal Cancer CCC2|Crit. Care Clin.|Critical Care Clinics CCCC|Collect. Czech. Chem. Commun.|Collection of Czechoslovak Chemical Communications CCDT|Curr. Cancer Drug Targets=Curr. Cancer Drug Tar.|Current Cancer Drug Targets CCE|Comput. Chem. Eng.|Computers & Chemical Engineering=Computers and Chemical Engineering CCED|Compend. Contin. Educ. Dent.|Compendium of Continuing Education in Dentistry=The Compendium of Continuing Education in Dentistry CCFPR|Clin. Child Fam. Psychol. Rev.=Clin. Child Fam. Psych.|Clinical Child and Family Psychology Review CCG|Circ. Cardiovasc. Genet.=Circ. Cardiovasc. Gene.|Circulation. Cardiovascular Genetics CCHD|Child Care Health Dev.=Child Care Health Develop.|Child: Care, Health and Development CCHTS|Comb. Chem. High Throughput Screen.=Comb. Chem. High Throughput Scr.|Combinatorial Chemistry & High Throughput Screening CCI|Cancer Cell Int.|Cancer Cell International CCI1|Catheter. Cardiovasc. Interv.=Catheter. Cardio. Inte.|Catheterization and Cardiovascular Interventions CCI2|Circ. Cardiovasc. Imaging=Circ. Cardiovasc. Imag.|Circulation. Cardiovascular Imaging CCI3|Circ. Cardiovasc. Interv.=Circ. Cardiovasc. Inte.|Circulation. Cardiovascular Interventions CCJ|Chem. Cent. J.|Chemistry Central Journal CCJM|Cleve. Clin. J. Med.=Cleveland Clin. J. Med.|Cleveland Clinic Journal of Medicine CCL|Chinese Chem. Lett.|Chinese Chemical Letters CCLM|Clin. Chem. Lab. Med.|Clinical Chemistry and Laboratory Medicine CCM|Clin. Chest Med.|Clinics in Chest Medicine CCM1|Commun. Contemp. Math.|Communications in Contemporary Mathematics CCM2|Crit. Care Med.|Critical Care Medicine CCMC|Cmc Comput. Mater. Contin.|Cmc-Computers Materials & Continua CCMES|Cmes Comput. Model. Eng. Sci.|Cmes-Computer Modeling in Engineering & Sciences CCN|Crit. Care Nurse|Critical Care Nurse CCNCNA|Crit. Care Nurs. Clin. North Am.=Crit. Care Nurs. Clin. N. Am.|Critical Care Nursing Clinics of North America CCNQ|Crit. Care Nurs. Q.|Critical Care Nursing Quarterly CCO|Chin. Clin. Oncol.|Chinese Clinical Oncology CCP|Cancer Chemother. Pharmacol.=Cancer Chemoth. Pharm.|Cancer Chemotherapy and Pharmacology CCP1|Commun. Comput. Phys.|Communications in Computational Physics CCP2|Curr. Clin. Pharmacol.|Current Clinical Pharmacology CCPP|Clin. Child Psychol. Psychiatry=Clin. Child Psychol. P.|Clinical Child Psychology and Psychiatry CCQO|Circ. Cardiovasc. Qual. Outcomes=Circ. Cardiovasc. Qual.|Circulation. Cardiovascular Quality and Outcomes CCR|Clin. Cancer Res.|Clinical Cancer Research CCR1|Coord. Chem. Rev.=Coordin. Chem. Rev.|Coordination Chemistry Reviews CCR2|Curr. Cardiol. Rep.|Current Cardiology Reports CCR3|Curr. Cardiol. Rev.|Current Cardiology Reviews CCS|Cell Commun. Signal.|Cell Communication and Signaling CCT|Contemp. Clin. Trials|Contemporary Clinical Trials CCT1|Control. Clin. Trials|Controlled Clinical Trials CD|Cancer Discov.|Cancer Discovery CD1|Cardiovasc. Diabetol.|Cardiovascular Diabetology CD2|Cell Discov.|Cell Discovery CD3|Cell Div.|Cell Division CD4|Cerebrovasc. Dis.|Cerebrovascular Diseases CD5|Child Dev.=Child Develop.|Child Development CD6|Clin. Dermatol.|Clinics in Dermatology CD7|Clin. Dysmorphol.|Clinical Dysmorphology CD8|Colorectal Dis.|Colorectal Disease CD9|Contact Derm.|Contact Dermatitis CDAR|Curr. Drug Abuse Rev.|Current Drug Abuse Reviews CDD|Cell Death Differ.=Cell Death Differentiation|Cell Death and Differentiation CDD1|Cell Death Dis.|Cell Death & Disease CDD2|Curr. Drug Deliv.|Current Drug Delivery CDDT|Curr. Drug Discov. Technol.|Current Drug Discovery Technologies CDE|Cerebrovasc. Dis. Extra|Cerebrovascular Diseases Extra CDEMP|Cultur. Divers. Ethnic Minor. Psychol.=Cult. Divers. Ethn. Minor. Psycho.|Cultural Diversity & Ethnic Minority Psychology CDH|Community Dent. Health=Community Dent. Hlth.|Community Dental Health CDI|Clin. Drug Investig.=Clin. Drug Invest.|Clinical Drug Investigation CDIQR|Commun. Dis. Intell. Q. Rep.|Communicable Diseases Intelligence Quarterly Report CDM|Contrib. Discret. Math.|Contributions to Discrete Mathematics CDM1|Curr. Drug Metab.|Current Drug Metabolism CDOE|Community Dent. Oral Epidemiol.=Community Dent. Oral|Community Dentistry and Oral Epidemiology CDR|Curr. Diab. Rep.=Curr. Diabetes Rep.|Current Diabetes Reports CDR1|Curr. Diabetes Rev.|Current Diabetes Reviews CDS|Curr. Drug Saf.|Current Drug Safety CDSR|Cochrane Database Syst. Rev.=Cochrane Db Syst. Rev.|Cochrane Database of Systematic Reviews=The Cochrane Database of Systematic Reviews CDT|Cardiovasc. Drugs Ther.=Cardiovasc. Drug. Therapy|Cardiovascular Drugs and Therapy CDT1|Curr. Drug Targets|Current Drug Targets CE|Cancer Epidemiol.|Cancer Epidemiology CE1|Cir. Esp.=Cir. Espan.|Cirugía Española CE2|Clin. Epigenetics|Clinical Epigenetics CE3|Cogn. Emot.=Cognition Emotion|Cognition & Emotion CE4|Comput. Educ.|Computers & Education CEA|Clin. Exp. Allergy=Clin. Experiment. Allergy|Clinical and Experimental Allergy=Clinical and Experimental Allergy: Journal of the British Society for Allergy and Clinical Immunology CEA1|Comput. Electron. Agric.=Comput. Electron. Agr.|Computers and Electronics in Agriculture CEBP|Cancer Epidemiol. Biomarkers Prev.=Cancer Epidem. Biomarker. Prev.|Cancer Epidemiology, Biomarkers & Prevention CEC|Card. Electrophysiol. Clin.|Cardiac Electrophysiology Clinics CEC1|Chem. Eng. Commun.|Chemical Engineering Communications CEC2|CrystEngComm|CrystEngComm CED|Clin. Exp. Dermatol.|Clinical and Experimental Dermatology CEE|Comput. Electr. Eng.=Comput. Elect. Eng.|Computers & Electrical Engineering=Computers & Electrical Engineering: An International Journal CEEGN|Clin. EEG Neurosci.|Clinical EEG and Neuroscience CEH|Clin. Exp. Hypertens.=Clin. Exp. Hypertension|Clinical and Experimental Hypertension CEHR|Curr. Environ. Health Rep.|Current Environmental Health Reports CEI|Clin. Exp. Immunol.|Clinical and Experimental Immunology CEJEM|Cent. Eur. J. Energ. Mater.|Central European Journal of Energetic Materials CEM|Clin. Exp. Med.|Clinical and Experimental Medicine CEM1|Clin. Exp. Metastasis=Clin. Exp. Metastas.|Clinical & Experimental Metastasis CEN|Chem. Eng. News|Chemical & Engineering News=Chemical and Engineering News CEN1|Clin. Exp. Nephrol.|Clinical and Experimental Nephrology CENCR|CEN Case Rep.|CEN Case Reports CENY|Chem. Eng. New York|Chemical Engineering CEO|Clin. Exp. Optom.|Clinical & Experimental Optometry=Clinical and Experimental Optometry CEO1|Clin. Experiment. Ophthalmol.|Clinical & Experimental Ophthalmology CEP|Chem. Eng. Prog.=Chem. Eng. Progr.|Chemical Engineering Progress CEP1|Control Eng. Pract.=Control Eng. Practice|Control Engineering Practice CEPP|Clin. Exp. Pharmacol. Physiol.=Clin. Exp. Pharmacol. P.|Clinical and Experimental Pharmacology & Physiology=Clinical and Experimental Pharmacology and Physiology CER|Clin. Exp. Rheumatol.|Clinical and Experimental Rheumatology CER1|Curr. Eye Res.|Current Eye Research CES|Chem. Eng. Sci.|Chemical Engineering Science CET|Cardiovasc. Eng. Technol.=Cardiovasc. Eng. Techn.|Cardiovascular Engineering and Technology CET1|Chem. Eng. Technol.|Chemical Engineering & Technology=Chemical Engineering and Technology CF|Comput. Fluids|Computers & Fluids CFP|Can. Fam. Physician=Can. Fam. Phys.|Canadian Family Physician=Canadian Family Physician Médecin de Famille Canadien CG|Cancer Genet.=Cancer Genet. NY|Cancer Genetics CG1|Clin. Genet.|Clinical Genetics CG2|Clin. Gerontol.=Clin. Gerontologist|Clinical Gerontologist CG3|Comput. Geosci.=Comput. Geosci. UK|Computers & Geosciences CG4|Comput. Geotech.|Computers and Geotechnics CG5|Computat. Geosci.|Computational Geosciences CG6|Curr. Genet.=Curr. Genetics|Current Genetics CG7|Curr. Genomics|Current Genomics CG8|Cytol. Genet.|Cytology and Genetics CGC|Clin. Genitourin. Cancer=Clin. Genitourin. Canc.|Clinical Genitourinary Cancer CGD|Cryst. Growth Des.|Crystal Growth & Design=Crystal Growth and Design CGF|Comput. Graph. Forum=Computer Graphics Forum|Computer Graphics Forum: Journal of the European Association for Computer Graphics CGFR|Cytokine Growth Factor Rev.=Cytokine Growth F. R.|Cytokine & Growth Factor Reviews CGH|Clin. Gastroenterol. Hepatol.=Clin. Gastroenterol. H.|Clinical Gastroenterology and Hepatology CGM|Clin. Geriatr. Med.|Clinics in Geriatric Medicine CGP|Cancer Genomics Proteomics=Cancer Genom. Proteom.|Cancer Genomics & Proteomics CGPM|Circ. Genom. Precis. Med.|Circulation. Genomic and Precision Medicine CGR|Curr. Gastroenterol. Rep.|Current Gastroenterology Reports CGR1|Cytogenet. Genome Res.|Cytogenetic and Genome Research CGT|Cancer Gene Ther.|Cancer Gene Therapy CGT1|Curr. Gene Ther.|Current Gene Therapy CGUK|Comput. Graph. UK|Computers & Graphics-UK CHAMC|Cardiovasc. Hematol. Agents Med. Chem.|Cardiovascular & Hematological Agents in Medicinal Chemistry CHD|Congenit. Heart Dis.|Congenital Heart Disease CHDDT|Cardiovasc. Hematol. Disord. Drug Targets|Cardiovascular & Hematological Disorders Drug Targets CHF|Circ. Heart Fail.|Circulation. Heart Failure CHFR|Curr. Heart Fail. Rep.|Current Heart Failure Reports CHIVR|Curr. HIV Res.|Current HIV Research CHM|Cell Host Microbe|Cell Host & Microbe CHM1|Clin. Hemorheol. Microcirc.=Clin. Hemorheol. Micro.|Clinical Hemorheology and Microcirculation CHMR|Curr. Hematol. Malig. Rep.=Curr. Hematol. Malig. R.|Current Hematologic Malignancy Reports CHR|Curr. Hypertens. Rep.|Current Hypertension Reports CHR1|Curr. Hypertens. Rev.|Current Hypertension Reviews CHS|Cult. Health Sex.|Culture, Health & Sexuality CI|Cancer Imaging|Cancer Imaging CI1|Cancer Invest.|Cancer Investigation CI2|Cell. Immunol.|Cellular Immunology CI3|Chem. Ind.=Chem. Ind. London|Chemistry & Industry=Chemistry and Industry CI4|Chronic Illn.|Chronic Illness CI5|Chronobiol. Int.|Chronobiology International CI6|Clin. Imaging=Clin. Imag.|Clinical Imaging CI7|Clin. Immunol.|Clinical Immunology CI8|Comput. Ind.|Computers in Industry CI9|Comput. Inform.|Computing and Informatics CI10|Comput. Intell.=Comput. Intell. US|Computational Intelligence CI11|Curriculum Inq.|Curriculum Inquiry CIA|Chem. Immunol. Allergy|Chemical Immunology and Allergy CIA1|Clin. Interv. Aging|Clinical Interventions in Aging CIA2|Clin. Investig. Arterioscler.|Clínica e Investigación en Arteriosclerosis CICEQ|Chem. Ind. Chem. Eng. Q.|Chemical Industry & Chemical Engineering Quarterly CID|Clin. Infect. Dis.|Clinical Infectious Diseases CIDRR|Clin. Implant Dent. Relat. Res.=Clin. Implant Dent. R.|Clinical Implant Dentistry and Related Research CIE|Comput. Ind. Eng.|Computers & Industrial Engineering CII|Cancer Immunol. Immunother.=Cancer Immunol. Immun.|Cancer Immunology, Immunotherapy CII1|Cochlear Implants Int.|Cochlear Implants International CILS|Chemometr. Intell. Lab. Syst.=Chemom. Intell. Lab. Syst.|Chemometrics and Intelligent Laboratory Systems=Chemometrics and Intelligent Laboratory Systems: An International Journal Sponsored By the Chemometrics Society CIM|Clin. Invest. Med.|Clinical and Investigative Medicine=Clinical and Investigative Medicine. Médecine Clinique et Experimentale CIMB|Curr. Issues Mol. Biol.|Current Issues in Molecular Biology CIMID|Comp. Immunol. Microbiol. Infect. Dis.=Comp. Immunol. Microbiol. Infect.|Comparative Immunology, Microbiology and Infectious Diseases CIN|Comput. Inform. Nurs.|Computers, Informatics, Nursing CIN1|Comput. Intell. Neurosci.=Comput. Intel. Neurosc.|Computational Intelligence and Neuroscience CIR|Cancer Immunol. Res.|Cancer Immunology Research CIR1|Cardiovasc. Intervent. Radiol.=Cardiovasc. Interven. Radiol.|Cardiovascular and Interventional Radiology CISC|Colloid Interface Sci. Commun.|Colloid and Interface Science Communications CIT|Cardiovasc. Interv. Ther.|Cardiovascular Intervention and Therapeutics CIT1|Chem. Ing. Tech.|Chemie Ingenieur Technik CJ|Cancer J.|Cancer Journal=The Cancer Journal CJ1|Cardiol. J.|Cardiology Journal CJ2|Cell J.|Cell Journal CJ3|Circ. J.|Circulation Journal CJ4|Comput. J.|Computer Journal=The Computer Journal CJA|Cardiovasc. J. Afr.|Cardiovascular Journal of Africa CJAC|Chinese J. Anal. Chem.|Chinese Journal of Analytical Chemistry CJAS|Czech J. Anim. Sci.|Czech Journal of Animal Science CJASN|Clin. J. Am. Soc. Nephrol.=Clin. J. Am. Soc. Nephro.|Clinical Journal of the American Society of Nephrology CJC|Can. J. Cardiol.|Canadian Journal of Cardiology=The Canadian Journal of Cardiology CJC1|Can. J. Chem.|Canadian Journal of Chemistry CJC2|Chinese J. Catal.|Chinese Journal of Catalysis CJC3|Chinese J. Chem.|Chinese Journal of Chemistry CJCE|Can. J. Chem. Eng.|Canadian Journal of Chemical Engineering=The Canadian Journal of Chemical Engineering CJCE1|Chinese J. Chem. Eng.|Chinese Journal of Chemical Engineering CJCP|Chinese J. Chem. Phys.|Chinese Journal of Chemical Physics CJCUC|Chem. J. Chinese Univ. Chinese|Chemical Journal of Chinese Universities-Chinese CJD|Can. J. Diabetes|Canadian Journal of Diabetes CJDPR|Can. J. Diet. Pract. Res.|Canadian Journal of Dietetic Practice and Research CJDR|Chin. J. Dent. Res.|The Chinese Journal of Dental Research CJET|Colloid J. Engl. Tr.|Colloid Journal CJFS|Czech J. Food Sci.|Czech Journal of Food Sciences CJG|Clin. J. Gastroenterol.|Clinical Journal of Gastroenterology CJGH|Can. J. Gastroenterol. Hepatol.=Can. J. Gastroenterol.|Canadian Journal of Gastroenterology & Hepatology=Canadian Journal of Gastroenterology and Hepatology CJIC|Chinese J. Inorg. Chem.|Chinese Journal of Inorganic Chemistry CJIM|Chin. J. Integr. Med.|Chinese Journal of Integrative Medicine CJM|Can. J. Math.|Canadian Journal of Mathematics: Journal Canadien de Mathematiques CJM1|Can. J. Microbiol.|Canadian Journal of Microbiology CJM2|Carpathian J. Math.|Carpathian Journal of Mathematics CJNM|Chin. J. Nat. Med.=Chin. J. Nat. Medicines|Chinese Journal of Natural Medicines CJNS|Can. J. Neurol. Sci.|Canadian Journal of Neurological Sciences=The Canadian Journal of Neurological Sciences. le Journal Canadien des Sciences Neurologiques CJO|Can. J. Ophthalmol.=Can. J. Ophthalmol. J. Can. Ophtal.|Canadian Journal of Ophthalmology: Journal Canadien D Ophtalmologie CJOC|Chinese J. Org. Chem.|Chinese Journal of Organic Chemistry CJON|Clin. J. Oncol. Nurs.|Clinical Journal of Oncology Nursing CJOT|Can. J. Occup. Ther.|Canadian Journal of Occupational Therapy. Revue Canadienne D'ergothérapie CJP|Can. J. Phys.|Canadian Journal of Physics CJP1|Can. J. Psychiatry=Can. J. Psychiat.|Canadian Journal of Psychiatry. Revue Canadienne de Psychiatrie CJP2|Chin. J. Physiol.=Chinese J. Physiol.|Chinese Journal of Physiology=The Chinese Journal of Physiology CJP3|Chinese J. Phys.|Chinese Journal of Physics CJP4|Clin. J. Pain|Clinical Journal of Pain=The Clinical Journal of Pain CJPP|Can. J. Physiol. Pharmacol.=Can. J. Physiol. Pharm.|Canadian Journal of Physiology and Pharmacology CJPS|Chinese J. Polym. Sci.|Chinese Journal of Polymer Science CJRM|Can. J. Rural Med.|Canadian Journal of Rural Medicine CJS|Can. J. Stat.=Can. J. Statistics|Canadian Journal of Statistics=Canadian Journal of Statistics-Revue Canadienne de Statistique CJS1|Can. J. Surg.|Canadian Journal of Surgery=Canadian Journal of Surgery. Journal Canadien de Chirurgie CJSC|Chinese J. Struc. Chem.|Chinese Journal of Structural Chemistry CJSM|Clin. J. Sport Med.|Clinical Journal of Sport Medicine CJU|Can. J. Urol.|Canadian Journal of Urology=The Canadian Journal of Urology CL|Cancer Lett.|Cancer Letters CL1|Catal. Letters=Catalysis Lett.|Catalysis Letters CL2|Chalcogenide Lett.|Chalcogenide Letters CL3|Chem. Lett.|Chemistry Letters CL4|Chem. Listy|Chemicke Listy CL5|Clin. Lab.|Clinical Laboratory CL6|Comput. Linguist.|Computational Linguistics CL7|Cryo Letters=Cryoletters|Cryo Letters CLAE|Cont. Lens Anterior Eye|Contact Lens & Anterior Eye: The Journal of the British Contact Lens Association CLC|Cas. Lek. Cesk.|Casopis Lekaru Ceskych=Casopís Lékar̆ů C̆eských CLC1|Clin. Lung Cancer|Clinical Lung Cancer CLD|Clin. Liver Dis.|Clinics in Liver Disease CLM|Clin. Lab. Med.|Clinics in Laboratory Medicine CLML|Clin. Lymphoma Myeloma Leuk.=Cl. Lymph. Myelom. Leuk.|Clinical Lymphoma, Myeloma & Leukemia CLP|Clin. Linguist. Phon.=Clin. Linguist. Phonet.|Clinical Linguistics & Phonetics CLSS|Comput. Lang. Syst. Struct.=Comput. Lang. Syst. Str.|Computer Languages, Systems & Structures CM|Cancer Med.=Cancer Med. US|Cancer Medicine CM1|Cardiorenal Med.|Cardiorenal Medicine CM2|Cell Metab.|Cell Metabolism CM3|Cell. Microbiol.|Cellular Microbiology CM4|Chem. Mater.|Chemistry of Materials CM5|Child Maltreat.|Child Maltreatment CM6|Clio Med.|Clio Medica: Acta Academiae Internationalis Historiae Medicinae CM7|Collect. Math.|Collectanea Mathematica CM8|Colomb. Med.=Colomb. Medica|Colombia Médica CM9|Commun. Med.|Communication & Medicine CM10|Comp. Med.=Comparative Med.|Comparative Medicine CM11|Compos. Math.|Compositio Mathematica CM12|Contemp. Math.|Contemporary Mathematics CM13|Contrib. Microbiol.|Contributions to Microbiology CM14|Curr. Microbiol.|Current Microbiology CMA|Comput. Math. Appl.|Computers & Mathematics with Applications CMAM|Comput. Methods Appl. Math.|Computational Methods in Applied Mathematics CMAME|Comput. Methods Appl. Mech. Eng.=Comput. Method. Appl. Mech. Eng.|Computer Methods in Applied Mechanics and Engineering CMB|Cell. Mol. Bioeng.|Cellular and Molecular Bioengineering CMB1|Cell. Mol. Biol.|Cellular and Molecular Biology CMBBCM|Can. Math. Bull. Bull. Can. Math.|Canadian Mathematical Bulletin-Bulletin Canadien de Mathematiques CMBBE|Comput. Methods Biomech. Biomed. Engin.=Comput. Methods Biomech. Biomed.|Computer Methods in Biomechanics and Biomedical Engineering CMBL|Cell. Mol. Biol. Lett.|Cellular & Molecular Biology Letters CMC|Curr. Med. Chem.=Curr. Medicinal Chem.|Current Medicinal Chemistry CMFT|Comput. Methods Funct. Theory|Computational Methods and Function Theory CMGH|Cell. Mol. Gastroenterol. Hepatol.|Cellular and Molecular Gastroenterology and Hepatology CMH|Clin. Mol. Hepatol.|Clinical and Molecular Hepatology CMH1|Comment. Math. Helv.|Commentarii Mathematici Helvetici CMHJ|Community Ment. Health J.=Community Ment. Hlt. J.|Community Mental Health Journal CMI|Cell. Mol. Immunol.|Cellular & Molecular Immunology CMI1|Clin. Microbiol. Infect.=Clin. Microbiol. Infec.|Clinical Microbiology and Infection CMIG|Comput. Med. Imaging Graph.=Comput. Med. Imag. Grap.|Computerized Medical Imaging and Graphics CMJ|Ceylon Med. J.|The Ceylon Medical Journal CMJ1|Chin. Med. J.=Chinese Med. J. Peking|Chinese Medical Journal CMJ2|Comput. Music J.|Computer Music Journal CMJ3|Croat. Med. J.|Croatian Medical Journal CMJ4|Czech. Math. J.|Czechoslovak Mathematical Journal CMLS|Cell. Mol. Life Sci.|Cellular and Molecular Life Sciences CMM|Comput. Math. Model.|Computational Mathematics and Modeling CMM1|Curr. Mol. Med.|Current Molecular Medicine CMMI|Contrast Media Mol. Imaging=Contrast Media Mol. I.|Contrast Media & Molecular Imaging CMMM|Comput. Math. Methods Med.=Comput. Math. Method. Med.|Computational and Mathematical Methods in Medicine CMMPET|Comput. Math. Math. Phys. Engl. Tr.|Computational Mathematics and Mathematical Physics CMN|Cell. Mol. Neurobiol.|Cellular and Molecular Neurobiology CMP|Commun. Math. Phys.|Communications in Mathematical Physics CMP1|Condens. Matter Phys.|Condensed Matter Physics CMP2|Cult. Med. Psychiatry=Cult. Med. Psychiat.|Culture, Medicine and Psychiatry CMP3|Curr. Mol. Pharmacol.=Curr. Molec. Pharmacol.|Current Molecular Pharmacology CMPB|Comput. Methods Programs Biomed.=Comput. Method. Program. Biomed.|Computer Methods and Programs in Biomedicine CMR|Cancer Metastasis Rev.|Cancer Metastasis Reviews CMR1|Clin. Med. Res.|Clinical Medicine & Research CMR2|Clin. Microbiol. Rev.|Clinical Microbiology Reviews CMR3|Complement. Med. Res.|Complementary Medicine Research CMRO|Curr. Med. Res. Opin.|Current Medical Research and Opinion CMRPA|Concepts Magn. Reson. Part A|Concepts in Magnetic Resonance Part A CMRPBMRE|Concepts Magn. Reson. Part B Magn. Reson. Eng.=Concepts Magn. Reson. Part B|Concepts in Magnetic Resonance Part B: Magnetic Resonance Engineering CMS|Commun. Math. Sci.|Communications in Mathematical Sciences CMS1|Comput. Mater. Sci.=Comp. Mater. Sci.|Computation Materials Science=Computational Materials Science CMS2|Curr. Med. Sci.|Current Medical Science CMT|Chiropr. Man. Therap.|Chiropractic & Manual Therapies CMW|Colloq. Math. Warsaw|Colloquium Mathematicum CN|Cancer Nurs.|Cancer Nursing CN1|Child Neuropsychol.|Child Neuropsychology=Child Neuropsychology: A Journal on Normal and Abnormal Development in Childhood and Adolescence CN2|Clin. Nephrol.|Clinical Nephrology CN3|Clin. Neuropathol.|Clinical Neuropathology CN4|Clin. Neuropharmacol.|Clinical Neuropharmacology CN5|Clin. Neurophysiol.|Clinical Neurophysiology CN6|Clin. Neuropsychol.|Clinical Neuropsychologist=The Clinical Neuropsychologist CN7|Clin. Neuroradiol.|Clinical Neuroradiology CN8|Clin. Nutr.|Clinical Nutrition CN9|Cogn. Neuropsychiatry|Cognitive Neuropsychiatry CN10|Cogn. Neuropsychol.=Cognitive Neuropsychol.|Cognitive Neuropsychology CN11|Cogn. Neurosci.=Cogn. Neurosci. UK|Cognitive Neuroscience CN12|Comput. Netw.|Computer Networks CN13|Contemp. Nurse|Contemporary Nurse CN14|Contrib. Nephrol.|Contributions to Nephrology CN15|Creat. Nurs.|Creative Nursing CN16|Curr. Neuropharmacol.|Current Neuropharmacology CNC|Chem. Nat. Compd.|Chemistry of Natural Compounds CNESPEN|Clin. Nutr. ESPEN|Clinical Nutrition ESPEN CNM|Clin. Nucl. Med.|Clinical Nuclear Medicine CNN|Clin. Neurol. Neurosurg.=Clin. Neurol. Neurosur.|Clinical Neurology and Neurosurgery CNNR|Curr. Neurol. Neurosci. Rep.=Curr. Neurol. Neurosci.|Current Neurology and Neuroscience Reports CNR|Clin. Nurs. Res.|Clinical Nursing Research CNR1|Curr. Neurovasc. Res.|Current Neurovascular Research CNR2|Curr. Nutr. Rep.|Current Nutrition Reports CNS|Childs Nerv. Syst.|Child's Nervous System CNS1|Clin. Nurse Spec.|Clinical Nurse Specialist=Clinical Nurse Specialist CNS CNSAMC|Cent. Nerv. Syst. Agents Med. Chem.|Central Nervous System Agents in Medicinal Chemistry CNSD|CNS Drugs|CNS Drugs CNSNDDT|CNS Neurol. Disord. Drug Targets=CNS Neurol. Disord. Drug Target.|CNS & Neurological Disorders Drug Targets CNSNS|Commun. Nonlinear Sci. Numer. Si.|Communications in Nonlinear Science and Numerical Simulation CNSNT|CNS Neurosci. Ther.|CNS Neuroscience & Therapeutics CNSO|CNS Oncol.|CNS Oncology CNSS|CNS Spectr.|CNS Spectrums CNTP|Commun. Number Theory Phys.|Communications in Number Theory and Physics CNY|Carbon NY|Carbon CO|Cell. Oncol.|Cellular Oncology CO1|Child. Obes.|Childhood Obesity CO2|Chim. Oggi|Chimica Oggi=Chimica Oggi-Chemistry Today CO3|Clin. Obes.|Clinical Obesity CO4|Clin. Otolaryngol.|Clinical Otolaryngology CO5|Curr. Oncol.|Current Oncology COA|Comput. Optim. Appl.|Computational Optimization and Applications COA1|Curr. Opin. Anaesthesiol.|Current Opinion in Anaesthesiology COACI|Curr. Opin. Allergy Clin. Immunol.=Curr. Opin. Allergy Clin. Immuno.|Current Opinion in Allergy and Clinical Immunology COB|Curr. Opin. Biotechnol.=Curr. Opin. Biotech.|Current Opinion in Biotechnology COC|Curr. Opin. Cardiol.|Current Opinion in Cardiology COC1|Curr. Org. Chem.|Current Organic Chemistry COCB|Curr. Opin. Cell Biol.|Current Opinion in Cell Biology COCB1|Curr. Opin. Chem. Biol.|Current Opinion in Chemical Biology COCC|Curr. Opin. Crit. Care|Current Opinion in Critical Care COCE|Curr. Opin. Chem. Eng.|Current Opinion in Chemical Engineering COCIS|Curr. Opin. Colloid Interface Sci.=Curr. Opin. Colloid Interface S.|Current Opinion in Colloid & Interface Science=Current Opinion in Colloid and Interface Science COCNMC|Curr. Opin. Clin. Nutr. Metab. Care=Curr. Opin. Clin. Nutr. Metab. CA|Current Opinion in Clinical Nutrition and Metabolic Care CODDD|Curr. Opin. Drug Discov. Devel.|Current Opinion in Drug Discovery & Development COED|Curr. Opin. Endocrinol. Diabetes=Curr. Opin. Endocrinol.|Current Opinion in Endocrinology & Diabetes=Current Opinion in Endocrinology, Diabetes, and Obesity COG|Clin. Obstet. Gynecol.|Clinical Obstetrics and Gynecology COG1|Curr. Opin. Gastroenterol.=Curr. Opin. Gastroen.|Current Opinion in Gastroenterology COGD|Curr. Opin. Genet. Dev.=Curr. Opin. Genet. Develop.|Current Opinion in Genetics & Development COH|Curr. Opin. Hematol.|Current Opinion in Hematology COHIVAIDS|Curr. Opin. HIV AIDS|Current Opinion in HIV and AIDS COI|Clin. Oral Investig.=Clin. Oral Invest.|Clinical Oral Investigations COI1|Curr. Opin. Immunol.|Current Opinion in Immunology COID|Curr. Opin. Infect. Dis.|Current Opinion in Infectious Diseases COIR|Clin. Oral Implants Res.=Clin. Oral Implant. Res.|Clinical Oral Implants Research COIS|Curr. Opin. Insect Sci.|Current Opinion in Insect Science COL|Chin. Opt. Lett.|Chinese Optics Letters COL1|Curr. Opin. Lipidol.|Current Opinion in Lipidology COM|Curr. Opin. Microbiol.|Current Opinion in Microbiology CON|Curr. Opin. Neurobiol.|Current Opinion in Neurobiology CON1|Curr. Opin. Neurol.|Current Opinion in Neurology CONH|Curr. Opin. Nephrol. Hypertens.=Curr. Opin. Nephrol. Hy.|Current Opinion in Nephrology and Hypertension COO|Curr. Opin. Oncol.|Current Opinion in Oncology COO1|Curr. Opin. Ophthalmol.|Current Opinion in Ophthalmology COOG|Curr. Opin. Obstet. Gynecol.=Curr. Opin. Obstet. Gyn.|Current Opinion in Obstetrics & Gynecology COOHNS|Curr. Opin. Otolaryngol. Head Neck Surg.=Curr. Opin. Otolaryngol. Head Ne.|Current Opinion in Otolaryngology & Head and Neck Surgery COOT|Curr. Opin. Organ Transplant.=Curr. Opin. Organ Transpl.|Current Opinion in Organ Transplantation COP|Curr. Opin. Pediatr.|Current Opinion in Pediatrics COP1|Curr. Opin. Pharmacol.|Current Opinion in Pharmacology COP2|Curr. Opin. Psychiatry=Curr. Opin. Psychiatr.|Current Opinion in Psychiatry COP3|Curr. Opin. Psychol.|Current Opinion in Psychology COP4|Curr. Opt. Photonics|Current Optics and Photonics COPB|Curr. Opin. Plant Biol.|Current Opinion in Plant Biology COPM|Curr. Opin. Pulm. Med.|Current Opinion in Pulmonary Medicine COR|Comput. Oper. Res.|Computers & Operations Research COR1|Curr. Obes. Rep.|Current Obesity Reports COR2|Curr. Oncol. Rep.|Current Oncology Reports COR3|Curr. Opin. Rheumatol.|Current Opinion in Rheumatology COR4|Curr. Osteoporos. Rep.|Current Osteoporosis Reports CORR|Clin. Orthop. Relat. Res.=Clin. Orthop. Related Res.|Clinical Orthopaedics and Related Research COS|Clin. Orthop. Surg.|Clinics in Orthopedic Surgery COS1|Curr. Org. Synth.|Current Organic Synthesis COSB|Curr. Opin. Struct. Biol.=Curr. Opin. Struc. Biol.|Current Opinion in Structural Biology COSPC|Curr. Opin. Support. Palliat. Care=Curr. Opin. Support. Palliat. Car.|Current Opinion in Supportive and Palliative Care COT|Cutan. Ocul. Toxicol.|Cutaneous and Ocular Toxicology COU|Curr. Opin. Urol.|Current Opinion in Urology COV|Curr. Opin. Virol.|Current Opinion in Virology CP|Carbohydr. Polym.=Carbohyd. Polym.|Carbohydrate Polymers CP1|Cardiovasc. Pathol.|Cardiovascular Pathology CP2|Cell Prolif.|Cell Proliferation CP3|Cesk. Patol.|Československá Patologie CP4|Chem. Pap.|Chemical Papers CP5|Chem. Phys.|Chemical Physics CP6|Cir. Pediatr.|Cirugía Pediátrica CP7|Clin. Perinatol.|Clinics in Perinatology CP8|Clin. Pharmacokinet.|Clinical Pharmacokinetics CP9|Clin. Proteomics=Clin. Proteom.|Clinical Proteomics CP10|Cogn. Process.|Cognitive Processing CP11|Cogn. Psychol.=Cognitive Psychol.|Cognitive Psychology CP12|Compr. Physiol.|Comprehensive Physiology CP13|Compr. Psychiatry=Compr. Psychiat.|Comprehensive Psychiatry CP14|Consult. Pharm.|The Consultant Pharmacist: The Journal of the American Society of Consultant Pharmacists CP15|Contemp. Phys.|Contemporary Physics CP16|Curr. Proteomics|Current Proteomics CPA|Cytometry Part A|Cytometry Part A CPAA|Commun. Pure Appl. Anal.|Communications on Pure and Applied Analysis CPAM|Commun. Pure Appl. Math.=Commun. Pur. Appl. Math.|Communications on Pure and Applied Mathematics CPB|Cell. Physiol. Biochem.|Cellular Physiology and Biochemistry CPB1|Chem. Pharm. Bull.=Chem. Pharm. Bull. Tokyo|Chemical & Pharmaceutical Bulletin=Chemical and Pharmaceutical Bulletin CPB2|Chinese Phys. B|Chinese Physics B CPB3|Curr. Pharm. Biotechnol.=Curr. Pharm. Biotechno.|Current Pharmaceutical Biotechnology CPC|Chem. Phys. Carbon|Chemistry and Physics of Carbon CPC1|Chinese Phys. C|Chinese Physics C CPC2|Comb. Probab. Comput.|Combinatorics, Probability & Computing CPC3|Comput. Phys. Commun.|Computer Physics Communications CPC4|Crit. Pathw. Cardiol.|Critical Pathways in Cardiology CPC5|Curr. Probl. Cancer=Curr. Prob. Cancer|Current Problems in Cancer CPC6|Curr. Probl. Cardiol.=Curr. Prob. Cardiology|Current Problems in Cardiology CPCB|Curr. Protoc. Chem. Biol.|Current Protocols in Chemical Biology CPCJ|Cleft Palate Craniofac. J.=Cleft Palate Cran. J.|Cleft Palate-Craniofacial Journal=The Cleft Palate-Craniofacial Journal CPD|Curr. Pharm. Des.=Curr. Pharm. Design|Current Pharmaceutical Design CPD1|Curr. Probl. Dermatol.|Current Problems in Dermatology CPDD|Clin. Pharmacol. Drug Dev.=Clin. Pharm. Drug Dev.|Clinical Pharmacology in Drug Development CPDE|Commun. Part. Diff. Equat.|Communications in Partial Differential Equations CPDR|Curr. Probl. Diagn. Radiol.|Current Problems in Diagnostic Radiology CPEIC|Chem. Process Eng. Inzynieria C.|Chemical and Process Engineering-Inzynieria Chemiczna i Procesowa CPFI|Clin. Physiol. Funct. Imaging=Clin. Physiol. Funct. I.|Clinical Physiology and Functional Imaging CPHD|Child Psychiatry Hum. Dev.|Child Psychiatry and Human Development CPHR|Curr. Pain Headache Rep.=Curr. Pain Headache R.|Current Pain and Headache Reports CPL|Chem. Phys. Lett.|Chemical Physics Letters CPL1|Chem. Phys. Lipids|Chemistry and Physics of Lipids CPL2|Chinese Phys. Lett.|Chinese Physics Letters CPMB|Curr. Protoc. Mouse Biol.|Current Protocols in Mouse Biology CPMS|Clin. Podiatr. Med. Surg.=Clin. Podiatr. Med. Sur.|Clinics in Podiatric Medicine and Surgery CPP|Clin. Psychol. Psychother.=Clin. Psychol. Psychot.|Clinical Psychology & Psychotherapy CPP1|Contrib. Plasm. Phys.|Contributions to Plasma Physics CPPAHC|Curr. Probl. Pediatr. Adolesc. Health Care=Curr. Probl. Pediatr. Adolesc. He.|Current Problems in Pediatric and Adolescent Health Care CPPB|Curr. Protoc. Plant Biol.|Current Protocols in Plant Biology CPPS|Curr. Protein Pept. Sci.=Curr. Protein Pept. Sc.|Current Protein & Peptide Science CPR|Clin. Psychol. Rev.|Clinical Psychology Review CPR1|Curr. Pediatr. Rev.|Current Pediatric Reviews CPR2|Curr. Psychiatry Rep.=Curr. Psychiat. Rep.|Current Psychiatry Reports CPS|Clin. Plast. Surg.|Clinics in Plastic Surgery CPS1|Colloid Polym. Sci.|Colloid and Polymer Science CPS2|Curr. Probl. Surg.=Curr. Prob. Surg.|Current Problems in Surgery CPT|Clin. Pharmacol. Ther.|Clinical Pharmacology & Therapeutics=Clinical Pharmacology and Therapeutics CPTL|Curr. Pharm. Teach. Learn.|Currents in Pharmacy Teaching & Learning CPTPSP|CPT Pharmacometrics Syst. Pharmacol.|CPT: Pharmacometrics & Systems Pharmacology CQG|Class. Quantum Gravity|Classical and Quantum Gravity CQHE|Camb. Q. Healthc. Ethics=Camb. Q. Healthc. Ethic.|Cambridge Quarterly of Healthcare Ethics CR|Cancer Radiother.|Cancer Radiotherapie=Cancer Radiothérapie: Journal de la Société Française de Radiothérapie Oncologique CR1|Cancer Res.|Cancer Research CR2|Carbohydr. Res.=Carbohyd. Res.|Carbohydrate Research CR3|Cardiol. Rev.|Cardiology in Review CR4|Cardiovasc. Res.|Cardiovascular Research CR5|Caries Res.|Caries Research CR6|Cell Rep.|Cell Reports CR7|Cell. Reprogram.=Cell. Reprogramm.|Cellular Reprogramming CR8|Cell Res.|Cell Research CR9|Chem. Rec.|Chemical Record CR10|Chem. Rev.|Chemical Reviews CR11|Chromosome Res.|Chromosome Research CR12|Circ. Res.|Circulation Research CR13|Clin. Radiol.|Clinical Radiology CR14|Clin. Rehabil.|Clinical Rehabilitation CR15|Clin. Rheumatol.|Clinical Rheumatology CR16|Crystallogr. Rep.|Crystallography Reports CR17|Crystallogr. Rev.|Crystallography Reviews CR18|Curr. Radiopharm.|Current Radiopharmaceuticals CRA|Color Res. Appl.|Color Research and Application CRAC|Crit. Rev. Anal. Chem.|Critical Reviews in Analytical Chemistry CRAI|Clin. Rev. Allergy Immunol.=Clin. Rev. Allerg. Immu.|Clinical Reviews in Allergy & Immunology CRB|C. R. Biol.=Cr Biol.|Comptes Rendus Biologies CRB1|Crit. Rev. Biotechnol.|Critical Reviews in Biotechnology CRBE|Crit. Rev. Biomed. Eng.|Critical Reviews in Biomedical Engineering CRBMB|Crit. Rev. Biochem. Mol. Biol.=Crit. Rev. Biochem. Molec. Biol.|Critical Reviews in Biochemistry and Molecular Biology CRC|C. R. Chim.=Cr Chim.|Comptes Rendus Chimie CRC1|Clin. Res. Cardiol.|Clinical Research in Cardiology CRCLS|Crit. Rev. Clin. Lab. Sci.=Crit. Rev. Cl. Lab. Sci.|Critical Reviews in Clinical Laboratory Sciences CRCS|Clin. Res. Cardiol. Suppl.|Clinical Research in Cardiology Supplements CRCU|Chem. Res. Chinese Univ.|Chemical Research in Chinese Universities CRD|Chron. Respir. Dis.=Chronic Respir. Dis.|Chronic Respiratory Disease CREGE|Crit. Rev. Eukaryot. Gene Expr.=Crit. Rev. Eukar. Gene|Critical Reviews in Eukaryotic Gene Expression CRFSN|Crit. Rev. Food Sci. Nutr.=Crit. Rev. Food Sci.|Critical Reviews in Food Science and Nutrition CRHG|Clin. Res. Hepatol. Gastroenterol.=Clin. Res. Hepatol. Gastroentero.|Clinics and Research in Hepatology and Gastroenterology CRI|Crit. Rev. Immunol.=Crit. Rev. Immun.|Critical Reviews in Immunology CRJ|Can. Respir. J.|Canadian Respiratory Journal CRJ1|Clin. Respir. J.|Clinical Respiratory Journal=The Clinical Respiratory Journal CRM|C. R. Math.|Comptes Rendus Mathematique CRM1|Cardiovasc. Revasc. Med.|Cardiovascular Revascularization Medicine: Including Molecular Interventions CRM2|Crit. Rev. Microbiol.|Critical Reviews in Microbiology CRO|Crit. Rev. Oncog.|Critical Reviews in Oncogenesis CRP|C. R. Phys.=Cr Phys.|Comptes Rendus. Physique CRR|Curr. Rheumatol. Rep.|Current Rheumatology Reports CRR1|Curr. Rheumatol. Rev.|Current Rheumatology Reviews CRSE|Catal. Rev. Sci. Eng.=Cat. Rev. Sci. Eng.|Catalysis Reviews - Science and Engineering CRT|Cancer Res. Treat.|Cancer Research and Treatment CRT1|Chem. Res. Toxicol.|Chemical Research in Toxicology CRT2|Crit. Rev. Toxicol.|Critical Reviews in Toxicology CRT3|Cryst. Res. Technol.|Crystal Research and Technology CRTDCS|Crit. Rev. Ther. Drug Carrier Syst.=Crit. Rev. Ther. Drug Carr. Syst.|Critical Reviews in Therapeutic Drug Carrier Systems CRTM|Curr. Res. Transl. Med.|Current Research in Translational Medicine CS|Cancer Sci.|Cancer Science CS1|Cell. Signal.|Cellular Signalling CS2|Cell Syst.|Cell Systems CS3|Chem. Sci.|Chemical Science CS4|Chem. Senses|Chemical Senses CS5|Clin. Sci.|Clinical Science CS6|Cogn. Sci.=Cognitive Sci.|Cognitive Science CS7|Comput. Security|Computers & Security CS8|Comput. Stat.=Computation. Stat.|Computational Statistics CS9|Comput. Struct.|Computers & Structures CS10|Conn. Sci.=Connect. Sci.|Connection Science CSA|Catal. Surv. Asia|Catalysis Surveys From Asia CSA1|Cybern. Syst. Anal.|Cybernetics and Systems Analysis CSAPEA|Colloids Surf. A Physicochem. Eng. Asp.=Colloid. Surface. A|Colloids and Surfaces. A, Physicochemical and Engineering Aspects CSBB|Colloids Surf. B Biointerfaces=Colloid. Surface. B|Colloids and Surfaces. B, Biointerfaces CSBJ|Comput. Struct. Biotechnol. J.=Comput. Struct. Biotec.|Computational and Structural Biotechnology Journal CSC|Cell Stem Cell|Cell Stem Cell CSC1|Cell Stress Chaperones=Cell Stress Chaperon.|Cell Stress & Chaperones CSC2|Cien. Saude Colet.=Cienc. Saude Coletiva|Ciência & Saúde Coletiva CSCRT|Curr. Stem Cell Res. Ther.=Curr. Stem Cell Res. T.|Current Stem Cell Research & Therapy CSCW|Comput. Support. Coop. Work=Comput. Supp. Coop. W. J.|Computer Supported Cooperative Work: The Journal of Collaborative Computing CSDA|Comput. Stat. Data Anal.=Comput. Statist. Data Anal.|Computational Statistics & Data Analysis=Computational Statistics and Data Analysis CSE|Comput. Sci. Eng.|Computing in Science & Engineering CSF|Cell Struct. Funct.|Cell Structure and Function CSF1|Ceska Slov. Farm.|Ceská A Slovenská Farmacie: Casopis Ceské Farmaceutické Spolecnosti A Slovenské Farmaceutické Spolecnosti CSF2|Chaos Solitons Fractals=Chaos Soliton. Fractal.|Chaos Solitons & Fractals=Chaos, Solitons, and Fractals CSHMCS|Cold Spring Harb. Mol. Case Stud.|Cold Spring Harbor Molecular Case Studies CSHP|Cold Spring Harb. Protoc.|Cold Spring Harbor Protocols CSHPB|Cold Spring Harb. Perspect. Biol.=Cold Spring Harbor Perspect. B.|Cold Spring Harbor Perspectives in Biology CSHPM|Cold Spring Harb. Perspect. Med.=CSH Perspect. Med.|Cold Spring Harbor Perspectives in Medicine CSHSQB|Cold Spring Harb. Symp. Quant. Biol.|Cold Spring Harbor Symposia on Quantitative Biology CSI|Comput. Stand. Interface.|Computer Standards & Interfaces CSIS|Comput. Sci. Inf. Syst.|Computer Science and Information Systems CSL|Comput. Speech Lang.=Computer Speech Language|Computer Speech & Language=Computer Speech and Language CSM|Clin. Sports Med.=Clin. Sport. Med.|Clinics in Sports Medicine CSMR|Curr. Sports Med. Rep.=Curr. Sport. Med. Rep.|Current Sports Medicine Reports CSO|Cesk. Slov. Oftalmol.|Ceská A Slovenská Oftalmologie: Casopis Ceské Oftalmologické Spolecnosti A Slovenské Oftalmologické Spolecnosti CSP|Cad. Saude Publica|Cadernos de Saúde Pública CSR|Chem. Soc. Rev.|Chemical Society Reviews CSR1|Cogn. Syst. Res.|Cognitive Systems Research CSRP|Clin. Schizophr. Relat. Psychoses|Clinical Schizophrenia & Related Psychoses CSS|Clin. Spine Surg.|Clinical Spine Surgery CSSC|Commun. Stat. Simul. Comput.=Comm. Statist. Simulation Comput.|Communications in Statistics: Simulation and Computation CSSE|Comput. Syst. Sci. Eng.|Computer Systems Science and Engineering CST|Catal. Sci. Technol.|Catalysis Science & Technology CSTM|Commun. Stat. Theory Methods=Commun. Statist. Theor. Method.|Communications in Statistics: Theory and Methods CT|Cardiovasc. Ther.|Cardiovascular Therapeutics CT1|Cardiovasc. Toxicol.|Cardiovascular Toxicology CT2|Catal. Today|Catalysis Today CT3|Cell Transplant.|Cell Transplantation CT4|ChemTexts|ChemTexts CT5|Clin. Teach.|The Clinical Teacher CT6|Clin. Ter.|La Clinica Terapeutica CT7|Clin. Ther.|Clinical Therapeutics CT8|Clin. Transplant.|Clinical Transplantation CT9|Clin. Trials|Clinical Trials=Clinical Trials: Journal of the Society for Clinical Trials CT10|Color. Technol.|Coloration Technology CT11|Cytologia Tokyo|Cytologia CTB|Cell Tissue Bank.|Cell and Tissue Banking CTBN|Curr. Top. Behav. Neurosci.|Current Topics in Behavioral Neurosciences CTC|Comput. Theor. Chem.|Computational & Theoretical Chemistry=Computational and Theoretical Chemistry CTCP|Complement. Ther. Clin. Pract.=Complement. Ther. Clin.|Complementary Therapies in Clinical Practice CTDB|Curr. Top. Dev. Biol.|Current Topics in Developmental Biology CTG|Clin. Transl. Gastroenterol.=Clin. Transl. Gastroen.|Clinical and Translational Gastroenterology CTI|Calcif. Tissue Int.=Calcified Tissue Int.|Calcified Tissue International CTM|Complement. Ther. Med.|Complementary Therapies in Medicine CTM1|Curr. Top. Membr.|Current Topics in Membranes CTMC|Curr. Top. Med. Chem.|Current Topics in Medicinal Chemistry CTMI|Curr. Top. Microbiol. Immunol.=Curr. Topics Microbiol. Immunol.|Current Topics in Microbiology and Immunology CTO|Cells Tissues Organs|Cells Tissues Organs CTO1|Clin. Transl. Oncol.|Clinical & Translational Oncology CTOO|Curr. Treat. Options Oncol.=Curr. Treat. Option. On.|Current Treatment Options in Oncology CTP|Commun. Theor. Phys.|Communications in Theoretical Physics CTR|Cancer Treat. Res.|Cancer Treatment and Research CTR1|Cancer Treat. Rev.=Cancer Treatment Rev.|Cancer Treatment Reviews CTR2|Cell Tissue Res.|Cell and Tissue Research CTR3|Connect. Tissue Res.|Connective Tissue Research CTRC|Cancer Treat. Res. Commun.|Cancer Treatment and Research Communications CTS|Clin. Transl. Sci.|Clinical and Translational Science CU|Cardiovasc. Ultrasound=Cardiovasc. Ultrasoun.|Cardiovascular Ultrasound CUR|Curr. Urol. Rep.|Current Urology Reports CUZ|Chem. Unserer Zeit|Chemie in Unserer Zeit CVEE|Complex Var. Elliptic Equ.|Complex Variables and Elliptic Equations CVIU|Comput. Vis. Image Underst.=Comput. Vis. Image Understand.|Computer Vision and Image Understanding CVP|Curr. Vasc. Pharmacol.|Current Vascular Pharmacology CVPDE|Calc. Var. Partial Differ. Equ.=Calc. Var. Partial Differ. Equat.|Calculus of Variations and Partial Differential Equations CY|Cardiol. Young|Cardiology in the Young D|Daru|Daru: Journal of Pharmaceutical Sciences=Daru: Journal of Faculty of Pharmacy, Tehran University of Medical Sciences D1|Database=Database Oxford|Database: The Journal of Biological Databases and Curation D2|Demography|Demography D3|Dermatitis|Dermatitis: Contact, Atopic, Occupational, Drug D4|Desalination|Desalination D5|Development|Development D6|Diabetes|Diabetes D7|Diabetologia|Diabetologia D8|Differentiation|Differentiation: Research in Biological Diversity D9|Digestion|Digestion D10|Disasters|Disasters D11|Displays|Displays D12|Drugs|Drugs D13|Dyslexia|Dyslexia: The Journal of the British Dyslexia Association D14|Dysphagia|Dysphagia DA|Depress. Anxiety|Depression and Anxiety DA1|Drugs Aging=Drug. Aging|Drugs & Aging DAD|Drug Alcohol Depend.=Drug Alcohol Dependence|Drug and Alcohol Dependence DAE|Domest. Anim. Endocrinol.=Domest. Anim. Endocrin.|Domestic Animal Endocrinology DAES|Des. Autom. Embed. Syst.|Design Automation for Embedded Systems DAI|Dtsch. Arztebl. Int.|Deutsches Ärzteblatt International DAO|Dis. Aquat. Org.=Disease. Aquat. Org.|Diseases of Aquatic Organisms DAR|Drug Alcohol Rev.|Drug and Alcohol Review DB|Dev. Biol.=Develop. Biol.|Developmental Biology DBB|Dokl. Biochem. Biophys.|Doklady. Biochemistry and Biophysics DBS|Dokl. Biol. Sci.|Doklady Biological Sciences: Proceedings of the Academy of Sciences of the USSR, Biological Sciences Sections DC|Dermatol. Clin.|Dermatologic Clinics DC1|Dev. Cell|Developmental Cell DC2|Diabetes Care|Diabetes Care DC3|Diagn. Cytopathol.|Diagnostic Cytopathology DC4|Distrib. Comput.|Distributed Computing DC5|Dokl. Chem.|Doklady Chemistry DCC|Designs Codes Cryptogr.|Designs Codes and Cryptography DCCN|Dimens. Crit. Care Nurs.|Dimensions of Critical Care Nursing DCDS|Discrete Contin. Dyn. Syst.|Discrete and Continuous Dynamical Systems DCDSSB|Discrete Continuous Dyn. Syst. Ser. B=Discrete Contin. Dyn. Sys. Ser. B|Discrete and Continuous Dynamical Systems. Series B DCDSSS|Discret. Contin. Dyn. Syst. Ser. S|Discrete and Continuous Dynamical Systems-Series S DCI|Dev. Comp. Immunol.=Develop. Comp. Immunol.|Developmental and Comparative Immunology DCN|Dev. Cogn. Neurosci.=Dev. Cogn. Neuros. Neth.|Developmental Cognitive Neuroscience DCN1|Dialogues Clin. Neurosci.=Dialogues Clin. Neuro.|Dialogues in Clinical Neuroscience DCNA|Dent. Clin. North Am.|Dental Clinics of North America DCR|Dis. Colon Rectum|Diseases of the Colon & Rectum=Diseases of the Colon and Rectum DCT|Drug Chem. Toxicol.|Drug and Chemical Toxicology DD|Dev. Dyn.=Develop. Dynam.|Developmental Dynamics DD1|Dig. Dis.=Digest. Dis.|Digestive Diseases DD2|Drug Deliv.|Drug Delivery DDDT|Drug Des. Devel. Ther.=Drug Des. Dev. Ther.|Drug Design, Development and Therapy DDIP|Drug Dev. Ind. Pharm.=Drug Develop. Ind. Pharm.|Drug Development and Industrial Pharmacy DDR|Drug Dev. Res.=Drug Develop. Res.|Drug Development Research DDS|Dig. Dis. Sci.=Digest. Dis. Sci.|Digestive Diseases and Sciences DDT|Drug Discov. Ther.|Drug Discoveries & Therapeutics DDT1|Drug Discov. Today|Drug Discovery Today DDTR|Drug Deliv. Transl. Res.=Drug Deliv. Transl. Re.|Drug Delivery and Translational Research DDTT|Drug Discov. Today Technol.|Drug Discovery Today. Technologies DE|Diabetes Educ.|The Diabetes Educator DE1|Dig. Endosc.=Digest. Endosc.|Digestive Endoscopy DE2|Dis. Esophagus|Diseases of the Esophagus DEET|Differential Equat. Engl. Tr.|Differential Equations DGA|Differ. Geom. Appl.=Differential Geom. Appl.|Differential Geometry and its Applications DGA1|Dyn. Games Appl.|Dynamic Games and Applications DGCD|Dement. Geriatr. Cogn. Disord.=Dement. Geriatr. Cogn.|Dementia and Geriatric Cognitive Disorders DGD|Dev. Growth Differ.=Develop. Growth Differ.|Development, Growth & Differentiation DGE|Dev. Genes Evol.|Development Genes and Evolution DHJ|Disabil. Health J.|Disability and Health Journal DHM|Diving Hyperb. Med.|Diving and Hyperbaric Medicine DI|Digit. Investig.|Digital Investigation DIE|Differ. Integral Equ.|Differential and Integral Equations DII|Diagn. Interv. Imaging=Diagn. Interv. Imag.|Diagnostic and Interventional Imaging DIR|Diagn. Interv. Radiol.|Diagnostic and Interventional Radiology DJO|Digit. J. Ophthalmol.|Digital Journal of Ophthalmology DKE|Data Knowl. Eng.|Data & Knowledge Engineering DLD|Dig. Liver Dis.=Digest. Liver Dis.|Digestive and Liver Disease DM|Dent. Mater.|Dental Materials DM1|Diabet. Med.=Diabetic Med.|Diabetic Medicine=Diabetic Medicine: A Journal of the British Diabetic Association DM2|Diabetes Metab.|Diabetes & Metabolism DM3|Dis. Markers=Disease Marker.|Disease Markers DM4|Dis. Mon.|Disease-A-Month DM5|Discov. Med.|Discovery Medicine DM6|Discrete Math.|Discrete Mathematics DM7|Diss. Math.|Dissertationes Mathematicae DM8|Doc. Math.|Documenta Mathematica DM9|Dokl. Math.|Doklady Mathematics DMCN|Dev. Med. Child Neurol.=Develop. Med. Child Neurol.|Developmental Medicine and Child Neurology DMD|Drug Metab. Dispos.=Drug Metab. Disposition|Drug Metabolism and Disposition=Drug Metabolism and Disposition: The Biological Fate of Chemicals DMGT|Discuss. Math. Graph Theory|Discussiones Mathematicae Graph Theory DMID|Diagn. Microbiol. Infect. Dis.=Diagn. Micr. Infec. Dis.|Diagnostic Microbiology and Infectious Disease DMJ|Dan. Med. J.|Danish Medical Journal DMJ1|Dent. Mater. J.|Dental Materials Journal DMJ2|Duke Math. J.|Duke Mathematical Journal DMKD|Data Min. Knowl. Discov.=Data Min. Knowl. Disc.|Data Mining and Knowledge Discovery DML|Drug Metab. Lett.|Drug Metabolism Letters DMM|Dis. Model. Mech.|Disease Models & Mechanisms DMP|Dent. Med. Probl.|Dental and Medical Problems DMP1|Des. Monomers Polym.|Designed Monomers and Polymers DMP2|Drug Metab. Pharmacokinet.=Drug Metab. Pharmacok.|Drug Metabolism and Pharmacokinetics DMPHP|Disaster Med. Public Health Prep.=Disaster Med. Public Health Pr.|Disaster Medicine and Public Health Preparedness DMPT|Drug Metab. Pers. Ther.|Drug Metabolism and Personalized Therapy DMR|Drug Metab. Rev.|Drug Metabolism Reviews DMS|Diabetes Metab. Syndr.|Diabetes & Metabolic Syndrome DMTCS|Discret. Math. Theor. Comput. Sci.|Discrete Mathematics and Theoretical Computer Science DMW|Dtsch. Med. Wochenschr.=Deut. Med. Wochenschr.|Deutsche Medizinische Wochenschrift DN|Dev. Neurobiol.|Developmental Neurobiology DN1|Dev. Neuropsychol.=Develop. Neuropsychol.|Developmental Neuropsychology DN2|Dev. Neurorehabil.|Developmental Neurorehabilitation DN3|Dev. Neurosci.=Dev. Neurosci. Basel|Developmental Neuroscience DNACB|DNA Cell Biol.|DNA and Cell Biology DNAR|DNA Repair|DNA Repair DNAR1|DNA Res.|DNA Research=DNA Research: An International Journal for Rapid Publication of Reports on Genes and Genomes DO|Dev. Ophthalmol.|Developments in Ophthalmology DO1|Discrete Optim.|Discrete Optimization DO2|Doc. Ophthalmol.|Documenta Ophthalmologica=Documenta Ophthalmologica. Advances in Ophthalmology DOJ|Dermatol. Online J.|Dermatology Online Journal DOM|Diabetes Obes. Metab.|Diabetes, Obesity & Metabolism DP|Dev. Psychobiol.=Develop. Psychobiol.|Developmental Psychobiology DP1|Dev. Psychol.=Develop. Psychol.|Developmental Psychology DP2|Dev. Psychopathol.|Development and Psychopathology DP3|Diagn. Pathol.|Diagnostic Pathology DP4|Dokl. Phys.|Doklady Physics DP5|Dyes Pigments|Dyes and Pigments DPC|Dokl. Phys. Chem.|Doklady Physical Chemistry DPD|Distrib. Parallel Datab.|Distributed and Parallel Databases DPDE|Dyn. Partial Differ. Equ.|Dynamics of Partial Differential Equations DPJO|Dental Press J. Orthod.|Dental Press Journal of Orthodontics DPM|Dev. Period Med.|Developmental Period Medicine DR|Dentomaxillofac. Radiol.=Dentomaxillofac. Rad.|Dento Maxillo Facial Radiology DR1|Disabil. Rehabil.|Disability and Rehabilitation DRAT|Disabil. Rehabil. Assist. Technol.|Disability and Rehabilitation. Assistive Technology DRCP|Diabetes Res. Clin. Pract.=Diabetes Res. Clin. Pr.|Diabetes Research and Clinical Practice DRD|Drugs R D.|Drugs in R&d DRU|Drug Resist. Updat.|Drug Resistance Updates: Reviews and Commentaries in Antimicrobial and Anticancer Chemotherapy DS|Death Stud.|Death Studies DS1|Dermatol. Surg.|Dermatologic Surgery DS2|Dev. Sci.=Developmental Sci.|Developmental Science DS3|Dig. Surg.=Digest. Surg.|Digestive Surgery DS4|Drug Saf.|Drug Safety DS5|Dynam. Syst.|Dynamical Systems-An International Journal DSS|Decis. Support Syst.|Decision Support Systems DT|Dalton Trans.=Dalton T.|Dalton Transactions=Dalton Transactions: An International Journal of Inorganic Chemistry DT1|Dent. Traumatol.|Dental Traumatology DT2|Dermatol. Ther.|Dermatologic Therapy DT3|Drugs Today=Drug. Today|Drugs of Today DTA|Drug Test. Anal.|Drug Testing and Analysis DTB|Drug Ther. Bull.|Drug and Therapeutics Bulletin DTT|Diabetes Technol. Ther.=Diabetes Technol. The.|Diabetes Technology & Therapeutics DVDR|Diab. Vasc. Dis. Res.=Diabetes Vasc. Dis. Res.|Diabetes & Vascular Disease Research DWB|Dev. World Bioeth.|Developing World Bioethics E|Ebiomedicine|Ebiomedicine E1|Echocardiography|Echocardiography E2|Ecography|Ecography E3|Ecohealth|Ecohealth E4|Ecology|Ecology E5|Econometrica|Econometrica: Journal of the Econometric Society E6|Ecotoxicology|Ecotoxicology E7|Electroanalysis=Electroanal.|Electroanalysis E8|Electrochemistry|Electrochemistry E9|Electrophoresis|Electrophoresis E10|Elife|Elife E11|Emergencias|Emergencias: Revista de la Sociedad Española de Medicina de Emergencias E12|Emotion|Emotion E13|Encephale|L'encéphale=Encephale-Revue de Psychiatrie Clinique Biologique et Therapeutique E14|Endeavour|Endeavour E15|Endocrine|Endocrine E16|Endocrinology|Endocrinology E17|Endoscopy|Endoscopy E18|Eneuro|Eneuro E19|Enzymes|The Enzymes E20|Epidemics=Epidemics Neth.|Epidemics E21|Epidemiology|Epidemiology E22|Epigenetics=Epigenetics US|Epigenetics E23|Epigenomics=Epigenomics UK|Epigenomics E24|Epilepsia|Epilepsia E25|Ergonomics|Ergonomics E26|Esophagus=Esophagus Tokyo|Esophagus E27|Eurointervention|Eurointervention E28|Europace|Europace E29|Evodevo|Evodevo E30|Evolution|Evolution: International Journal of Organic Evolution E31|Extremes|Extremes E32|Extremophiles|Extremophiles: Life Under Extreme Conditions EA|Ecol. Appl.|Ecological Applications EA1|Electrochim. Acta|Electrochimica Acta EA2|Evol. Anthropol.|Evolutionary Anthropology EA3|Exp. Anim.=Exp. Anim. Tokyo|Experimental Animals EAA|Exp. Appl. Acarol.|Experimental & Applied Acarology=Experimental and Applied Acarology EAACI|Eur. Ann. Allergy Clin. Immunol.|European Annals of Allergy and Clinical Immunology EAAI|Eng. Appl. Artif. Intell.=Eng. Appl. Artif. Intel.|Engineering Applications of Artificial Intelligence EAAP|East Asian Arch. Psychiatry|East Asian Archives of Psychiatry EAJAM|East Asian J. Applied Math.=East Asian J. Appl. Math.|East Asian Journal on Applied Mathematics EAJPH|East Afr. J. Public Health|East African Journal of Public Health EAO|Eur. Arch. Otorhinolaryngol.=Eur. Arch. Oto Rhino Laryngol.|European Archives of Oto-Rhino-Laryngology EAOHND|Eur. Ann. Otorhinolaryngol. Head Neck Dis.=Eur. Ann. Otorhinolaryngol. Head|European Annals of Otorhinolaryngology, Head and Neck Diseases EAPCN|Eur. Arch. Psychiatry Clin. Neurosci.=Eur. Arch. Psychiat. Clin. Neuros.|European Archives of Psychiatry and Clinical Neuroscience EAPD|Eur. Arch. Paediatr. Dent.|European Archives of Paediatric Dentistry EAR|Eur. Addict. Res.|European Addiction Research EAR1|Exp. Aging Res.|Experimental Aging Research EB|Eat. Behav.|Eating Behaviors EB1|Epilepsy Behav.|Epilepsy & Behavior EB2|Essays Biochem.|Essays in Biochemistry EB3|Evol. Bioinform.|Evolutionary Bioinformatics EB4|Evol. Biol.|Evolutionary Biology EBD|Evid. Based Dent.|Evidence-Based Dentistry EBJ|Eur. Biophys. J.|European Biophysics Journal EBJBL|Eur. Biophys. J. Biophys. Lett.|European Biophysics Journal with Biophysics Letters EBM|Electromagn. Biol. Med.|Electromagnetic Biology and Medicine EBMH|Evid. Based Ment. Health|Evidence-Based Mental Health EBN|Evid. Based Nurs.|Evidence-Based Nursing EBO|Evol. Bioinform. Online|Evolutionary Bioinformatics Online EBPH|Epidemiol. Biostat. Public Health|Epidemiology, Biostatistics, and Public Health EBR|Exp. Brain Res.|Experimental Brain Research EC|Ecol. Complex.|Ecological Complexity EC1|Electrochem. Commun.|Electrochemistry Communications EC2|Endocr. Connect.=Endoc. Connect.|Endocrine Connections EC3|Enferm. Clin.|Enfermería Clínica EC4|Eng. Comput.=Eng. Comput. Germany|Engineering with Computers EC5|Epigenetics Chromatin=Epigenet. Chromatin|Epigenetics & Chromatin EC6|Evol. Comput.|Evolutionary Computation ECAP|Eur. Child Adolesc. Psychiatry=Eur. Child Adolesc. Psychiatr.|European Child & Adolescent Psychiatry ECED|Exp. Clin. Endocrinol. Diabetes=Exp. Clin. Endocr. Diab.|Experimental and Clinical Endocrinology & Diabetes ECL|Environ. Chem. Lett.|Environmental Chemistry Letters ECL1|Eye Contact Lens=Eye Contact Lens Sci. Clin. Pra.|Eye & Contact Lens=Eye & Contact Lens-Science and Clinical Practice ECM|Energy Convers. Manag.=Energy Convers. Manage.|Energy Conversion and Management ECM1|Eur. Cell. Mater.=Eur. Cells Mater.|European Cells & Materials ECN|Eur. Cytokine Netw.|European Cytokine Network ECP|Electron. Commun. Probab.|Electronic Communications in Probability ECP1|Exp. Clin. Psychopharmacol.=Exp. Clin. Psychopharm.|Experimental and Clinical Psychopharmacology ECR|Exp. Cell Res.|Experimental Cell Research ECSJSSST|ECS J. Solid State Sci. Technol.=ECS J. Solid State Sc.|ECS Journal of Solid State Science and Technology ECT|Exp. Clin. Transplant.|Experimental and Clinical Transplantation ED|Eat. Disord.|Eating Disorders ED1|Endocr. Dev.|Endocrine Development ED2|Epileptic Disord.|Epileptic Disorders=Epileptic Disorders: International Epilepsy Journal with Videotape ED3|Ethn. Dis.=Ethnic. Dis.|Ethnicity & Disease ED4|Evol. Dev.|Evolution & Development ED5|Exp. Dermatol.|Experimental Dermatology EDN|Endocrinol. Diabetes Nutr.=Endocrinol. Diab. Nutr.|Endocrinología, Diabetes y Nutrición EE|Empir. Econ.|Empirical Economics EE1|Environ. Entomol.|Environmental Entomology EECT|Evol. Equ. Control Theory|Evolution Equations and Control Theory EEDR|Eur. Eat. Disord. Rev.=European Eating Disorders Rev.|European Eating Disorders Review=European Eating Disorders Review: The Journal of the Eating Disorders Association EER|Exp. Eye Res.|Experimental Eye Research EES|Ecotoxicol. Environ. Saf.=Ecotoxicol. Environ. Safety|Ecotoxicology and Environment Safety=Ecotoxicology and Environmental Safety EES1|Energy Environ. Sci.=Energ. Environ. Sci.|Energy & Environmental Science EF|Energy Fuels=Energ. Fuel.|Energy & Fuels=Energy and Fuels EFN|Ecol. Food Nutr.|Ecology of Food and Nutrition EG|Exp. Gerontol.|Experimental Gerontology EGH|Environ. Geochem. Health=Environ. Geochem. Hlth.|Environmental Geochemistry and Health EH|Ear Hear.=Ear Hearing|Ear and Hearing EH1|Environ. Health=Environ. Health Glob.|Environmental Health=Environmental Health: A Global Access Science Source EH2|Epidemiol. Health|Epidemiology and Health EH3|Ethn. Health=Ethnic. Health|Ethnicity & Health EH4|Exp. Hematol.|Experimental Hematology EHB|Econ. Hum. Biol.|Economics & Human Biology=Economics and Human Biology EHD|Early Hum. Dev.|Early Human Development EHJ|Eur. Heart J.|European Heart Journal EHJACC|Eur. Heart J. Acute Cardiovasc. Care|European Heart Journal. Acute Cardiovascular Care EHJCI|Eur. Heart J. Cardiovasc. Imaging=Eur. Heart J. Cardiovasc. Imagin.|European Heart Journal Cardiovascular Imaging EHJCP|Eur. Heart J. Cardiovasc. Pharmacother.|European Heart Journal. Cardiovascular Pharmacotherapy EHJQCCO|Eur. Heart J. Qual. Care Clin. Outcomes|European Heart Journal. Quality of Care & Clinical Outcomes EHP|Environ. Health Perspect.=Environ. Health Persp.|Environmental Health Perspectives EHP1|Eval. Health Prof.|Evaluation & the Health Professions EHPM|Environ. Health Prev. Med.=Environ. Health Prev.|Environmental Health and Preventive Medicine EI|Enferm. Intensiva|Enfermería Intensiva EI1|Environ. Int.|Environment International EI2|Epidemiol. Infect.|Epidemiology and Infection EID|Emerging Infect. Dis.=Emerg. Infect. Dis.|Emerging Infectious Diseases EIMC|Enferm. Infecc. Microbiol. Clin.=Enferm. Infec. Microbiol. Clin.|Enfermedades Infecciosas y Microbiología Clínica EIP|Early Interv. Psychiatry=Early Interv. Psychia.|Early Intervention in Psychiatry EIR|Exerc. Immunol. Rev.|Exercise Immunology Review EISUK|Enterp. Inf. Syst. UK|Enterprise Information Systems EJ|Economet. J.|Econometrics Journal EJ1|Endocr. J.|Endocrine Journal EJ2|Excli J.|Excli Journal EJA|Eur. J. Anaesthesiol.=Eur. J. Anaesth.|European Journal of Anaesthesiology EJAM|Eur. J. Appl. Math.|European Journal of Applied Mathematics EJAP|Eur. J. Appl. Physiol.|European Journal of Applied Physiology EJAS|Eur. J. Anaesthesiol. Suppl.|European Journal of Anaesthesiology. Supplement EJB|Electron. J. Biotechnol.=Electron. J. Biotechn.|Electronic Journal of Biotechnology EJB1|Eur. J. Biochem.|European Journal of Biochemistry EJC|Electron. J. Comb.|Electronic Journal of Combinatorics EJC1|Eur. J. Cancer|European Journal of Cancer EJC2|Eur. J. Combinatoric.|European Journal of Combinatorics EJCB|Eur. J. Cell Biol.|European Journal of Cell Biology EJCI|Eur. J. Clin. Invest.|European Journal of Clinical Investigation EJCM|Eur. J. Clin. Microbiol.=Eur. J. Clin. Microbiol. Infect. D.|European Journal of Clinical Microbiology=European Journal of Clinical Microbiology & Infectious Diseases EJCN|Eur. J. Cardiovasc. Nurs.=Eur. J. Cardiovasc. Nur.|European Journal of Cardiovascular Nursing EJCN1|Eur. J. Clin. Nutr.|European Journal of Clinical Nutrition EJCP|Eur. J. Cancer Prev.|European Journal of Cancer Prevention EJCP1|Eur. J. Clin. Pharmacol.|European Journal of Clinical Pharmacology EJCRHC|Eur. J. Contracept. Reprod. Health Care|The European Journal of Contraception & Reproductive Health Care EJCS|Eur. J. Cardiothorac. Surg.=Eur. J. Cardio Thorac. Surg.|European Journal of Cardio-Thoracic Surgery EJD|Eur. J. Dermatol.|European Journal of Dermatology EJDE|Electron. J. Differ. Equ.|Electronic Journal of Differential Equations EJDE1|Eur. J. Dent. Educ.|European Journal of Dental Education EJDMP|Eur. J. Drug Metab. Pharmacokinet.=Eur. J. Drug Metab. Pharm.|European Journal of Drug Metabolism and Pharmacokinetics EJE|Eur. J. Endocrinol.=Eur. J. Endocrinology|European Journal of Endocrinology EJE1|Eur. J. Epidemiol.|European Journal of Epidemiology EJEM|Eur. J. Emerg. Med.|European Journal of Emergency Medicine EJGH|Eur. J. Gastroenterol. Hepatol.=Eur. J. Gastroen. Hepat.|European Journal of Gastroenterology & Hepatology EJGP|Eur. J. Gen. Pract.|European Journal of General Practice=The European Journal of General Practice EJH|Eur. J. Haematol.|European Journal of Haematology EJH1|Eur. J. Histochem.|European Journal of Histochemistry EJHE|Eur. J. Health Econ.|European Journal of Health Economics EJHF|Eur. J. Heart Fail.|European Journal of Heart Failure EJHG|Eur. J. Hum. Genet.=Eur. J. Human Genet.|European Journal of Human Genetics EJHS|Ethiop. J. Health Sci.|Ethiopian Journal of Health Sciences EJHS1|Eur. J. Haematol. Suppl.|European Journal of Haematology. Supplementum EJI|Eur. J. Immunol.|European Journal of Immunology EJIC|Eur. J. Inorg. Chem.|European Journal of Inorganic Chemistry EJIM|Eur. J. Intern. Med.|European Journal of Internal Medicine EJIS|Eur. J. Inf. Syst.=Eur. J. Inform. Syst.|European Journal of Information Systems EJLA|Electron. J. Linear Algebra|Electronic Journal of Linear Algebra EJLST|Eur. J. Lipid Sci. Technol.=Eur. J. Lipid Sci. Tech.|European Journal of Lipid Science and Technology EJMC|Eur. J. Med. Chem.|European Journal of Medicinal Chemistry EJMG|Eur. J. Med. Genet.|European Journal of Medical Genetics EJMR|Eur. J. Med. Res.|European Journal of Medical Research EJMS|Eur. J. Mass Spectrom.|European Journal of Mass Spectrometry EJN|Eur. J. Neurol.=Eur. J. Neurology|European Journal of Neurology EJN1|Eur. J. Neurosci.|European Journal of Neuroscience=The European Journal of Neuroscience EJN2|Eur. J. Nutr.|European Journal of Nutrition EJNMMI|Eur. J. Nucl. Med. Mol. Imaging=Eur. J. Nucl. Med. Mol. I.|European Journal of Nuclear Medicine and Molecular Imaging EJO|Eur. J. Ophthalmol.|European Journal of Ophthalmology EJO1|Eur. J. Orthod.=Eur. J. Orthodont.|European Journal of Orthodontics EJOC|European J. Org. Chem.=Eur. J. Org. Chem.|European Journal of Organic Chemistry EJOGRB|Eur. J. Obstet. Gynecol. Reprod. Biol.=Eur. J. Obstet. Gyn. Reprod. Biol.|European Journal of Obstetrics, Gynecology, and Reproductive Biology EJOI|Eur. J. Oral Implantol.=Eur. J. Oral Implant.|European Journal of Oral Implantology EJON|Eur. J. Oncol. Nurs.|European Journal of Oncology Nursing EJOR|Eur. J. Oper. Res.|European Journal of Operational Research EJOS|Eur. J. Oral Sci.|European Journal of Oral Sciences EJOST|Eur. J. Orthop. Surg. Traumatol.|European Journal of Orthopaedic Surgery & Traumatology: Orthopédie Traumatologie EJP|Electron. J. Probab.|Electronic Journal of Probability EJP1|Eur. J. Pain|European Journal of Pain EJP2|Eur. J. Pediatr.=Eur. J. Pediat.|European Journal of Pediatrics EJP3|Eur. J. Pharmacol.|European Journal of Pharmacology EJP4|Eur. J. Phys.|European Journal of Physics EJP5|Eur. J. Protistol.|European Journal of Protistology EJPB|Eur. J. Pharm. Biopharm.|European Journal of Pharmaceutics and Biopharmaceutics EJPC|Eur. J. Prev. Cardiol.|European Journal of Preventive Cardiology EJPD|Eur. J. Paediatr. Dent.|European Journal of Paediatric Dentistry EJPH|Eur. J. Public Health|European Journal of Public Health EJPN|Eur. J. Paediatr. Neurol.=Eur. J. Paediatr. Neuro.|European Journal of Paediatric Neurology EJPRD|Eur. J. Prosthodont. Restor. Dent.|The European Journal of Prosthodontics and Restorative Dentistry EJPRM|Eur. J. Phys. Rehabil. Med.=Eur. J. Phys. Rehab. Med.|European Journal of Physical and Rehabilitation Medicine EJPS|Eur. J. Pediatr. Surg.|European Journal of Pediatric Surgery EJPS1|Eur. J. Pharm. Sci.|European Journal of Pharmaceutical Sciences EJQTDE|Electron. J. Qual. Theory Differ. Equ.=Electron. J. Qual. Theory Differ.|Electronic Journal of Qualitative Theory of Differential Equations EJR|Eur. J. Radiol.|European Journal of Radiology EJS|Electron. J. Stat.|Electronic Journal of Statistics EJSS|Eur. J. Soil Sci.|European Journal of Soil Science EJSS1|Eur. J. Sport Sci.|European Journal of Sport Science EJTES|Eur. J. Trauma Emerg. Surg.=Eur. J. Trauma Emerg. S.|European Journal of Trauma and Emergency Surgery EJVES|Eur. J. Vasc. Endovasc. Surg.=Eur. J. Vasc. Endovasc.|European Journal of Vascular and Endovascular Surgery EL|Ecol. Lett.|Ecology Letters EL1|Econ. Lett.|Economics Letters EL2|Electron. Lett.|Electronics Letters ELR|Exp. Lung Res.|Experimental Lung Research ELS|Eng. Life Sci.|Engineering in Life Sciences EM|Ecol. Modell.=Ecol. Model.|Ecological Modelling EM1|Environ. Manage.|Environmental Management EM2|Environ. Microbiol.|Environmental Microbiology EM3|Exp. Math.|Experimental Mathematics EM4|Expo. Math.|Expositiones Mathematicae EMA|Emerg. Med. Australas.|Emergency Medicine Australasia EMA1|Environ. Monit. Assess.|Environmental Monitoring and Assessment EMBOJ0|EMBO J.|EMBO Journal EMBOMM|EMBO Mol. Med.|EMBO Molecular Medicine EMBOR|EMBO Rep.|EMBO Reports EMCNA|Emerg. Med. Clin. North Am.=Emerg. Med. Clin. N. Am.|Emergency Medicine Clinics of North America EMCNA1|Endocrinol. Metab. Clin. North Am.=Endocrinol. Metab. Clin. N. Amer.|Endocrinology and Metabolism Clinics of North America EMI|Emerg. Microbes Infect.=Emerg. Microbes Infec.|Emerging Microbes & Infections EMIDDT|Endocr. Metab. Immune Disord. Drug Targets=Endocr. Metab. Immune Disor. D. T.|Endocrine, Metabolic & Immune Disorders Drug Targets EMJ|Emerg. Med. J.|Emergency Medicine Journal EMM|Environ. Mol. Mutagen.|Environmental and Molecular Mutagenesis EMM1|Exp. Mol. Med.|Experimental & Molecular Medicine=Experimental and Molecular Medicine EMP|Emerg. Med. Pract.|Emergency Medicine Practice EMP1|Exp. Mol. Pathol.|Experimental and Molecular Pathology EMR|Environ. Microbiol. Rep.=Env. Microbiol. Rep.|Environmental Microbiology Reports EMS|Environ. Modell. Softw.|Environmental Modelling & Software EMT|Enzyme Microb. Technol.=Enzyme Microb. Tech.|Enzyme and Microbial Technology EN|Emerg. Nurse|Emergency Nurse: The Journal of the RCN Accident and Emergency Nursing Association EN1|Eur. Neurol.|European Neurology EN2|Eur. Neuropsychopharmacol.=Eur. Neuropsychopharm.|European Neuropsychopharmacology=European Neuropsychopharmacology: The Journal of the European College of Neuropsychopharmacology EN3|Exp. Neurol.|Experimental Neurology ENTCS|Electron. Notes Theor. Comput. Sci.|Electronic Notes in Theoretical Computer Science ENTJ|Ear Nose Throat J.|Ear, Nose, & Throat Journal EO|Exp. Oncol.|Experimental Oncology EOBT|Expert Opin. Biol. Ther.=Expert Opin. Biol. Th.|Expert Opinion on Biological Therapy EODD|Expert Opin. Drug Deliv.=Expert Opin. Drug Del.|Expert Opinion on Drug Delivery EODD1|Expert Opin. Drug Discov.=Expert Opin. Drug Dis.|Expert Opinion on Drug Discovery EODMT|Expert Opin. Drug Metab. Toxicol.=Expert Opin. Drug Metab. Toxico.|Expert Opinion on Drug Metabolism & Toxicology EODS|Expert Opin. Drug Saf.|Expert Opinion on Drug Safety EOED|Expert Opin. Emerg. Drugs=Expert Opin. Emerg. Dr.|Expert Opinion on Emerging Drugs EOID|Expert Opin. Investig. Drugs=Expert Opin. Inv. Drug.|Expert Opinion on Investigational Drugs EOP|Expert Opin. Pharmacother.=Expert Opin. Pharmaco.|Expert Opinion on Pharmacotherapy EOTP|Expert Opin. Ther. Pat.=Expert Opin. Ther. Patents|Expert Opinion on Therapeutic Patents EOTT|Expert Opin. Ther. Targets=Expert Opin. Ther. Tar.|Expert Opinion on Therapeutic Targets EP|E Polymers|E-Polymers EP1|Endocr. Pathol.|Endocrine Pathology EP2|Endocr. Pract.|Endocrine Practice EP3|Endokrynol. Pol.|Endokrynologia Polska EP4|Environ. Pollut.|Environmental Pollution EP5|Epidemiol. Prev.|Epidemiologia & Prevenzione=Epidemiologia e Prevenzione EP6|Eur. Psychiatry|European Psychiatry: The Journal of the Association of European Psychiatrists EP7|Evol. Psychol.=Evol. Psychol. US|Evolutionary Psychology=Evolutionary Psychology: An International Journal of Evolutionary Approaches to Psychology and Behavior EP8|Exp. Parasitol.|Experimental Parasitology EP9|Exp. Physiol.|Experimental Physiology EP10|Exp. Psychol.|Experimental Psychology EPC|Educ. Prim. Care|Education for Primary Care EPJ|Eur. Polym. J.|European Polymer Journal EPJA|Eur. Phys. J. A|European Physical Journal A EPJAP|Eur. Phys. J. Appl. Phys.|European Physical Journal-Applied Physics EPJB|Eur. Phys. J. B|European Physical Journal B=The European Physical Journal. B EPJC|Eur. Phys. J. C|European Physical Journal C EPJD|Eur. Phys. J. D|European Physical Journal D EPJE|Eur. Phys. J. E|European Physical Journal E EPJESM|Eur. Phys. J. E Soft Matter|The European Physical Journal. E, Soft Matter EPJH|Eur. Phys. J. H|European Physical Journal H EPJP|Eur. Phys. J. Plus|European Physical Journal Plus EPJQT|EPJ Quantum Technol.|EPJ Quantum Technology EPJST|Eur. Phys. J. Spec. Top.|European Physical Journal-Special Topics=The European Physical Journal. Special Topics EPLEL|EPL Europhys Lett|EPL EPM|Educ. Psychol. Meas.|Educational and Psychological Measurement EPMAJ0|EPMA J.|EPMA Journal EPP|Eval. Program Plann.|Evaluation and Program Planning EPS|Epidemiol. Psychiatr. Sci.=Epidemiol. Psych. Sci.|Epidemiology and Psychiatric Sciences EPSL|Earth Planet. Sci. Lett.=Earth Planet. Sc. Lett.|Earth and Planetary Science Letters ER|Emerg. Radiol.|Emergency Radiology ER1|Endocr. Regul.|Endocrine Regulations ER2|Endocr. Res.=Endocrine Res.|Endocrine Research ER3|Endocr. Rev.=Endocrine Rev.|Endocrine Reviews ER4|Environ. Res.|Environmental Research ER5|Epidemiol. Rev.=Epidemiologic Rev.|Epidemiologic Reviews ER6|Epilepsy Res.|Epilepsy Research ER7|Eur. Radiol.=European Radiol.|European Radiology ER8|Eval. Rev.=Evaluation Rev.|Evaluation Review ERAIT|Expert Rev. Anti Infect. Ther.=Expert Rev. Anti Infe.|Expert Review of Anti-Infective Therapy ERAMS|Electron. Res. Announc. Math. Sci.|Electronic Research Announcements in Mathematical Sciences ERAT|Expert Rev. Anticancer Ther.=Expert Rev. Anticanc.|Expert Review of Anticancer Therapy ERC|Endocr. Relat. Cancer=Endocr. Related Cancer|Endocrine-Related Cancer ERCI|Expert Rev. Clin. Immunol.=Expert Rev. Clin. Immu.|Expert Review of Clinical Immunology ERCP|Expert Rev. Clin. Pharmacol.=Expert Rev. Clin. Phar.|Expert Review of Clinical Pharmacology ERCT|Expert Rev. Cardiovasc. Ther.|Expert Review of Cardiovascular Therapy EREM|Expert Rev. Endocrinol. Metab.|Expert Review of Endocrinology & Metabolism ERGH|Expert Rev. Gastroenterol. Hepatol.=Expert Rev. Gastroenterol. Hepa.|Expert Review of Gastroenterology & Hepatology ERH|Expert Rev. Hematol.|Expert Review of Hematology ERJ|Eur. Respir. J.=Eur. Resp. J.|European Respiratory Journal=The European Respiratory Journal ERMD|Expert Rev. Med. Devices=Expert Rev. Med. Devic.|Expert Review of Medical Devices ERMD1|Expert Rev. Mol. Diagn.|Expert Review of Molecular Diagnostics ERMM|Expert Rev. Mol. Med.|Expert Reviews in Molecular Medicine ERMPS|Eur. Rev. Med. Pharmacol. Sci.=Eur. Rev. Med. Pharmaco.|European Review for Medical and Pharmacological Sciences ERN|Expert Rev. Neurother.|Expert Review of Neurotherapeutics ERP|Expert Rev. Proteomics=Expert Rev. Proteomic.|Expert Review of Proteomics ERPOR|Expert Rev. Pharmacoecon. Outcomes Res.=Expert Rev. Pharmacoecon. Outco.|Expert Review of Pharmacoeconomics & Outcomes Research ERR|Eur. Respir. Rev.|European Respiratory Review ERRM|Expert Rev. Respir. Med.=Exprt Rev. Respir. Med.|Expert Review of Respiratory Medicine ERV|Expert Rev. Vaccines|Expert Review of Vaccines ES|Entropy Switz|Entropy ES1|Expert Systems|Expert Systems ESA|Expert Syst. Appl.|Expert Systems with Applications ESAIMCOCV|ESAIM Control Optim. Calc. Var.|ESAIM-Control Optimisation and Calculus of Variations ESAIMMMNA|ESAIM Math. Model. Numer. Anal.|ESAIM-Mathematical Modelling and Numerical Analysis-Modelisation Mathematique et Analyse Numerique ESAIMPS|ESAIM Probab. Stat.|ESAIM-Probability and Statistics ESCHF|ESC Heart Fail.|ESC Heart Failure ESE|Empir. Softw. Eng.|Empirical Software Engineering ESJ|Eur. Spine J.|European Spine Journal ESPI|Environ. Sci. Process. Impacts=Environ. Sci. Proc. Imp.|Environmental Science. Processes & Impacts ESPRI|Environ. Sci. Pollut. Res. Int.|Environmental Science and Pollution Research International ESR|Eur. Surg. Res.|European Surgical Research=European Surgical Research. Europäische Chirurgische Forschung. Recherches Chirurgicales Européennes ESS|Epidemiol. Serv. Saude|Epidemiologia e Serviços de Saúde: Revista do Sistema Unico de Saúde do Brasil ESSR|Exerc. Sport Sci. Rev.|Exercise and Sport Sciences Reviews EST|Environ. Sci. Technol.|Environmental Science & Technology=Environmental Science and Technology ET|Economet. Theory|Econometric Theory ET1|Environ. Technol.|Environmental Technology ET2|Environ. Toxicol.|Environmental Toxicology ETC|Environ. Toxicol. Chem.|Environmental Toxicology and Chemistry ETDS|Ergod. Theor. Dyn. Syst.|Ergodic Theory and Dynamical Systems ETNA|Electron. Trans. Numer. Anal.|Electronic Transactions on Numerical Analysis ETP|Environ. Toxicol. Pharmacol.=Environ. Toxicol. Phar.|Environmental Toxicology and Pharmacology ETRIJ0|ETRI J.|ETRI Journal EU|Eur. Urol.|European Urology EUF|Eur. Urol. Focus|European Urology Focus EURASIPJWCN|EURASIP J. Wirel. Commun. Netw.=EURASIP J. Wirel. Comm.|EURASIP Journal on Wireless Communications and Networking EUS|Electrocatalysis US|Electrocatalysis EVJ|Equine Vet. J.|Equine Veterinary Journal EWD|Eat. Weight Disord.|Eating and Weight Disorders EXPRESSPL|EXPRESS Polym. Lett.|EXPRESS Polymer Letters F|Ferroelectrics|Ferroelectrics F1|Filomat|Filomat F2|Fitoterapia|Fitoterapia F3|Fly|Fly F4|Fractals|Fractals-Complex Geometry Patterns and Scaling in Nature and Society F5|Fuel|Fuel FAAET|Funct. Anal. Appl. Engl. Tr.|Functional Analysis and its Applications FAC|Foot Ankle Clin.|Foot and Ankle Clinics FAC1|Form. Asp. Comput.|Formal Aspects of Computing FACPACACERA|Food Addit. Contam. Part A Chem. Anal. Control Expo. Risk Assess.|Food Additives & Contaminants Part A: Chemistry, Analysis, Control, Exposure & Risk Assessment FACPBS|Food Addit. Contam. Part B Surveill.=Food Addit. Contam. Part B Sur.|Food Additives & Contaminants Part B: Surveillance FAI|Foot Ankle Int.|Foot & Ankle International FAS|Foot Ankle Spec.|Foot & Ankle Specialist FAS1|Foot Ankle Surg.|Foot and Ankle Surgery FASEBJ0|FASEB J.|FASEB Journal FB|Front. Biosci.=Front. Biosci. Landmrk|Frontiers in Bioscience-Landmark=Frontiers in Bioscience: A Journal and Virtual Library FB1|Fungal Biol.=Fungal Biol. UK|Fungal Biology FBCNS|Fluids Barriers CNS|Fluids and Barriers of the CNS FBK|Folia Biol. Krakow|Folia Biologica-Krakow FBP|Folia Biol. Prague|Folia Biologica FBR|Fungal Biol. Rev.|Fungal Biology Reviews FBS|Few Body Syst.|Few-Body Systems FBT|Food Bioproc. Tech.=Food Bioprocess Technol.|Food and Bioprocess Technology FC|Fam. Cancer|Familial Cancer FC1|Food Chem.|Food Chemistry FC2|Food Control|Food Control FC3|Found. Chem.|Foundations of Chemistry FC4|Front. Chem.|Frontiers in Chemistry FC5|Fuel Cells|Fuel Cells FC6|Future Cardiol.|Future Cardiology FCAA|Fract. Calc. Appl. Anal.|Fractional Calculus & Applied Analysis=Fractional Calculus and Applied Analysis FCET|Fibre Chem. Engl. Tr.|Fibre Chemistry FCH|Fam. Community Health=Family Community Health|Family & Community Health FCIM|Front. Cell. Infect. Microbiol.=Front. Cell. Infect. Mi.|Frontiers in Cellular and Infection Microbiology FCM|Found. Comput. Math.|Foundations of Computational Mathematics FCP|Fundam. Clin. Pharmacol.=Fund. Clin. Pharmacol.|Fundamental & Clinical Pharmacology FCSC|Front. Comput. Sci. Chi|Frontiers of Computer Science FCSE|Front. Chem. Sci. Eng.|Frontiers of Chemical Science and Engineering FCT|Food Chem. Toxicol.|Food and Chemical Toxicology FD|Faraday Discuss.|Faraday Discussions FD1|Fold. Des.|Folding & Design=Folding and Design FDT|Fetal Diagn. Ther.|Fetal Diagnosis and Therapy FEBSJ0|FEBS J.|FEBS Journal FEBSL|FEBS Lett.|FEBS Letters FEBSOB|FEBS Open Bio|FEBS Open Bio FED|Fusion Eng. Des.|Fusion Engineering and Design FEMSME|FEMS Microbiol. Ecol.|FEMS Microbiology Ecology FEMSML|FEMS Microbiol. Lett.|FEMS Microbiology Letters FEMSMR|FEMS Microbiol. Rev.|FEMS Microbiology Review=FEMS Microbiology Reviews FEMSYR|FEMS Yeast Res.|FEMS Yeast Research FESI|Funkc. Ekvacioj Ser. Int.|Funkcialaj Ekvacioj-Serio Internacia FEV|Food Environ. Virol.|Food and Environmental Virology FF|Food Funct.|Food & Function FFTA|Finite Fields Their Appl.|Finite Fields and their Applications FG|Front. Genet.|Frontiers in Genetics FGB|Fungal Genet. Biol.|Fungal Genetics and Biology=Fungal Genetics and Biology: FG & B FGCS|Future Gener. Comput. Syst.=Future Gener. Comp. Sy.|Future Generations Computer Systems=Future Generation Computer Systems: The International Journal of Escience FH|Farm. Hosp.|Farmacia Hospitalaria FHC|Folia Histochem. Cytobiol.=Folia Histochem. Cyto.|Folia Histochemica et Cytobiologica FHEP|Forum Health Econ. Policy|Forum for Health Economics & Policy FHR|Front. Horm. Res.|Frontiers of Hormone Research FI|Front. Immunol.|Frontiers in Immunology FI1|Fundam. Inform.=Fund. Inform.|Fundamenta Informaticae FIG|Funct. Integr. Genomics=Funct. Integr. Genomic.|Functional & Integrative Genomics=Functional and Integrative Genomics FIO|Fiber Integrated Opt.|Fiber and Integrated Optics FITEE|Front. Inform. Technol. Elect. En.|Frontiers of Information Technology & Electronic Engineering FJAC|Fresenius J. Anal. Chem.|Fresenius' Journal of Analytical Chemistry FJMS|Fukushima J. Med. Sci.|Fukushima Journal of Medical Science FLS|Ferroelectrics Lett. Sect.|Ferroelectrics Letters Section FM|Fam. Med.|Family Medicine FM1|Food Microbiol.|Food Microbiology FM2|Forum Math.|Forum Mathematicum FM3|Front. Med.=Front. Med. Prc|Frontiers of Medicine FM4|Fund. Math.|Fundamenta Mathematicae FM5|Future Microbiol.|Future Microbiology FMC|Folia Med. Cracov.|Folia Medica Cracoviensia FMC1|Front. Math. China|Frontiers of Mathematics in China=Frontiers of Mathematics in China: Selected Papers From Chinese Universities FMC2|Future Med. Chem.|Future Medicinal Chemistry FMSD|Form. Methods Syst. Des.=Form. Method. Syst. Des.|Formal Methods in System Design FN|Folia Neuropathol.|Folia Neuropathologica FN1|Front. Neuroendocrinol.=Front. Neuroendocrin.|Frontiers in Neuroendocrinology FN2|Front. Neuroeng.|Frontiers in Neuroengineering FN3|Front. Neurorobot.=Front. Neurorobotics|Frontiers in Neurorobotics FN4|Funct. Neurol.|Functional Neurology FNB|Food Nutr. Bull.|Food and Nutrition Bulletin FNC|Front. Neural Circuits=Front. Neural Circuit.|Frontiers in Neural Circuits FNCN|Fuller. Nanotub. Carbon Nanostr.|Fullerenes Nanotubes and Carbon Nanostructures FNL|Fluct. Noise Lett.|Fluctuation and Noise Letters FNN|Front. Neurol. Neurosci.|Frontiers of Neurology and Neuroscience FNP|Fortschr. Neurol. Psychiatr.=Fortschr. Neurol. Psychiat.|Fortschritte Der Neurologie-Psychiatrie FO|Future Oncol.|Future Oncology FOB|Front. Oral Biol.|Frontiers of Oral Biology FP|Fam. Pract.|Family Practice FP1|Fam. Process|Family Process FP2|Folia Parasitol.=Folia Parasit.|Folia Parasitologica FP3|Folia Primatol.|Folia Primatologica=Folia Primatologica: International Journal of Primatology FP4|Fortschr. Phys.|Fortschritte Der Physik-Progress of Physics FP5|Found. Phys.|Foundations of Physics FP6|Front. Phys.=Front. Phys. Beijing|Frontiers of Physics FP7|Front. Physiol.|Frontiers in Physiology FPB|Fish Physiol. Biochem.|Fish Physiology and Biochemistry FPD|Foodborne Pathog. Dis.|Foodborne Pathogens and Disease FPE|Fluid Phase Equilib.|Fluid Phase Equilibria FPE1|FP Essent.|FP Essentials FPL|Folia Phoniatr. Logop.=Folia Phoniatr. Logopaed.|Folia Phoniatrica et Logopaedica FPM|Fam. Pract. Manag.|Family Practice Management FPMRS|Female Pelvic Med. Reconstr. Surg.|Female Pelvic Medicine & Reconstructive Surgery FPP|Fetal Pediatr. Pathol.|Fetal and Pediatric Pathology FPS|Facial Plast. Surg.|Facial Plastic Surgery FPSCNA|Facial Plast. Surg. Clin. North Am.=Facial Plast. Surg. Clin. N. Am.|Facial Plastic Surgery Clinics of North America FPT|Fuel Process. Technol.|Fuel Processing Technology FPTR|Fixed Point Theor. Ro|Fixed Point Theory FR|Fed. Regist.|Federal Register FRBM|Free Radic. Biol. Med.|Free Radical Biology & Medicine FRBM1|Free Radical Biol. Med.|Free Radical Biology and Medicine FRI|Food Res. Int.|Food Research International FRR|Free Radic. Res.=Free Radical Res.|Free Radical Research FRTO|Front. Radiat. Ther. Oncol.|Frontiers of Radiation Therapy and Oncology FS|Fertil. Steril.=Fert. Steril.|Fertility and Sterility FS1|Filtr. Separat.|Filtration & Separation=Filtration and Separation FSH|Fam. Syst. Health|Families Systems & Health=Families, Systems & Health: The Journal of Collaborative Family Healthcare FSI|Fish Shellfish Immunol.=Fish Shellfish Immun.|Fish & Shellfish Immunology FSI1|Forensic Sci. Int.|Forensic Science International FSIG|Forensic Sci. Int. Genet.=Forensic Sci. Int. Gen.|Forensic Science International. Genetics FSMP|Forensic Sci. Med. Pathol.=Forensic Sci. Med. Pat.|Forensic Science, Medicine, and Pathology FSS|Fuzzy Set. System.|Fuzzy Sets and Systems FTIR|Found. Trends Inf. Retr.|Foundations and Trends in Information Retrieval FYXZZ|Fa Yi Xue Za Zhi|Fa Yi Xue Za Zhi G|Gastroenterology|Gastroenterology G1|Gene|Gene G2|Genesis|Genesis: The Journal of Genetics and Development G3|Genetica|Genetica G4|Genetics|Genetics G5|Genome|Genome G6|Genomics|Genomics G7|Geobiology|Geobiology G8|Geoderma|Geoderma G9|Gerodontology|Gerodontology G10|Gerontologist|The Gerontologist G11|Gerontology|Gerontology G12|Geroscience|Geroscience G13|Gesundheitswesen|Das Gesundheitswesen G14|Gigascience|Gigascience G15|Glia|Glia G16|Glycobiology|Glycobiology G17|Gut|Gut GAT|Gene Anal. Tech.|Gene Analysis Techniques GB|Genes Basel|Genes GB1|Genome Biol.|Genome Biology GBB|Genes Brain Behav.|Genes, Brain, and Behavior GBE|Genome Biol. Evol.|Genome Biology and Evolution GC|G. Chir.|Il Giornale di Chirurgia GC1|Gastric Cancer|Gastric Cancer GC2|Genes Cells|Genes to Cells=Genes to Cells: Devoted to Molecular & Cellular Mechanisms GC3|Graph. Combinator.|Graphs and Combinatorics GCB|Glob. Chang. Biol.=Global Change Biol.|Global Change Biology GCC|Genes Chromosomes Cancer=Gene. Chromosome. Cancer|Genes, Chromosomes & Cancer GCE|Gen. Comp. Endocrinol.=Gen. Comp. Endocr.|General and Comparative Endocrinology GCLR|Green Chem. Lett. Rev.|Green Chemistry Letters and Reviews GCNA|Gastroenterol. Clin. North Am.=Gastroenterol. Clin. N. Amer.|Gastroenterology Clinics of North America GD|Gen. Dent.|General Dentistry GD1|Genes Dev.=Gene. Develop.|Genes & Development GD2|Geometriae Dedicata|Geometriae Dedicata GE|Gastrointest. Endosc.=Gastrointest. Endoscop.|Gastrointestinal Endoscopy GE1|Gene Expr.|Gene Expression GE2|Genet. Epidemiol.|Genetic Epidemiology GE3|Gynecol. Endocrinol.|Gynecological Endocrinology GECNA|Gastrointest. Endosc. Clin. N. Am.|Gastrointestinal Endoscopy Clinics of North America GEP|Gene Expr. Patterns|Gene Expression Patterns GF|Growth Factors|Growth Factors GFA|Geom. Funct. Anal.|Geometric and Functional Analysis GG|Genes Genomics=Genes Genom.|Genes & Genomics GGD|Group. Geom. Dynam.|Groups Geometry and Dynamics GGE|Gerontol. Geriatr. Educ.|Gerontology & Geriatrics Education GGGG|G3 Genes Genomes Genet.|G3-Genes Genomes Genetics GGI|Geriatr. Gerontol. Int.|Geriatrics & Gerontology International GGS|Genes Genet. Syst.|Genes & Genetic Systems GH|Gastroenterol. Hepatol.=Gastroent. Hepat. Barc.|Gastroenterología y Hepatología GH1|Geospat. Health|Geospatial Health GH2|Glob. Heart|Global Heart GH3|Global. Health=Globalization Health|Globalization and Health GHA|Glob. Health Action|Global Health Action GHIGFR|Growth Horm. IGF Res.|Growth Hormone & IGF Research GHJ|Games Health J.|Games for Health Journal GHP|Gen. Hosp. Psychiatry=Gen. Hosp. Psychiat.|General Hospital Psychiatry GHP1|Glob. Health Promot.|Global Health Promotion GHSP|Glob. Health Sci. Pract.|Global Health, Science and Practice GI|Genes Immun.|Genes and Immunity GIDV|G. Ital. Dermatol. Venereol.=Giorn. Ital. Dermat. V.|Giornale Italiano di Dermatologia e Venereologia GIN|G. Ital. Nefrol.|Giornale Italiano di Nefrologia GJ|Glycoconj. J.=Glycoconjugate J.|Glycoconjugate Journal GJI|Geophys. J. Int.|Geophysical Journal International GJO|Gulf J. Oncolog.|The Gulf Journal of Oncology GL|Gut Liver|Gut and Liver GM|Genet. Med.|Genetics in Medicine GM1|Genome Med.|Genome Medicine GM2|Glas. Mat.|Glasnik Matematicki GM3|Graph. Models|Graphical Models GM4|Gut Microbes|Gut Microbes GMB|Genet. Mol. Biol.|Genetics and Molecular Biology GMCF|GM Crops Food=GM Crop. Food|GM Crops & Food=GM Crops & Food-Biotechnology in Agriculture and the Food Chain GMD|Geosci. Model Dev.|Geoscientific Model Development GMJ|Georgian Math. J.|Georgian Mathematical Journal GMJ1|Ghana Med. J.|Ghana Medical Journal GMJ2|Glasgow Math. J.|Glasgow Mathematical Journal GMM|Gac. Med. Mex.|Gaceta Médica de México GMN|Georgian Med. News|Georgian Medical News GMR|Genet. Mol. Res.|Genetics and Molecular Research GMSJME|GMS J. Med. Educ.|GMS Journal for Medical Education GN|Gastroenterol. Nurs.|Gastroenterology Nursing GN1|Genes Nutr.|Genes & Nutrition=Genes and Nutrition GN2|Geriatr. Nurs.|Geriatric Nursing GO|Gynecol. Oncol.|Gynecologic Oncology GOFS|Gynecol. Obstet. Fertil. Senol.=Gynecol. Obst. Fert. Se.|Gynécologie, Obstétrique, Fertilité & Sénologie GOI|Gynecol. Obstet. Invest.=Gynecol. Obstet. Inves.|Gynecologic and Obstetric Investigation GP|Gait Posture|Gait & Posture GP1|Ginekol. Pol.|Ginekologia Polska GPB|Gen. Physiol. Biophys.|General Physiology and Biophysics GPB1|Genomics Proteomics Bioinformatics=Genom. Proteom. Bioinform.|Genomics, Proteomics & Bioinformatics GPEM|Genet. Program. Evolvable Mach.=Genet. Program. Evol. Mach.|Genetic Programming and Evolvable Machines GPH|Glob. Public Health|Global Public Health GPNV|Geriatr. Psychol. Neuropsychiatr. Vieil.|Gériatrie et Psychologie Neuropsychiatrie du Vieillissement GPS|Green Process. Synth.|Green Processing and Synthesis GR|Genet. Res.|Genetics Research=Genetical Research GR1|Genome Res.|Genome Research GRG|Gen. Relativ. Gravit.=Gen. Relat. Gravit.|General Relativity and Gravitation GRL|Geophys. Res. Lett.|Geophysical Research Letters GS|Gac. Sanit.|Gaceta Sanitaria GSE|Genet. Sel. Evol.|Genetics, Selection, Evolution=Genetique, Selection, Evolution GT|Gene Ther.|Gene Therapy GT1|Geom. Topol.|Geometry & Topology GTCS|Gen. Thorac. Cardiovasc. Surg.=Gen. Thorac. Cardiovas.|General Thoracic and Cardiovascular Surgery GTKR|Gan To Kagaku Ryoho|Gan to Kagaku Ryoho. Cancer & Chemotherapy GTMB|Genet. Test. Mol. Biomarkers=Genet. Test. Mol. Biomark.|Genetic Testing and Molecular Biomarkers GW|Ground Water=Groundwater|Ground Water H|Haematologica|Haematologica H1|Haemophilia|Haemophilia H2|Hamostaseologie|Hämostaseologie H3|Hautarzt|Der Hautarzt: Zeitschrift für Dermatologie, Venerologie, und Verwandte Gebiete H4|Headache|Headache H5|Heart|Heart H6|Helicobacter|Helicobacter H7|Hematology|Hematology H8|Hemoglobin|Hemoglobin H9|Hepatology|Hepatology H10|Hereditas|Hereditas H11|Heredity|Heredity H12|Hernia|Hernia: The Journal of Hernias and Abdominal Wall Surgery H13|Herz|Herz H14|Heterocycles|Heterocycles H15|Hippocampus|Hippocampus H16|Histopathology|Histopathology H17|Holzforschung|Holzforschung H18|Homeopathy|Homeopathy: The Journal of the Faculty of Homeopathy H19|Homo|Homo: Journal of Comparative Human Biology=Homo: Internationale Zeitschrift für Die Vergleichende Forschung Am Menschen H20|Hypertension|Hypertension HA|Harmful Algae|Harmful Algae HA1|Heart Advis.|Heart Advisor HA2|Hum. Antibodies|Human Antibodies HAMB|High Alt. Med. Biol.|High Altitude Medicine & Biology HB|Hist. Biol.|Historical Biology HB1|Horm. Behav.=Hormone. Behav.|Hormones and Behavior HB2|Hum. Biol.|Human Biology HBM|Hum. Brain Mapp.|Human Brain Mapping HBPCP|High Blood Press. Cardiovasc. Prev.|High Blood Pressure & Cardiovascular Prevention HC|Hand Clin.|Hand Clinics HC1|Health Commun.|Health Communication HC2|Heteroatom Chem.|Heteroatom Chemistry HC3|Heterocycl. Comm.=Heterocycl. Commun.|Heterocyclic Communications HC4|Horm. Cancer=Horm. Cancer US|Hormones & Cancer HC5|Hum. Cell|Human Cell HCA|Health Care Anal.|Health Care Analysis HCA1|Helv. Chim. Acta|Helvetica Chimica Acta HCB|Histochem. Cell Biol.=Histochemistry Cell Biol.|Histochemistry and Cell Biology HCCIS|Hum. Centric Comput. Inf. Sci.|Human-Centric Computing and Information Sciences HCI|Human Computer Interaction|Human-Computer Interaction HCMR|Health Care Manage. Rev.=Health Care Manage. R.|Health Care Management Review HCMS|Health Care Manag. Sci.=Health Care Manag. Sc.|Health Care Management Science HCN|Handb. Clin. Neurol.|Handbook of Clinical Neurology HCR|Hastings Cent. Rep.=Hastings Center Report|The Hastings Center Report HCSM|Hist. Cienc. Saude Manguinhos|História, Ciências, Saúde: Manguinhos HCWI|Health Care Women Int.=Health Care Women In.|Health Care for Women International HE|Health Econ.|Health Economics HE1|Health Expect.|Health Expectations=Health Expectations: An International Journal of Public Participation in Health Care and Health Policy HE2|Herzschrittmacherther. Elektrophysiol.|Herzschrittmachertherapie & Elektrophysiologie HEB|Health Educ. Behav.|Health Education & Behavior HECET|High Energ. Chem. Engl. Tr.|High Energy Chemistry HECF|HEC Forum|HEC Forum: An Interdisciplinary Journal on Hospitals' Ethical and Legal Issues HEDP|High Energy Density Phys.|High Energy Density Physics HEP|Handb. Exp. Pharmacol.|Handbook of Experimental Pharmacology HEPL|Health Econ. Policy Law=Health Econ. Policy L.|Health Economics, Policy, and Law HER|Health Educ. Res.|Health Education Research HET|Hum. Exp. Toxicol.|Human & Experimental Toxicology HF|Hum. Factors|Human Factors HFC|Heart Fail. Clin.|Heart Failure Clinics HFM|Head Face Med.=Head Fac. Med.|Head & Face Medicine HFR|Heart Fail. Rev.|Heart Failure Reviews HG|Hum. Genet.|Human Genetics HG1|Hum. Genomics|Human Genomics HGT|Hum. Gene Ther.|Human Gene Therapy HGTCD|Hum. Gene Ther. Clin. Dev.=Hum. Gene Ther. Cl. Dev.|Human Gene Therapy. Clinical Development HGTM|Hum. Gene Ther. Methods=Hum. Gene Ther. Method.|Human Gene Therapy Methods HH|Histol. Histopathol.|Histology and Histopathology HH1|Hum. Hered.|Human Heredity HHA|Homol. Homotopy Appl.|Homology Homotopy and Applications HHCI|Hisp. Health Care Int.|Hispanic Health Care International HHCSQ|Home Health Care Serv. Q.|Home Health Care Services Quarterly HHN|Home Healthc. Now|Home Healthcare Now HHR|Health Hum. Rights|Health and Human Rights HI|Hem. Ind.|Hemijska Industrija HI1|Hemodial. Int.|Hemodialysis International=Hemodialysis International. International Symposium on Home Hemodialysis HI2|Hepatol. Int.|Hepatology International HI3|Hip Int.|Hip International=Hip International: The Journal of Clinical and Experimental Research on Hip Pathology and Therapy HI4|Hum. Immunol.|Human Immunology HIJ|Health Informatics J.=Health Inform. J.|Health Informatics Journal HILJ|Health Info. Libr. J.|Health Information and Libraries Journal HIM|Health Inf. Manag.|Health Information Management: Journal of the Health Information Management Association of Australia HIVCT|HIV Clin. Trials|HIV Clinical Trials HIVM|HIV Med.|HIV Medicine HJM|Houston J. Math.|Houston Journal of Mathematics HJMPH|Hawaii J. Med. Public Health|Hawai'i Journal of Medicine & Public Health=Hawai'i Journal of Medicine & Public Health: A Journal of Asia Pacific Medicine & Public Health HJMS|Hacet. J. Math. Stat.|Hacettepe Journal of Mathematics and Statistics HJNM|Hell. J. Nucl. Med.|Hellenic Journal of Nuclear Medicine HK|Hinyokika Kiyo|Hinyokika Kiyo. Acta Urologica Japonica HL|Heart Lung|Heart & Lung=Heart & Lung: The Journal of Critical Care HLA0|HLA|HLA HLC|Heart Lung Circ.|Heart, Lung & Circulation=Heart Lung and Circulation HLZZ|Hu Li Za Zhi|Hu Li Za Zhi the Journal of Nursing HM|Hist. Math.|Historia Mathematica HM1|Hum. Mutat.|Human Mutation HMBCI|Horm. Mol. Biol. Clin. Investig.|Hormone Molecular Biology and Clinical Investigation HMF|Healthc. Manage. Forum|Healthcare Management Forum HMG|Hum. Mol. Genet.|Human Molecular Genetics HMJ|Hiroshima Math. J.|Hiroshima Mathematical Journal HMJ1|Hokkaido Math. J.|Hokkaido Mathematical Journal HMPC|Handchir. Mikrochir. Plast. Chir.|Handchirurgie Mikrochirurgie Plastische Chirurgie HMQ|Health Mark. Q.|Health Marketing Quarterly HMR|Hormone Metab. Res.|Hormone and Metabolic Research HMS|Hum. Mov. Sci.=Hum. Movement Sci.|Human Movement Science HN|Head Neck|Head & Neck HNP|Head Neck Pathol.|Head and Neck Pathology HNP1|Holist. Nurs. Pract.|Holistic Nursing Practice HO|Hematol. Oncol.|Hematological Oncology HP|Health Phys.|Health Physics HP1|Health Place|Health & Place HP2|Health Policy|Health Policy HP3|Health Psychol.|Health Psychology HP4|Healthc. Pap|Healthcarepapers HP5|Hist. Psychiatry=Hist. Psychiatr.|History of Psychiatry HP6|Hist. Psychol.|History of Psychology HP7|Hosp. Pediatr.|Hospital Pediatrics HP8|Hum. Pathol.|Human Pathology HP9|Hum. Psychopharmacol.|Human Psychopharmacology HP10|Hydrol. Process.|Hydrological Processes HP11|Hypertens. Pregnancy|Hypertension in Pregnancy HPCDPC|Health Promot. Chronic Dis. Prev. Can.=Health Promot. Chronic Dis. Pre.|Health Promotion and Chronic Disease Prevention in Canada: Research, Policy and Practice HPI|Health Promot. Int.=Health Promot. International|Health Promotion International HPJA|Health Promot. J. Austr.=Health Promot. J. Aust.|Health Promotion Journal of Australia HPLS|Hist. Philos. Life Sci.=Hist. Phil. Life Sci.|History and Philosophy of the Life Sciences HPLSE|High Power Laser Sci. Eng.|High Power Laser Science and Engineering HPP|Health Policy Plan.=Health Policy Plann.|Health Policy and Planning HPP1|Health Promot. Pract.|Health Promotion Practice HPP2|High Perform. Polymers|High Performance Polymers HPR|Health Psychol. Rev.|Health Psychology Review HPR1|High Press. Res.=High Pressure Res.|High Pressure Research HQ|Healthc. Q.|Healthcare Quarterly HQLO|Health Qual. Life Outcomes=Health Qual. Life Out.|Health and Quality of Life Outcomes HR|Health Rep.|Health Reports HR1|Hear. Res.=Hearing Res.|Hearing Research HR2|Heart Rhythm|Heart Rhythm HR3|Hum. Reprod.|Human Reproduction HR4|Hypertens. Res.|Hypertension Research HRH|Hum. Resour. Health|Human Resources for Health HRJ|Harm Reduct. J.|Harm Reduction Journal HRP|Harv. Rev. Psychiatry=Harvard Rev. Psychiatr.|Harvard Review of Psychiatry HRP1|Horm. Res. Paediatr.=Horm. Res. Paediat.|Hormone Research in Pædiatrics=Hormone Research in Paediatrics HRPS|Health Res. Policy Syst.=Health Res. Policy Sy.|Health Research Policy and Systems HRU|Hum. Reprod. Update|Human Reproduction Update HRV|Hipertens. Riesgo Vasc.|Hipertensión y Riesgo Vascular HS|Health Secur.|Health Security HS1|Hist. Sci.|History of Science=History of Science: An Annual Review of Literature, Research and Teaching HSF|Heart Surg. Forum|Heart Surgery Forum=The Heart Surgery Forum HSMR|Health Serv. Manage. Res.|Health Services Management Research HSR|Hand Surg. Rehabil.|Hand Surgery & Rehabilitation HSR1|Health Serv. Res.|Health Services Research HSR2|Health Syst. Reform|Health Systems and Reform HST|Health Syst. Transit.|Health Systems in Transition HT|Hosp. Top.|Hospital Topics HTA|Health Technol. Assess.=Health Technol. Asses.|Health Technology Assessment HTET|High Temp. Engl. Tr.|High Temperature HV|Heart Vessels|Heart and Vessels HVI|Hum. Vaccin. Immunother.=Hum. Vaccines Immunother.|Human Vaccines & Immunotherapeutics I|Immunity|Immunity I1|Immunobiology|Immunobiology I2|Immunogenetics|Immunogenetics I3|Immunohematology|Immunohematology I4|Immunology|Immunology I5|Immunomethods|Immunomethods I6|Immunotherapy=Immunotherapy UK|Immunotherapy I7|Infection|Infection I8|Inflammation|Inflammation I9|Inflammopharmacology|Inflammopharmacology I10|Injury=Injury Int. J. Care Injured|Injury-International Journal of the Care of the Injured I11|Inquiry=Inquiry Interdiscipl. J. Philos.|Inquiry-An Interdisciplinary Journal of Philosophy=Inquiry: A Journal of Medical Care Organization, Provision and Financing I12|Integration|Integration: The Vlsi Journal I13|Intervirology|Intervirology I14|Ionics|Ionics I15|Isis|Isis: An International Review Devoted to the History of Science and its Cultural Influences I16|Islets|Islets I17|Iucrj|Iucrj IA|Indoor Air|Indoor Air IA1|Int. Angiol.|International Angiology=International Angiology: A Journal of the International Union of Angiology IAAI|Int. Arch. Allergy Immunol.=Int. Arch. Allergy Imm.|International Archives of Allergy and Immunology IAC|Int. Anesthesiol. Clin.|International Anesthesiology Clinics IACNA|Immunol. Allergy Clin. North Am.=Immunol. Allergy Clin. N. Amer.|Immunology and Allergy Clinics of North America IAJIT|Int. Arab J. Inf. Technol.|International Arab Journal of Information Technology IAOEH|Int. Arch. Occup. Environ. Health=Int. Arch. Occup. Envir. Health|International Archives of Occupational and Environmental Health IBD|Infant Behav. Dev.=Infant Behav. Develop.|Infant Behavior & Development IBD1|Inflamm. Bowel Dis.|Inflammatory Bowel Diseases IBHPTS|Issue Brief Health Policy Track Serv|Issue Brief IBJ|Iran. Biomed. J.|Iranian Biomedical Journal IBJU|Int. Braz J Urol|International Braz J Urol IBMB|Insect Biochem. Mol. Biol.=Insect Biochem. Molec. Biol.|Insect Biochemisry and Molecular Biology=Insect Biochemistry and Molecular Biology IBMJRD|IBM J. Res. Dev.=IBM J. Res. Develop.|IBM Journal of Research and Development IBMSJ|IBM Syst. J.|IBM Systems Journal IBUK|Integr. Biol. UK|Integrative Biology IC|Inf. Comput.=Inform. Comput.|Information and Computation IC1|Inorg. Chem.|Inorganic Chemistry IC2|Interact. Comput.|Interacting with Computers ICA|Inorganica Chim. Acta=Inorg. Chim. Acta|Inorganica Chimica Acta ICAE|Integr. Comput. Aided Eng.=Integr. Comput. Aided Engineer.|Integrated Computer-Aided Engineering ICB|Immunol. Cell Biol.=Immun. Cell Biol.|Immunology and Cell Biology ICB1|Integr. Comp. Biol.|Integrative and Comparative Biology ICC|Inorg. Chem. Commun.|Inorganic Chemistry Communications ICC1|Interv. Cardiol. Clin.|Interventional Cardiology Clinics ICCN|Intensive Crit. Care Nurs.=Intens. Crit. Care Nur.|Intensive & Critical Care Nursing=Intensive and Critical Care Nursing ICF|Inorg. Chem. Front.|Inorganic Chemistry Frontiers ICHE|Infect. Control Hosp. Epidemiol.=Infect. Cont. Hosp. Ep.|Infection Control and Hospital Epidemiology ICM|Intensive Care Med.=Intens. Care Med.|Intensive Care Medicine ICP|Int. Clin. Psychopharmacol.=Int. Clin. Psychopharm.|International Clinical Psychopharmacology ICT|Integr. Cancer Ther.|Integrative Cancer Therapies ICTS|Interact. Cardiovasc. Thorac. Surg.=Interact. Cardiovasc. Thorac. Su.|Interactive Cardiovascular and Thoracic Surgery ICU|Investig. Clin. Urol.|Investigative and Clinical Urology ID|Implant Dent.|Implant Dentistry IDA|Intell. Data Anal.|Intelligent Data Analysis IDAQPR|Infin. Dimens. Anal. Quantum P. R.|Infinite Dimensional Analysis Quantum Probability and Related Topics IDCNA|Infect. Dis. Clin. North Am.=Infect. Dis. Clin. N. Amer.|Infectious Disease Clinics of North America IDD|Intellect. Dev. Disabil.=Intellect. Dev. Disab.|Intellectual and Developmental Disabilities IDDT|Infect. Disord. Drug Targets|Infectious Disorders Drug Targets IDJ|Int. Dent. J.|International Dental Journal IDOG|Infect. Dis. Obstet. Gynecol.|Infectious Diseases in Obstetrics and Gynecology IDP|Infect. Dis. Poverty|Infectious Diseases of Poverty IEAM|Integr. Environ. Assess. Manag.=Integr. Environ. Asses.|Integrated Environmental Assessment and Management IECR|Ind. Eng. Chem. Res.|Industrial & Engineering Chemistry Research=Industrial and Engineering Chemistry Research IEE|Invest. Educ. Enferm.|Investigación y Educación en Enfermería IEEEACMTCBB|IEEE ACM Trans. Comput. Biol. Bioinform.=IEEE ACM Trans. Comput. Biol. Bi.|IEEE/ACM Transactions on Computational Biology and Bioinformatics IEEEACMTN|IEEE ACM Trans. Networking|IEEE-ACM Transactions on Networking IEEEAHC|IEEE Ann. Hist. Comput.|IEEE Annals of the History of Computing IEEECAL|IEEE Comput. Archit. Lett.|IEEE Computer Architecture Letters IEEECC|IEEE Cloud Comput.|IEEE Cloud Computing IEEECGA|IEEE Comput. Graph. Appl.=IEEE Comput. Graph.|IEEE Computer Graphics and Applications IEEECIM|IEEE Comput. Intell. Mag.=IEEE Comput. Intell. M.|IEEE Computational Intelligence Magazine IEEECL|IEEE Commun. Lett.|IEEE Communications Letters IEEECM|IEEE Commun. Mag.|IEEE Communications Magazine IEEECST|IEEE Commun. Surv. Tutor.|IEEE Communications Surveys and Tutorials IEEEDT|IEEE Des. Test|IEEE Design & Test IEEEESL|IEEE Embed. Syst. Lett.|IEEE Embedded Systems Letters IEEEIC|IEEE Internet Comput.|IEEE Internet Computing IEEEITJ|IEEE Internet Things J.|IEEE Internet of Things Journal IEEEJBHI|IEEE J. Biomed. Health Inform.=IEEE J. Biomed. Health|IEEE Journal of Biomedical and Health Informatics IEEEJQE|IEEE J. Quantum Electron.=IEEE J. Quantum Elect.|IEEE Journal of Quantum Electronics IEEEJSAC|IEEE J. Sel. Area. Commun.|IEEE Journal on Selected Areas in Communications IEEEJSTAEO|IEEE J. Sel. Top. Appl. Earth Obs.|IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing IEEEM|IEEE Micro|IEEE Micro IEEEM1|IEEE Multimedia|IEEE Multimedia IEEEML|IEEE Magn. Lett.|IEEE Magnetics Letters IEEEN|IEEE Netw.|IEEE Network IEEEP|IEEE Pulse|IEEE Pulse IEEEPC|IEEE Pervasive Comput.=IEEE Pervas. Comput.|IEEE Pervasive Computing IEEEPJ|IEEE Photonics J.|IEEE Photonics Journal IEEEPTL|IEEE Photonics Technol. Lett.=IEEE Photonic. Technol. Lett.|IEEE Photonics Technology Letters IEEERBE|IEEE Rev. Biomed. Eng.|IEEE Reviews in Biomedical Engineering IEEES|IEEE Softw.|IEEE Software IEEES1|IEEE Spectr.|IEEE Spectrum IEEESJ|IEEE Syst. J.|IEEE Systems Journal IEEESP|IEEE Secur. Priv.|IEEE Security & Privacy IEEESPL|IEEE Signal Process. Lett.=IEEE Signal Proc. Let.|IEEE Signal Processing Letters IEEETAC|IEEE Trans. Affect. Comput.=IEEE T. Affect. Comput.|IEEE Transactions on Affective Computing IEEETAS|IEEE Trans. Appl. Supercond.=IEEE Trans. Appl. Superconduct.|IEEE Transactions on Applied Superconductivity IEEETB|IEEE Trans. Broadcasting|IEEE Transactions on Broadcasting IEEETBCS|IEEE Trans. Biomed. Circuits Syst.=IEEE Trans. Biomed. Circuits Sy.|IEEE Transactions on Biomedical Circuits and Systems IEEETBE|IEEE Trans. Biomed Eng.=IEEE T. Bio Med. Eng.|IEEE Transactions on Bio-Medical Engineering IEEETC|IEEE Trans. Commun.|IEEE Transactions on Communications IEEETC1|IEEE Trans. Comput.=IEEE T. Comput.|IEEE Transactions on Computers=IEEE Transactions on Computers. Institute of Electrical and Electronics Engineers IEEETC2|IEEE Trans. Cybern.=IEEE T. Cybernetics|IEEE Transactions on Cybernetics IEEETCC|IEEE Trans. Cloud Comput.|IEEE Transactions on Cloud Computing IEEETCDS|IEEE Trans. Cogn. Dev. Syst.|IEEE Transactions on Cognitive and Developmental Systems IEEETCIAIG|IEEE Trans. Comput. Intell. AI Games=IEEE Trans. Comput. Intell. AI G.|IEEE Transactions on Computational Intelligence and AI in Games IEEETCSVT|IEEE Trans. Circuits Syst. Video Technol.=IEEE Trans. Circ. Syst. Video T.|IEEE Transactions on Circuits and Systems for Video Technology IEEETDSC|IEEE Trans. Dependable Secure Comput.=IEEE Trans. Dependable Secur. C.|IEEE Transactions on Dependable and Secure Computing IEEETEC|IEEE Trans. Evol. Computat.|IEEE Transactions on Evolutionary Computation IEEETETC|IEEE Trans. Emerg. Top. Comput.=IEEE T. Emerg. Top. Com.|IEEE Transactions on Emerging Topics in Computing IEEETFS|IEEE Trans. Fuzzy Syst.=IEEE T. Fuzzy Syst.|IEEE Transactions on Fuzzy Systems IEEETGRS|IEEE Trans. Geosci. Remote Sens.=IEEE Trans. Geosci. Remot. Sen.|IEEE Transactions on Geoscience and Remote Sensing IEEETH|IEEE Trans. Haptics=IEEE T. Haptics|IEEE Transactions on Haptics IEEETIFS|IEEE Trans. Inf. Forensic. Secur.|IEEE Transactions on Information Forensics and Security IEEETIP|IEEE Trans. Image Process.=IEEE Trans. Image Processing|IEEE Transactions on Image Processing IEEETIT|IEEE Trans. Inf. Theory=IEEE Trans. Inform. Theory|IEEE Transactions on Information Theory IEEETKDE|IEEE Trans. Knowl. Data Eng.=IEEE T. Knowl. Data En.|IEEE Transactions on Knowledge and Data Engineering IEEETLT|IEEE Trans. Learn. Technol.|IEEE Transactions on Learning Technologies IEEETM|IEEE Trans. Magn.=IEEE T. Magn.|IEEE Transactions on Magnetics IEEETM1|IEEE Trans. Multimedia=IEEE T. Multimedia|IEEE Transactions on Multimedia IEEETMC|IEEE Trans. Mob. Comput.|IEEE Transactions on Mobile Computing IEEETMI|IEEE Trans. Med. Imaging=IEEE T. Med. Imaging|IEEE Transactions on Medical Imaging IEEETN|IEEE Trans. Nanobioscience=IEEE Trans. Nanobiosci.|IEEE Transactions on Nanobioscience IEEETNN|IEEE Trans. Neural Netw.|IEEE Transactions on Neural Networks IEEETNNLS|IEEE Trans. Neural Netw. Learn. Syst.=IEEE Trans. Neural Netw. Learn.|IEEE Transactions on Neural Networks and Learning Systems IEEETNS|IEEE Trans. Nucl. Sci.=IEEE T. Nucl. Sci.|IEEE Transactions on Nuclear Science IEEETNSM|IEEE Trans. Netw. Serv. Manag.|IEEE Transactions on Network and Service Management IEEETNSRE|IEEE Trans. Neural Syst. Rehabil. Eng.=IEEE Trans. Neural Syst. Reh. En.|IEEE Transactions on Neural Systems and Rehabilitation Engineering IEEETPAMI|IEEE Trans. Pattern Anal. Mach. Intell.=IEEE Trans. Patt. Anal. Mach. Int.|IEEE Transactions on Pattern Analysis and Machine Intelligence IEEETPDS|IEEE Trans. Parallel Distrib. Syst.=IEEE Trans. Parall. Distrib. Sys.|IEEE Transactions on Parallel and Distributed Systems IEEETPS|IEEE Trans. Plasma Sci.|IEEE Transactions on Plasma Science IEEETSC|IEEE Trans. Serv. Comput.|IEEE Transactions on Services Computing IEEETSE|IEEE Trans. Software Eng.|IEEE Transactions on Software Engineering IEEETSMC|IEEE Trans. Syst. Man Cybern.|IEEE Transactions on Systems, Man, and Cybernetics IEEETSMCASH|IEEE Trans. Syst. Man Cybern. A Syst. Hum.|IEEE Transactions on Systems, Man, and Cybernetics Part A: Systems and Humans IEEETSMCBC|IEEE Trans. Syst. Man Cybern. B Cybern.|IEEE Transactions on Systems, Man, and Cybernetics Part B: Cybernetics IEEETSMCCAR|IEEE Trans. Syst. Man Cybern. C Appl. Rev.|IEEE Transactions on Systems, Man and Cybernetics Part C: Applications and Reviews IEEETSP|IEEE Trans. Signal Process.=IEEE T. Signal Proces.|IEEE Transactions on Signal Processing IEEETUFFC|IEEE Trans. Ultrason. Ferroelectr. Freq. Control=IEEE T. Ultrason. Ferroelectr.|IEEE Transactions on Ultrasonics, Ferroelectrics, and Frequency Control IEEETVCG|IEEE Trans. Vis. Comput. Graph.=IEEE Trans. Visual. Comput. Gr.|IEEE Transactions on Visualization and Computer Graphics IEEETWC|IEEE Trans. Wirel. Commun.|IEEE Transactions on Wireless Communications IEEEWC|IEEE Wirel. Commun.|IEEE Wireless Communications IEEEWCL|IEEE Wirel. Commun. Lett.|IEEE Wireless Communications Letters IEHS|Isotopes Environ. Health Stud.=Isot. Environ. Health Stud.|Isotopes in Environmental and Health Studies IEICETC|IEICE Trans. Commun.|IEICE Transactions on Communications IEICETIS|IEICE Trans. Inf. Syst.=IEICE Trans. Inform. Syst.|IEICE Transactions on Information and Systems IEJ|Int. Endod. J.|International Endodontic Journal IEM|Intern. Emerg. Med.|Internal and Emergency Medicine IEN|Int. Emerg. Nurs.|International Emergency Nursing IEOT|Integral Equation. Oper. Theory|Integral Equations and Operator Theory IETB|IET Biometrics|IET Biometrics IETCDT|IET Comput. Digit. Tech.=IET Comput. Digit. Tec.|IET Computers & Digital Techniques=IET Computers and Digital Techniques IETCV|IET Comput. Vis.|IET Computer Vision IETIS|IET Inform. Secur.|IET Information Security IETN|IET Nanobiotechnol.|IET Nanobiotechnology IETRSN|IET Radar Sonar Navig.|IET Radar Sonar and Navigation IETS|IET Softw.|IET Software IETSB|IET Syst. Biol.|IET Systems Biology IF|Inf. Fusion=Inform. Fusion|Information Fusion=An International Journal on Information Fusion IF1|Interface Focus|Interface Focus IFAR|Int. Forum Allergy Rhinol.=Int. Forum Allergy Rh.|International Forum of Allergy & Rhinology IFB|Interface. Free Bound.|Interfaces and Free Boundaries IFSET|Innov. Food Sci. Emerg. Technol.=Innov. Food Sci. Emerg.|Innovative Food Science & Emerging Technologies IGE|Infect. Genet. Evol.|Infection Genetics and Evolution=Infection, Genetics and Evolution: Journal of Molecular Epidemiology and Evolutionary Genetics in Infectious Diseases IH|Ind. Health|Industrial Health IH1|Int. Health|International Health IHJ|Indian Heart J.|Indian Heart Journal IHJ1|Int. Heart J.|International Heart Journal II|Immunol. Invest.|Immunological Investigations II1|Immunopharmacol. Immunotoxicol.=Immunopharm. Immunot.|Immunopharmacology and Immunotoxicology II2|Infect. Immun.=Infec. Immunity|Infection and Immunity II3|Innate Immun.=Innate Immun. London|Innate Immunity II4|Int. Immunol.|International Immunology II5|Int. Immunopharmacol.|International Immunopharmacology IID|Immun. Inflamm. Dis.|Immunity, Inflammation and Disease IIS|Interdiscip. Inf. Sci.|Interdisciplinary Information Sciences IJ|Icga J.|Icga Journal IJA|Int. J. Audiol.|International Journal of Audiology IJAA|Int. J. Antimicrob. Agents=Int. J. Antimicrobial Agents|International Journal of Antimicrobial Agents IJAAI|Iran. J. Allergy Asthma Immunol.=Iran. J. Allergy Asthm.|Iranian Journal of Allergy, Asthma, and Immunology IJAC|Int. J. Algebra Comput.=Int. J. Algebr. Comput.|International Journal of Algebra and Computation IJAC1|Int. J. Anal. Chem.|International Journal of Analytical Chemistry IJAHD|Int. J. Aging Hum. Dev.=Int. J. Aging Human Develop.|International Journal of Aging & Human Development IJAHUC|Int. J. Ad Hoc Ubiquitous Compu.|International Journal of Ad Hoc and Ubiquitous Computing IJAIT|Int. J. Artif. Intell. Tools|International Journal on Artificial Intelligence Tools IJAMCS|Int. J. Appl. Math. Comput. Sci.|International Journal of Applied Mathematics & Computer Science=International Journal of Applied Mathematics and Computer Science IJAMH|Int. J. Adolesc. Med. Health|International Journal of Adolescent Medicine and Health IJAO|Int. J. Artif. Organs|International Journal of Artificial Organs=The International Journal of Artificial Organs IJAR|Int. J. Approx. Reason.=Int. J. Approx. Reasoning|International Journal of Approximate Reasoning IJB|Indian J. Biotechnol.|Indian Journal of Biotechnology IJB1|Int. J. Bioelectromagn.|International Journal of Bioelectromagnetism IJB2|Int. J. Biomath.|International Journal of Biomathematics IJB3|Int. J. Biometeorol.|International Journal of Biometeorology IJB4|Int. J. Biostat.|International Journal of Biostatistics=The International Journal of Biostatistics IJB5|Iran. J. Biotechnol.|Iranian Journal of Biotechnology IJBB|Indian J. Biochem. Biophys.=Indian J. Biochem. Bio.|Indian Journal of Biochemistry & Biophysics=Indian Journal of Biochemistry and Biophysics IJBC|Int. J. Bifurcat. Chaos=Int. J. Bifurcation Chaos|International Journal of Bifurcation and Chaos=International Journal of Bifurcation and Chaos in Applied Sciences and Engineering IJBIC|Int. J. Bio Inspired Comput.|International Journal of Bio-Inspired Computation IJBM|Int. J. Behav. Med.=Int. J. Behavioral Medicine|International Journal of Behavioral Medicine IJBM1|Int. J. Biol. Macromol.|International Journal of Biological Macromolecules IJBM2|Int. J. Biol. Markers|The International Journal of Biological Markers IJBNPA|Int. J. Behav. Nutr. Phys. Act.=Int. J. Behav. Nutr. Phy.|International Journal of Behavioral Nutrition and Physical Activity=The International Journal of Behavioral Nutrition and Physical Activity IJBS|Int. J. Biol. Sci.|International Journal of Biological Sciences IJC|Indian J. Cancer|Indian Journal of Cancer IJC1|Indian J. Chem.|Indian Journal of Chemistry IJC2|Int. J. Cancer|International Journal of Cancer IJC3|Int. J. Cardiol.|International Journal of Cardiology IJC4|Isr. J. Chem.|Israel Journal of Chemistry IJCARS|Int. J. Comput. Assist. Radiol. Surg.=Int. J. Comput. Assist. Radiol. Su.|International Journal of Computer Assisted Radiology and Surgery IJCCC|Int. J. Comput. Commun. Control|International Journal of Computers Communications & Control IJCCE|Iran. J. Chem. Chem. Eng.|Iranian Journal of Chemistry & Chemical Engineering-International English Edition IJCD|Int. J. Colorectal Dis.|International Journal of Colorectal Disease IJCD1|Int. J. Comput. Dent.|International Journal of Computerized Dentistry IJCEH|Int. J. Clin. Exp. Hypn.=Int. J. Clin. Exp. Hyp.|International Journal of Clinical and Experimental Hypnosis=The International Journal of Clinical and Experimental Hypnosis IJCEM|Int. J. Clin. Exp. Med.|International Journal of Clinical and Experimental Medicine IJCH|Int. J. Circumpolar Health=Int. J. Circumpol. Heal.|International Journal of Circumpolar Health IJCI|Int. J. Cardiovasc. Imaging=Int. J. Cardiovas. Imag.|International Journal of Cardiovascular Imaging=The International Journal of Cardiovascular Imaging IJCIS|Int. J. Comput. Intell. Syst.|International Journal of Computational Intelligence Systems IJCIS1|Int. J. Coop. Inf. Syst.|International Journal of Cooperative Information Systems IJCK|Int. J. Chem. Kinet.|International Journal of Chemical Kinetics IJCM|Int. J. Comput. Methods|International Journal of Computational Methods IJCO|Int. J. Clin. Oncol.|International Journal of Clinical Oncology IJCOPD|Int. J. Chron. Obstruct. Pulmon. Dis.=Int. J. Chronic Obstr. Pulm. Dis.|International Journal of Chronic Obstructive Pulmonary Disease IJCP|Int. J. Clin. Pharm.=Int. J. Clin. Pharm. Net|International Journal of Clinical Pharmacy IJCP1|Int. J. Clin. Pract.|International Journal of Clinical Practice IJCS|Int. J. Cosmet. Sci.=Int. J. Cosmetic Sci.|International Journal of Cosmetic Science IJCSA|Indian J. Chem. Sect. A|Indian Journal of Chemistry Section A: Inorganic Bio-Inorganic Physical Theoretical & Analytical Chemistry IJD|Int. J. Dermatol.|International Journal of Dermatology IJDAR|Int. J. Doc. Anal. Recognit.=Int. J. Doc. Anal. Recog.|International Journal on Document Analysis and Recognition IJDB|Int. J. Dev. Biol.|International Journal of Developmental Biology=The International Journal of Developmental Biology IJDH|Int. J. Dent. Hyg.|International Journal of Dental Hygiene IJDMB|Int. J. Data Min. Bioinform.=Int. J. Data Min. Bioin.|International Journal of Data Mining and Bioinformatics IJDN|Int. J. Dev. Neurosci.|International Journal of Developmental Neuroscience IJDP|Int. J. Drug Policy|International Journal of Drug Policy=The International Journal on Drug Policy IJDR|Indian J. Dent. Res.|Indian Journal of Dental Research IJDSN|Int. J. Distrib. Sens. Netw.|International Journal of Distributed Sensor Networks IJDVL|Indian J. Dermatol. Venereol. Leprol.|Indian Journal of Dermatology, Venereology and Leprology IJDWM|Int. J. Data Warehous. Min.|International Journal of Data Warehousing and Mining IJE|Int. J. Epidemiol.|International Journal of Epidemiology IJEB|Indian J. Exp. Biol.|Indian Journal of Experimental Biology IJEBH|Int. J. Evid. Based Healthc.|International Journal of Evidence-Based Healthcare IJED|Int. J. Eat. Disord.|The International Journal of Eating Disorders IJED1|Int. J. Esthet. Dent.|The International Journal of Esthetic Dentistry IJEH|Int. J. Equity Health|International Journal for Equity in Health IJEHR|Int. J. Environ. Health Res.=Int. J. Environ. Heal. R.|International Journal of Environmental Health Research IJEP|Int. J. Exp. Pathol.|International Journal of Experimental Pathology IJERPH|Int. J. Environ. Res. Public Health=Int. J. Environ. Res. Public Heal.|International Journal of Environmental Research and Public Health IJES|Int. J. Electrochem. Sci.=Int. J. Electrochem. Sc.|International Journal of Electrochemical Science IJFCS|Int. J. Found. Comput. Sci.|International Journal of Foundations of Computer Science IJFM|Int. J. Food Microbiol.|International Journal of Food Microbiology IJFS|Iran. J. Fuzzy Syst.|Iranian Journal of Fuzzy Systems IJFSN|Int. J. Food Sci. Nutr.|International Journal of Food Sciences and Nutrition IJG|Indian J. Gastroenterol.|Indian Journal of Gastroenterology IJG1|Int. J. Genomics|International Journal of Genomics IJGC|Int. J. Gynecol. Cancer|International Journal of Gynecological Cancer IJGIS|Int. J. Geogr. Inf. Sci.|International Journal of Geographical Information Science IJGMMP|Int. J. Geom. Methods Mod. Phys.|International Journal of Geometric Methods in Modern Physics IJGO|Int. J. Gynaecol. Obstet.|International Journal of Gynaecology and Obstetrics IJGP|Int. J. Geriatr. Psychiatry=Int. J. Geriat. Psychiat.|International Journal of Geriatric Psychiatry IJGP1|Int. J. Group Psychother.=Int. J. Group Psychoth.|International Journal of Group Psychotherapy IJGP2|Int. J. Gynecol. Pathol.|International Journal of Gynecological Pathology IJGS|Int. J. Gen. Syst.=Int. J. Gen. System.|International Journal of General Systems IJH|Int. J. Hematol.|International Journal of Hematology IJH1|Int. J. Hyperthermia=Int. J. Hyperther.|International Journal of Hyperthermia IJHC|Indian J. Heterocycl. Chem.|Indian Journal of Heterocyclic Chemistry IJHCQA|Int. J. Health Care Qual. Assur.|International Journal of Health Care Quality Assurance IJHEH|Int. J. Hyg. Environ. Health=Int. J. Hyg. Envir. Heal.|International Journal of Hygiene and Environmental Health IJHEM|Int. J. Health Econ. Manag.=Int. J. Health Econom. Manag.|International Journal of Health Economics and Management IJHG|Int. J. Health Geogr.|International Journal of Health Geographics IJHG1|Int. J. Hum. Genet.|International Journal of Human Genetics IJHPCA|Int. J. High Perform. Comput. App.|International Journal of High Performance Computing Applications IJHPM|Int. J. Health Plann. Manage.|The International Journal of Health Planning and Management IJHPM1|Int. J. Health Policy Manag.|International Journal of Health Policy and Management IJHPR|Isr. J. Health Policy Res.=Isr. J. Health Policy|Israel Journal of Health Policy Research IJHS|Int. J. Health Serv.|International Journal of Health Services=International Journal of Health Services: Planning, Administration, Evaluation IJI|Int. J. Immunogenet.|International Journal of Immunogenetics IJI1|Iran. J. Immunol.|Iranian Journal of Immunology IJICSP|Int. J. Inj. Contr. Saf. Promot.=Int. J. Inj. Control Saf. Promot.|International Journal of Injury Control and Safety Promotion IJID|Int. J. Infect. Dis.|International Journal of Infectious Diseases IJIP|Int. J. Immunopathol. Pharmacol.=Int. J. Immunopath. Ph.|International Journal of Immunopathology and Pharmacology IJIR|Int. J. Impot. Res.|International Journal of Impotence Research IJIS|Int. J. Inf. Secur.|International Journal of Information Security IJIS1|Int. J. Intell. Syst.|International Journal of Intelligent Systems IJITDM|Int. J. Inf. Technol. Decis. Mak.=Int. J. Inf. Tech. Decis.|International Journal of Information Technology & Decision Making IJKD|Iran. J. Kidney Dis.|Iranian Journal of Kidney Diseases IJLCD|Int. J. Lang. Commun. Disord.=Int. J. Lang. Comm. Dis.|International Journal of Language & Communication Disorders IJLEW|Int. J. Low. Extrem. Wounds=Int. J. Low. Extr. Wound.|International Journal of Lower Extremity Wounds=The International Journal of Lower Extremity Wounds IJLH|Int. J. Lab. Hematol.|International Journal of Laboratory Hematology IJLM|Int. J. Legal Med.|International Journal of Legal Medicine IJLP|Int. J. Law Psychiatry=Int. J. Law Psychiat.|International Journal of Law and Psychiatry IJM|Int. J. Math.|International Journal of Mathematics IJM1|Int. J. Morphol.|International Journal of Morphology IJM2|Int. J. Mycobacteriol.|International Journal of Mycobacteriology IJM3|Isr. J. Math.|Israel Journal of Mathematics IJME|Indian J. Med. Ethics|Indian Journal of Medical Ethics IJME1|Int. J. Med. Educ.|International Journal of Medical Education IJMHN|Int. J. Ment. Health Nurs.=Int. J. Ment. Health Nu.|International Journal of Mental Health Nursing IJMI|Int. J. Med. Inform.|International Journal of Medical Informatics IJMLC|Int. J. Mach. Learn. Cybern.|International Journal of Machine Learning and Cybernetics IJMM|Indian J. Med. Microbiol.=Indian J. Med. Microbi.|Indian Journal of Medical Microbiology IJMM1|Int. J. Med. Microbiol.|International Journal of Medical Microbiology IJMM2|Int. J. Med. Mushrooms|International Journal of Medicinal Mushrooms IJMM3|Int. J. Mol. Med.|International Journal of Molecular Medicine IJMMS|Int. J. Math. Math. Sci.|International Journal of Mathematics and Mathematical Sciences IJMPA|Int. J. Mod. Phys. A|International Journal of Modern Physics A=International Journal of Modern Physics. A, Particles and Fields, Gravitation, Cosmology IJMPB|Int. J. Mod. Phys. B|International Journal of Modern Physics B IJMPC|Int. J. Mod. Phys. C|International Journal of Modern Physics C=International Journal of Modern Physics. C, Physics and Computers IJMPENP|Int. J. Mod. Phys. E Nucl. Phys.|International Journal of Modern Physics E-Nuclear Physics IJMPR|Int. J. Methods Psychiatr. Res.=Int. J. Meth. Psychiatr. Res.|International Journal of Methods in Psychiatric Research IJMR|Indian J. Med. Res.|Indian Journal of Medical Research=The Indian Journal of Medical Research IJMR1|Int. J. Med. Robot.|The International Journal of Medical Robotics and Computer Assisted Surgery IJMS|Int. J. Mass Spectrom.|International Journal of Mass Spectrometry IJMS1|Int. J. Med. Sci.|International Journal of Medical Sciences IJMS2|Int. J. Mol. Sci.|International Journal of Molecular Sciences IJMS3|Ir. J. Med. Sci.=Irish J. Med. Sci.|Irish Journal of Medical Science IJN|Int. J. Nanomedicine=Int. J. Nanomed.|International Journal of Nanomedicine IJN1|Int. J. Neuropsychopharmacol.=Int. J. Neuropsychoph.|International Journal of Neuropsychopharmacology=The International Journal of Neuropsychopharmacology IJN2|Int. J. Neurosci.|International Journal of Neuroscience=The International Journal of Neuroscience IJNAM|Int. J. Numer. Anal. Model.=Int. J. Numer. Anal. Mod.|International Journal of Numerical Analysis and Modeling IJNES|Int. J. Nurs. Educ. Scholarsh.|International Journal of Nursing Education Scholarship IJNK|Int. J. Nurs. Knowl.|International Journal of Nursing Knowledge IJNM|Int. J. Netw. Manag.|International Journal of Network Management IJNMBE|Int. J. Numer. Method. Biomed. Eng.=Int. J. Numer. Meth. Biomed. Eng.|International Journal for Numerical Methods in Biomedical Engineering IJNME|Int. J. Numer. Methods Eng.=Int. J. Numer. Method. Eng.|International Journal for Numerical Methods in Engineering IJNMF|Int. J. Numer. Methods Fluids=Int. J. Numer. Method. Fluid.|International Journal for Numerical Methods in Fluids IJNP|Int. J. Nurs. Pract.|International Journal of Nursing Practice IJNS|Int. J. Neural Syst.|International Journal of Neural Systems IJNS1|Int. J. Nurs. Stud.|International Journal of Nursing Studies IJNT|Int. J. Number Theory|International Journal of Number Theory IJO|Indian J. Ophthalmol.|Indian Journal of Ophthalmology IJO1|Int. J. Oncol.|International Journal of Oncology IJOA|Int. J. Obstet. Anesth.|International Journal of Obstetric Anesthesia IJOEH|Int. J. Occup. Environ. Health=Int. J. Occup. Env. Heal.|International Journal of Occupational and Environmental Health IJOEM|Int. J. Occup. Environ. Med.|The International Journal of Occupational and Environmental Medicine IJOMEH|Int. J. Occup. Med. Environ. Health=Int. J. Occup. Med. Environ. Healt.|International Journal of Occupational Medicine and Environmental Health IJOMI|Int. J. Oral Maxillofac. Implants|The International Journal of Oral & Maxillofacial Implants IJOMS|Int. J. Oral Maxillofac. Surg.=Int. J. Oral Max. Surg.|International Journal of Oral and Maxillofacial Surgery IJOPN|Int. J. Older People Nurs.=Int. J. Older People N.|International Journal of Older People Nursing IJOS|Int. J. Oral Sci.|International Journal of Oral Science IJOSE|Int. J. Occup. Saf. Ergon.=Int. J. Occup. Saf. Ergo.|International Journal of Occupational Safety and Ergonomics IJOTCC|Int. J. Offender Ther. Comp. Criminol.=Int. J. Offend. Ther. Comp. Crimin.|International Journal of Offender Therapy and Comparative Criminology IJOTN|Int. J. Orthop. Trauma Nurs.|International Journal of Orthopaedic and Trauma Nursing IJP|Indian J. Pediatr.|Indian Journal of Pediatrics IJP1|Indian J. Pharmacol.|Indian Journal of Pharmacology IJP2|Indian J. Phys.|Indian Journal of Physics IJP3|Int. J. Paleopathol.|International Journal of Paleopathology IJP4|Int. J. Parasitol.|International Journal for Parasitology IJP5|Int. J. Pharm.=Int. J. Pharmaceut.|International Journal of Pharmaceutics IJP6|Int. J. Photoenergy|International Journal of Photoenergy IJP7|Int. J. Phytoremediation=Int. J. Phytoremediat.|International Journal of Phytoremediation IJP8|Int. J. Prosthodont.|International Journal of Prosthodontics=The International Journal of Prosthodontics IJP9|Int. J. Psychoanal.|International Journal of Psychoanalysis=The International Journal of Psycho-Analysis IJP10|Int. J. Psychol.|International Journal of Psychology=International Journal of Psychology: Journal International de Psychologie IJP11|Int. J. Psychophysiol.|International Journal of Psychophysiology IJP12|Ital. J. Pediatr.|Italian Journal of Pediatrics IJPAC|Int. J. Polym. Anal. Charact.|International Journal of Polymer Analysis and Characterization IJPAM|Indian J. Pure Appl. Math.|Indian Journal of Pure & Applied Mathematics IJPAM1|Int. J. Pure Appl. Math.|International Journal of Pure and Applied Mathematics IJPAP|Indian J. Pure Appl. Phys.|Indian Journal of Pure & Applied Physics=Indian Journal of Pure and Applied Physics IJPC|Int. J. Pharm. Compd.|International Journal of Pharmaceutical Compounding IJPCP|Int. J. Psychiatry Clin. Pract.=Int. J. Psychiatr. Clin. Pract.|International Journal of Psychiatry in Clinical Practice IJPD|Int. J. Paediatr. Dent.|International Journal of Paediatric Dentistry IJPDDR|Int. J. Parasitol. Drugs Drug Resist.=Int. J. Parasitol. Drugs Drug Re.|International Journal for Parasitology. Drugs and Drug Resistance IJPH|Indian J. Public Health|Indian Journal of Public Health IJPH1|Int. J. Prison. Health|International Journal of Prisoner Health IJPH2|Int. J. Public Health|International Journal of Public Health IJPM|Indian J. Pathol. Microbiol.=Indian J. Pathol. Micr.|Indian Journal of Pathology & Microbiology=Indian Journal of Pathology and Microbiology IJPM1|Int. J. Psychiatry Med.=Int. J. Psychiat. Med.|International Journal of Psychiatry in Medicine IJPM2|Ir. J. Psychol. Med.|Irish Journal of Psychological Medicine IJPN|Int. J. Palliat. Nurs.|International Journal of Palliative Nursing IJPO|Int. J. Pediatr. Otorhinolaryngol.=Int. J. Ped. Otorhinolaryngol.|International Journal of Pediatric Otorhinolaryngology IJPP|Int. J. Parallel Program.=Int. J. Parallel Prog.|International Journal of Parallel Programming IJPP1|Int. J. Pharm. Pract.|The International Journal of Pharmacy Practice IJPRAI|Intern. J. Pattern Recognit. Artif. Intell.=Int. J. Pattern Recognit. Arti. I.|International Journal of Pattern Recognition and Artificial Intelligence IJPRD|Int. J. Periodontics Restorative Dent.|The International Journal of Periodontics & Restorative Dentistry IJPRS|Isr. J. Psychiatry Relat. Sci.|The Israel Journal of Psychiatry and Related Sciences IJPRT|Int. J. Pept. Res. Ther.|International Journal of Peptide Research and Therapeutics IJPS|Int. J. Phys. Sci.|International Journal of the Physical Sciences IJPS1|Int. J. Polym. Sci.|International Journal of Polymer Science IJQC|Int. J. Quantum Chem.|International Journal of Quantum Chemistry IJQHC|Int. J. Qual. Health Care=Int. J. Qual. Health C.|International Journal for Quality in Health Care=International Journal for Quality in Health Care: Journal of the International Society for Quality in Health Care IJQI|Int. J. Quantum Inf.|International Journal of Quantum Information IJQSHWB|Int. J. Qual. Stud. Health Well Being=Int. J. Qual. Stud. Health Well B.|International Journal of Qualitative Studies on Health and Well-Being IJRB|Int. J. Radiat. Biol.|International Journal of Radiation Biology IJRD|Int. J. Rheum. Dis.|International Journal of Rheumatic Diseases IJRET|Int. J. Res. Eng. Technol.|International Journal of Research in Engineering and Technology IJRNC|Int. J. Robust Nonlinear Contr.|International Journal of Robust and Nonlinear Control IJROBP|Int. J. Radiat. Oncol. Biol. Phys.=Int. J. Radiat. Oncol.|International Journal of Radiation Oncology, Biology, Physics IJRR|Int. J. Rehabil. Res.|International Journal of Rehabilitation Research IJRS|Int. J. Remote Sens.|International Journal of Remote Sensing IJRSM|Int. J. Risk Saf. Med.|The International Journal of Risk & Safety in Medicine IJS|Int. J. Stroke|International Journal of Stroke IJS1|Int. J. Surg.|International Journal of Surgery IJSC|Int. J. Stem Cells|International Journal of Stem Cells IJSCN|Int. J. Satell. Commun. Netw.|International Journal of Satellite Communications and Networking IJSEK|Int. J. Softw. Eng. Knowl.|International Journal of Software Engineering and Knowledge Engineering IJSEM|Int. J. Syst. Evol. Microbiol.=Int. J. Syst. Evol. Micr.|International Journal of Systematic and Evolutionary Microbiology IJSLP|Int. J. Speech Lang. Pathol.=Int. J. Speech Lang. Pa.|International Journal of Speech-Language Pathology IJSM|Int. J. Sports Med.=Int. J. Sport. Med.|International Journal of Sports Medicine IJSN|Int. J. Sens. Netw.|International Journal of Sensor Networks IJSNEM|Int. J. Sport Nutr. Exerc. Metab.=Int. J. Sport Nutr. Exe.|International Journal of Sport Nutrition and Exercise Metabolism IJSO|Int. J. Surg. Oncol.|International Journal of Surgical Oncology IJSP|Int. J. Surg. Pathol.|International Journal of Surgical Pathology IJSPP|Int. J. Sports Physiol. Perform.=Int. J. Sport. Physiol. Perform.|International Journal of Sports Physiology and Performance IJSTDAIDS|Int. J. STD AIDS|International Journal of STD & AIDS IJSTTT|Int. J. Softw. Tools Technol. Transf.=Int. J. Softw. Tools Technol. Tra.|International Journal on Software Tools for Technology Transfer IJSWIS|Int. J. Semant. Web Inf. Syst.=Int. J. Semant. Web Inf.|International Journal on Semantic Web and Information Systems IJT|Indian J. Tuberc.|The Indian Journal of Tuberculosis IJT1|Int. J. Thermophys.|International Journal of Thermophysics IJT2|Int. J. Toxicol.|International Journal of Toxicology IJTAHC|Int. J. Technol. Assess. Health Care=Int. J. Technol. Assess. Health C.|International Journal of Technology Assessment in Health Care IJTLD|Int. J. Tuberc. Lung Dis.=Int. J. Tuberc. Lung D.|International Journal of Tuberculosis and Lung Disease=The International Journal of Tuberculosis and Lung Disease IJTP|Int. J. Theor. Phys.|International Journal of Theoretical Physics IJU|Int. J. Urol.|International Journal of Urology IJUC|Int. J. Unconv. Comput.|International Journal of Unconventional Computing IJUFKB|Int. J. Uncertain. Fuzz. Knowl. B.|International Journal of Uncertainty Fuzziness and Knowledge-Based Systems IJUQ|Int. J. Uncertain. Quantif.=Int. J. Uncertain. Quan.|International Journal for Uncertainty Quantification IJWGS|Int. J. Web Grid Serv.|International Journal of Web and Grid Services IJWMIP|Int. J. Wavelets Multiresolut. Inf. Process.=Int. J. Wavelets Multiresolut. I.|International Journal of Wavelets, Multiresolution and Information Processing IJWSR|Int. J. Web Serv. Res.|International Journal of Web Services Research IJYT|Int. J. Yoga Therap.|International Journal of Yoga Therapy IL|Immunol. Lett.|Immunology Letters IL1|Informatica Lithuan|Informatica IM|Int. Microbiol.|International Microbiology IM1|Intern. Med.=Internal Med.|Internal Medicine IM2|Invent. Math.|Inventiones Mathematicae IM3|Izv. Math.|Izvestiya Mathematics IMAJ|Isr. Med. Assoc. J.=Israel Med. Assoc. J.|Israel Medical Association Journal=The Israel Medical Association Journal IMAJAM|IMA J. Appl. Math.|IMA Journal of Applied Mathematics IMAJMM|IMA J. Manag. Math.|IMA Journal of Management Mathematics IMAJNA|IMA J. Numer. Anal.|IMA Journal of Numerical Analysis IMB|Insect Mol. Biol.|Insect Molecular Biology IMET|Inorg. Mater. Engl. Tr.|Inorganic Materials IMH|Int. Marit. Health|International Maritime Health IMHJ|Infant Ment. Health J.|Infant Mental Health Journal IMHN|Issues Ment. Health Nurs.=Issues Ment. Health N.|Issues in Mental Health Nursing IMJ|Intern. Med. J.|Internal Medicine Journal IMJ1|Ir. Med. J.|Irish Medical Journal IMNS|Indagat. Math. New Ser.|Indagationes Mathematicae-New Series IMRN|Int. Math. Res. Notices|International Mathematics Research Notices IN|Interv. Neuroradiol.|Interventional Neuroradiology=Interventional Neuroradiology: Journal of Peritherapeutic Neuroradiology, Surgical Procedures and Related Neurosciences IN1|Invert. Neurosci.=Invertebr. Neurosci.|Invertebrate Neuroscience IND|Invest. New Drugs=Invest. New Drug.|Investigational New Drugs INFORMSJC|INFORMS J. Comput.|INFORMS Journal on Computing INMC|Inorg. Nano Met. Chem.|Inorganic and Nano-Metal Chemistry INR|Int. Nurs. Rev.|International Nursing Review IO|Int. Ophthalmol.|International Ophthalmology IO1|Int. Orthod.|International Orthodontics IO2|Int. Orthop.|International Orthopaedics IOC|Int. Ophthalmol. Clin.|International Ophthalmology Clinics IOJ|Iowa Orthop. J.|The Iowa Orthopaedic Journal IORV|Influenza Other Respir. Viruses=Influenza Other Respir. Viruse.|Influenza and Other Respiratory Viruses IOVS|Invest. Ophthalmol. Vis. Sci.=Invest. Ophthalmol. Visual Sci.|Investigative Ophthalmology & Visual Science IP|Indian Pediatr.=Indian Pediat.|Indian Pediatrics IP1|Inj. Prev.=Injury Prev.|Injury Prevention=Injury Prevention: Journal of the International Society for Child and Adolescent Injury Prevention IP2|Int. Psychogeriatr.|International Psychogeriatrics IP3|Inverse Probl.|Inverse Problems IPBS|Integr. Psychol. Behav. Sci.=Integr. Psychol. Behav.|Integrative Psychological & Behavioral Science=Integrative Psychological and Behavioral Science IPI|Inverse Probl. Imaging|Inverse Problems and Imaging IPJ|Iran. Polym. J.|Iranian Polymer Journal IPL|Inf. Process. Lett.=Inform. Process. Lett.|Information Processing Letters IPM|Inf. Process. Manag.=Inform. Process. Manage.|Information Processing & Management IPP|Int. Polym. Proc.|International Polymer Processing IPSRH|Int. Perspect. Sex. Reprod. Health=Int. Perspect. Sex. Reprod. Healt.|International Perspectives on Sexual and Reproductive Health IPT|Infrared Phys. Technol.=Infrared Phys. Techn.|Infrared Physics & Technology=Infrared Physics and Technology IQCHE|Int. Q. Community Health Educ.|International Quarterly of Community Health Education IR|Immunol. Res.|Immunologic Research IR1|Immunol. Rev.|Immunological Reviews IR2|Inflamm. Res.=Inflamm. Research|Inflammation Research IR3|Internet Res.|Internet Research IR4|Invest. Radiol.|Investigative Radiology IRCMB|Int. Rev. Cell Mol. Biol.=Int. Rev. Cel. Mol. Bio.|International Review of Cell and Molecular Biology IRI|Int. Rev. Immunol.|International Reviews of Immunology IRJ|Inform. Retrieval J.|Information Retrieval Journal IRN|Int. Rev. Neurobiol.|International Review of Neurobiology IRP|Int. Rev. Psychiatry=Int. Rev. Psychiatr.|International Review of Psychiatry IRPC|Int. Rev. Phys. Chem.|International Reviews in Physical Chemistry IS|Ideggyogy. Sz.|Ideggyógyászati Szemle IS1|Immunol. Suppl.|Immunology. Supplement IS2|Implement. Sci.|Implementation Science IS3|Inf. Syst.=Inform. Syst.|Information Systems IS4|Inform. Sciences|Information Sciences IS5|Insect Sci.|Insect Science IS6|Interdiscip. Sci.|Interdisciplinary Sciences, Computational Life Sciences ISAT0|ISA Trans.=ISA T.|ISA Transactions ISF|Inf. Syst. Front.=Inform. Syst. Front.|Information Systems Frontiers ISJ|Imaging Sci. J.|Imaging Science Journal ISM|Inform. Syst. Manage.|Information Systems Management ISP|Ig. Sanita Pubbl.|Igiene e Sanità Pubblica ISR|Int. Statist. Rev.|International Statistical Review IST|Inf. Softw. Technol.=Inform. Software Technol.|Information and Software Technology IST1|Instrum. Sci. Technol.|Instrumentation Science & Technology=Instrumentation Science and Technology IT|Inhal. Toxicol.|Inhalation Toxicology ITC|Inf. Technol. Control|Information Technology and Control ITGG|Interdiscip. Top. Gerontol. Geriatr.|Interdisciplinary Topics in Gerontology and Geriatrics ITJ|Int. Tinnitus J.|The International Tinnitus Journal ITP|IT Prof.|IT Professional ITSF|Integral Transform. Spec. Funct.|Integral Transforms and Special Functions IUBMBL|IUBMB Life|IUBMB Life IUJ|Int. Urogynecol. J.|International Urogynecology Journal IUMJ|Indiana Univ. Math. J.|Indiana University Mathematics Journal IUN|Int. Urol. Nephrol.|International Urology and Nephrology IV|In Vivo|In Vivo IV1|Inf. Vis.=Inform. Visual.|Information Visualization IVCDBA|In Vitro Cell. Dev. Biol. Anim.=In Vitro Cell. Dev. Biol. Animal|In Vitro Cellular & Developmental Biology. Animal IWJ|Int. Wound J.|International Wound Journal IZ|Integr. Zool.|Integrative Zoology JA|J. Adolesc.=J. Adolescence|Journal of Adolescence JA1|J. Agromedicine|Journal of Agromedicine JA2|J. Algebra|Journal of Algebra JA3|J. Algorithms|Journal of Algorithms JA4|J. Anat.|Journal of Anatomy JA5|J. Anesth.|Journal of Anesthesia JA6|J. Antibiot.|Journal of Antibiotics=The Journal of Antibiotics JA7|J. Arthroplasty|Journal of Arthroplasty=The Journal of Arthroplasty JA8|J. Asthma|Journal of Asthma=The Journal of Asthma JA9|J. Autoimmun.|Journal of Autoimmunity JAA|J. Algebra Appl.|Journal of Algebra and its Applications JAAA|J. Am. Acad. Audiol.|Journal of the American Academy of Audiology JAAC|J. Appl. Anal. Comput.|Journal of Applied Analysis and Computation JAACAP|J. Am. Acad. Child Adolesc. Psychiatry=J. Amer. Acad. Child Adolesc. Psy.|Journal of the American Academy of Child and Adolescent Psychiatry JAAD|J. Am. Acad. Dermatol.=J. Amer. Acad. Dermatol.|Journal of the American Academy of Dermatology JAAH|J. Aquat. Anim. Health|Journal of Aquatic Animal Health JAAHA|J. Am. Anim. Hosp. Assoc.=J. Amer. Anim. Hosp. Assn.|Journal of the American Animal Hospital Association JAALAS|J. Am. Assoc. Lab. Anim. Sci.=J. Am. Assoc. Lab. Anim.|Journal of the American Association for Laboratory Animal Science JAANP|J. Am. Assoc. Nurse Pract.=J. Am. Assoc. Nurse Pra.|Journal of the American Association of Nurse Practitioners JAAOS|J. Am. Acad. Orthop. Surg.=J. Am. Acad. Orthop. Sur.|Journal of the American Academy of Orthopaedic Surgeons=The Journal of the American Academy of Orthopaedic Surgeons JAAP|J. Anal. Appl. Pyrolysis=J. Anal. Appl. Pyrol.|Journal of Analytical and Applied Pyrolysis JAAPL|J. Am. Acad. Psychiatry Law=J. Am. Acad. Psychiatry|Journal of the American Academy of Psychiatry and the Law=The Journal of the American Academy of Psychiatry and the Law JAAS|J. Anal. At. Spectrom.=J. Anal. Atom. Spectrom.|Journal of Analytical Atomic Spectrometry JAAWS|J. Appl. Anim. Welf. Sci.|Journal of Applied Animal Welfare Science JAB|J. Appl. Biomech.|Journal of Applied Biomechanics JABA|J. Appl. Behav. Anal.|Journal of Applied Behavior Analysis JABES|J. Agric. Biol. Environ. Stat.=J. Agr. Biol. Envir. St.|Journal of Agricultural, Biological, and Environmental Statistics JABFM|J. Am. Board Fam. Med.|Journal of the American Board of Family Medicine JABFM1|J. Appl. Biomater. Funct. Mater.=J. Appl. Biomater. Func.|Journal of Applied Biomaterials & Functional Materials JAC|J. Algebr. Comb.|Journal of Algebraic Combinatorics JAC1|J. Alloys Compd.=J. Alloys Compounds|Journal of Alloys and Compounds JAC2|J. Antimicrob. Chemother.=J. Antimicrob. Chemoth.|Journal of Antimicrobial Chemotherapy=The Journal of Antimicrobial Chemotherapy JAC3|J. Appl. Crystallogr.=J. Appl. Cryst.|Journal of Applied Crystallography JAC4|J. Automat. Chem.|The Journal of Automatic Chemistry JACC|J. Am. Coll. Cardiol.=J. Amer. Coll. Cardiol.|Journal of the American College of Cardiology JACCCE|JACC Clin. Electrophysiol.|JACC. Clinical Electrophysiology JACCCI|JACC Cardiovasc. Imaging=JACC Cardiovasc. Imag.|JACC. Cardiovascular Imaging JACCCI1|JACC Cardiovasc. Interv.=JACC Cardiovasc. Inte.|JACC. Cardiovascular Interventions JACCHF|JACC Heart Fail.|JACC. Heart Failure JACET|J. Anal. Chem. Engl. Tr.|Journal of Analytical Chemistry JACH|J Am. Coll. Health=J Amer. Coll. Health|Journal of American College Health=Journal of American College Health: J of ACH JACI|J. Allergy Clin. Immunol.|The Journal of Allergy and Clinical Immunology JACIP|J. Allergy Clin. Immunol. Pract.=J. Aller. Cl. Imm. Pract.|Journal of Allergy and Clinical Immunology-In Practice=The Journal of Allergy and Clinical Immunology. in Practice JACM0|J. ACM|Journal of the ACM JACM1|J. Altern. Complement. Med.=J. Altern. Complem. Med.|Journal of Alternative and Complementary Medicine=The Journal of Alternative and Complementary Medicine: Research on Paradigm, Practice, and Policy JACM2|J. Ambul. Care Manage.|The Journal of Ambulatory Care Management JACMP|J. Appl. Clin. Med. Phys.|Journal of Applied Clinical Medical Physics JACN|J. Am. Coll. Nutr.=J. Amer. Coll. Nutr.|Journal of the American College of Nutrition JACP|J. Abnorm. Child Psychol.=J. Abnormal Child Psychol.|Journal of Abnormal Child Psychology JACR|J. Am. Coll. Radiol.|Journal of the American College of Radiology JACS|J. Am. Chem. Soc.=J. Amer. Chem. Soc.|Journal of the American Chemical Society JACS1|J. Am. Coll. Surg.=J. Amer. Coll. Surgeons|Journal of the American College of Surgeons JAD|J. Addict. Dis.|Journal of Addictive Diseases JAD1|J. Adhes. Dent.|Journal of Adhesive Dentistry=The Journal of Adhesive Dentistry JAD2|J. Affect. Disord.=J. Affect. Disorders|Journal of Affective Disorders JAD3|J. Alzheimers Dis.|Journal of Alzheimer's Disease JAD4|J. Anxiety Disord.|Journal of Anxiety Disorders JAD5|J. Atten. Disord.|Journal of Attention Disorders JADA|J. Am. Dent. Assoc.=J. Amer. Dent. Assn.|Journal of the American Dental Association=The Journal of the American Dental Association JADD|J. Autism Dev. Disord.|Journal of Autism and Developmental Disorders JAE|J. Anim. Ecol.|Journal of Animal Ecology=The Journal of Animal Ecology JAE1|J. Appl. Economet.|Journal of Applied Econometrics JAE2|J. Appl. Electrochem.|Journal of Applied Electrochemistry JAFC|J. Agric. Food Chem.=J. Agr. Food Chem.|Journal of Agricultural and Food Chemistry JAG|J. Algebraic Geom.|Journal of Algebraic Geometry JAG1|J. Appl. Genet.=J. Appl. Genetics|Journal of Applied Genetics JAG2|J. Appl. Gerontol.|Journal of Applied Gerontology JAGS|J. Am. Geriatr. Soc.=J. Amer. Geriat. Soc.|Journal of the American Geriatrics Society JAH|J. Adolesc. Health|The Journal of Adolescent Health JAH1|J. Aging Health|Journal of Aging and Health JAH2|J. Allied Health|Journal of Allied Health JAH3|J. Anesth. Hist.|Journal of Anesthesia History JAHA|J. Am. Heart Assoc.|Journal of the American Heart Association JAIDS|J. Acquir. Immune Defic. Syndr.|Journal of Acquired Immune Deficiency Syndromes JAIHC|J. Ambient Intell. Humaniz. Comput.=J. Ambient Intell. Humaniz. Comp.|Journal of Ambient Intelligence and Humanized Computing JAIR|J. Artif. Intell. Res.|Journal of Artificial Intelligence Research=The Journal of Artificial Intelligence Research JAIS|J. Assoc. Inf. Syst.|Journal of the Association for Information Systems JAISE|J. Ambient Intell. Smart Environ.=J. Ambient Intell. Smart Envir.|Journal of Ambient Intelligence and Smart Environments JAIST|J. Assoc. Inf. Sci. Technol.=J. Assoc. Inf. Sci. Tech.|Journal of the Association for Information Science and Technology JAL|J. Acad. Librariansh.|The Journal of Academic Librarianship JAM|J. Addict. Med.|Journal of Addiction Medicine JAM1|J. Anal. Math.|Journal D Analyse Mathematique JAM2|J. Appl. Microbiol.|Journal of Applied Microbiology JAMAC|JAMA Cardiol.|JAMA Cardiology JAMAD|JAMA Dermatol.|JAMA Dermatology JAMAFPS|JAMA Facial Plast. Surg.=JAMA Facial Plast. Su.|JAMA Facial Plastic Surgery JAMAIM|JAMA Intern. Med.|JAMA Internal Medicine JAMAN|JAMA Neurol.|JAMA Neurology JAMAO|JAMA Oncol.|JAMA Oncology JAMAO1|JAMA Ophthalmol.|JAMA Ophthalmology JAMAOHNS|JAMA Otolaryngol. Head Neck Surg.=JAMA Otolaryngol. Head Neck Su.|JAMA Otolaryngology: Head & Neck Surgery JAMAP|JAMA Pediatr.|JAMA Pediatrics JAMAP1|JAMA Psychiatry=JAMA Psychiat.|JAMA Psychiatry JAMAS|JAMA Surg.|JAMA Surgery JAMC|J. Anal. Methods Chem.|Journal of Analytical Methods in Chemistry JAMCA|J. Am. Mosq. Control Assoc.=J. Amer. Mosquito Contr. Assn.|Journal of the American Mosquito Control Association JAMCA1|J. Ayub Med. Coll. Abbottabad|Journal of Ayub Medical College, Abbottabad JAMDA|J. Am. Med. Dir. Assoc.|Journal of the American Medical Directors Association JAMIA|J. Am. Med. Inform. Assoc.=J. Amer. Med. Inform. Assoc.|Journal of the American Medical Informatics Association JAMPDD|J. Aerosol Med. Pulm. Drug Deliv.=J. Aerosol Med. Pulm. D.|Journal of Aerosol Medicine and Pulmonary Drug Delivery JAMS|J. Acupunct. Meridian Stud.|Journal of Acupuncture and Meridian Studies JAMS1|J. Amer. Math. Soc.|Journal of the American Mathematical Society JAMS2|J. Aust. Math. Soc.|Journal of the Australian Mathematical Society JAMS3|J. Avian Med. Surg.|Journal of Avian Medicine and Surgery JAMTP|J. Appl. Mech. Tech. Phys.|Journal of Applied Mechanics and Technical Physics JAN|J. Addict. Nurs.|Journal of Addictions Nursing JAN1|J. Adv. Nurs.|Journal of Advanced Nursing JANAIDSC|J. Assoc. Nurses AIDS Care=J. Assoc. Nurse. AIDS C.|The Journal of the Association of Nurses in AIDS Care=Janac: Journal of the Association of Nurses in AIDS Care JAND|J. Acad. Nutr. Diet.|Journal of the Academy of Nutrition and Dietetics JANPR|J. Asian Nat. Prod. Res.|Journal of Asian Natural Products Research JAO|J. Artif. Organs|Journal of Artificial Organs JAOA|J. Am. Osteopath. Assoc.|The Journal of the American Osteopathic Association JAOACI|J. AOAC Int.|Journal of AOAC International JAOS|J. Appl. Oral Sci.|Journal of Applied Oral Science=Journal of Applied Oral Science: Revista FOB JAOT|J. Adv. Oxid. Technol.|Journal of Advanced Oxidation Technologies JAP|J. Abnorm. Psychol.=J. Abnormal Psychol.|Journal of Abnormal Psychology JAP1|J. Anal. Psychol.|The Journal of Analytical Psychology JAP2|J. Appl. Phys.|Journal of Applied Physics JAP3|J. Appl. Physiol.|Journal of Applied Physiology JAP4|J. Appl. Probab.|Journal of Applied Probability JAP5|J. Appl. Psychol.|Journal of Applied Psychology=The Journal of Applied Psychology JAPA|J. Aging Phys. Act.=J. Aging Phys. Activ.|Journal of Aging and Physical Activity JAPA1|J. Am. Psychoanal. Assoc.=J. Amer. Psychoanal. Assn.|Journal of the American Psychoanalytic Association JAPI|J. Assoc. Physicians India|The Journal of the Association of Physicians of India JAPMA|J. Am. Podiatr. Med. Assoc.=J. Amer. Podiat. Med. Assn.|Journal of the American Podiatric Medical Association JAPNA|J. Am. Psychiatr. Nurses Assoc.=J. Am. Psych. Nurses Assoc.|Journal of the American Psychiatric Nurses Association JAPS|J. Appl. Polym. Sci.|Journal of Applied Polymer Science JAR|J. Autom. Reasoning|Journal of Automated Reasoning JARG|J. Assist. Reprod. Genet.=J. Assist. Reprod. Gen.|Journal of Assisted Reproduction and Genetics JARID|J. Appl. Res. Intellect. Disabil.=J. Appl. Res. Intellect.|Journal of Applied Research in Intellectual Disabilities JARO|J. Assoc. Res. Otolaryngol.|Journal of the Association for Research in Otolaryngology JAS|J. Aerosol Sci.|Journal of Aerosol Science JAS1|J. Aging Stud.|Journal of Aging Studies JAS2|J. Anim. Sci.|Journal of Animal Science JAS3|J. Appl. Spectrosc.|Journal of Applied Spectroscopy JAS4|J. Appl. Stat.|Journal of Applied Statistics JAS5|J. Archaeol. Sci.|Journal of Archaeological Science JASA|J. Acoust. Soc. Am.=J. Acoust. Soc. Amer.|Journal of the Acoustical Society of America=The Journal of the Acoustical Society of America JASA1|J. Am. Stat. Assoc.=J. Amer. Statist. Assoc.|Journal of the American Statistical Association JASE|J. Am. Soc. Echocardiogr.=J. Am. Soc. Echocardiog.|Journal of the American Society of Echocardiography JASH|J. Agric. Saf. Health|Journal of Agricultural Safety and Health JASH1|J. Am. Soc. Hypertens.|Journal of the American Society of Hypertension JASI|J. Anat. Soc. India|Journal of the Anatomical Society of India JASIS|J. Am. Soc. Inf. Sci.|Journal of the American Society for Information Science=Journal of the American Society for Information Science. American Society for Information Science JASIST|J. Am. Soc. Inf. Sci. Technol.|Journal of the American Society for Information Science and Technology JASMS|J. Am. Soc. Mass Spectrom.=J. Amer. Soc. Mass Spectrom.|Journal of the American Society for Mass Spectrometry JASN|J. Am. Soc. Nephrol.=J. Amer. Soc. Nephrol.|Journal of the American Society of Nephrology JAT|J. Anal. Toxicol.|Journal of Analytical Toxicology JAT1|J. Appl. Toxicol.|Journal of Applied Toxicology JAT2|J. Approx. Theory=J. Approx. Theor.|Journal of Approximation Theory JAT3|J. Atheroscler. Thromb.|Journal of Atherosclerosis and Thrombosis JAT4|J. Athl. Train.=J. Athl. Training|Journal of Athletic Training JAVMA|J. Am. Vet. Med. Assoc.|Journal of the American Veterinary Medical Association JAWMA|J. Air Waste Manag. Assoc.=J. Air Waste Manage.|Journal of the Air & Waste Management Association=Journal of the Air and Waste Management Association JAYAO|J. Adolesc. Young Adult Oncol.=J. Adolesc. Young Adul.|Journal of Adolescent and Young Adult Oncology JB|J. Bacteriol.|Journal of Bacteriology JB1|J. Biochem.|Journal of Biochemistry JB2|J. Biomech.|Journal of Biomechanics JB3|J. Biophotonics|Journal of Biophotonics JB4|J. Biosci.=J. Biosciences|Journal of Biosciences JB5|J. Biotechnol.|Journal of Biotechnology JBA|J. Behav. Addict.|Journal of Behavioral Addictions JBA1|J. Biomater. Appl.|Journal of Biomaterials Applications JBB|J. Bioenerg. Biomembr.=J. Bioenerg. Biomembrane.|Journal of Bioenergetics and Biomembranes JBB1|J. Biomed. Biotechnol.|Journal of Biomedicine & Biotechnology JBB2|J. Biosci. Bioeng.|Journal of Bioscience and Bioengineering JBBM|J. Biochem. Biophys. Methods=J. Biochem. Bioph. Methods|Journal of Biochemical and Biophysical Methods JBC|J. Biol. Chem.|Journal of Biological Chemistry=The Journal of Biological Chemistry JBCB|J. Bioinform. Comput. Biol.=J. Bioinf. Comput. Biol.|Journal of Bioinformatics and Computational Biology JBCEP|J. Bus. Contin. Emer. Plan.|Journal of Business Continuity & Emergency Planning JBCPP|J. Basic Clin. Physiol. Pharmacol.|Journal of Basic and Clinical Physiology and Pharmacology JBCR|J. Burn Care Res.|Journal of Burn Care & Research JBCS|J. Braz. Chem. Soc.=J. Brazil. Chem. Soc.|Journal of the Brazilian Chemical Society JBD|J. Biol. Dyn.=J. Biol. Dynam.|Journal of Biological Dynamics JBDC|J. Biomed. Discov. Collab.|Journal of Biomedical Discovery and Collaboration JBE|J. Biol. Eng.|Journal of Biological Engineering JBE1|J. Biomech. Eng.=J. Biomech. Eng. T. Asme|Journal of Biomechanical Engineering=Journal of Biomechanical Engineering-Transactions of the Asme JBES|J. Bus. Econ. Stat.|Journal of Business & Economic Statistics JBF|J. Bank. Financ.=J. Bank. Finan.|Journal of Banking & Finance JBHSR|J. Behav. Health Serv. Res.=J. Behav. Health Ser. R.|Journal of Behavioral Health Services & Research=The Journal of Behavioral Health Services & Research JBI|J. Bioeth. Inq.=J. Bioethical Inq.|Journal of Bioethical Inquiry JBI1|J. Biomed. Inform.|Journal of Biomedical Informatics JBIC|J. Biol. Inorg. Chem.|Journal of Biological Inorganic Chemistry JBIDSRIR|JBI Database System. Rev. Implement. Rep.|JBI Database of Systematic Reviews and Implementation Reports JBIP|J. Bronchology Interv. Pulmonol.|Journal of Bronchology & Interventional Pulmonology JBJSA|J. Bone Joint Surg. Am.=J. Bone Joint Surg. Amer. Vol.|Journal of Bone and Joint Surgery-American Volume=The Journal of Bone and Joint Surgery. American Volume JBJSCC|JBJS Case Connect.|JBJS Case Connector JBJSR|JBJS Rev.|JBJS Reviews JBM|J. Basic Microbiol.=J. Basic Microb.|Journal of Basic Microbiology JBM1|J. Behav. Med.|Journal of Behavioral Medicine JBMM|J. Bone Miner. Metab.|Journal of Bone and Mineral Metabolism JBMR|J. Back Musculoskelet. Rehabil.=J. Back Musculoskelet.|Journal of Back and Musculoskeletal Rehabilitation JBMR1|J. Bone Miner. Res.|Journal of Bone and Mineral Research JBMRA|J. Biomed. Mater. Res. A=J. Biomed. Mater. Res. Part A|Journal of Biomedical Materials Research. Part A JBMRPBAB|J. Biomed. Mater. Res. Part B Appl. Biomater.=J. Biomed. Mater. Res. Part B|Journal of Biomedical Materials Research Part B: Applied Biomaterials JBMT|J. Biochem. Mol. Toxicol.=J. Biochem. Mol. Toxic.|Journal of Biochemical and Molecular Toxicology JBMT1|J. Bodyw. Mov. Ther.|Journal of Bodywork and Movement Therapies JBN|J. Biomed. Nanotechnol.|Journal of Biomedical Nanotechnology JBN1|J. Bras. Nefrol.|Jornal Brasileiro de Nefrologia JBNMR|J. Biomol. NMR|Journal of Biomolecular NMR JBO|J. Biomed. Opt.|Journal of Biomedical Optics JBP|J. Biol. Phys.|Journal of Biological Physics JBP1|J. Bras. Pneumol.|Jornal Brasileiro de Pneumologia JBR|J. Biol. Rhythms=J. Biol. Rhythm.|Journal of Biological Rhythms JBR1|J. Breath Res.|Journal of Breath Research JBR2|J. Bus. Res.|Journal of Business Research JBRAAR|JBRA Assist. Reprod.|JBRA Assisted Reproduction JBRHA|J. Biol. Regul. Homeost. Agents=J. Biol. Regulat. Homeost. Agent.|Journal of Biological Regulators and Homeostatic Agents JBRT|J. Biol. Res. Thessaloniki|Journal of Biological Research: Thessaloniki JBS|J. Biol. Syst.|Journal of Biological Systems JBS1|J. Biomed. Sci.|Journal of Biomedical Science JBS2|J. Biomed. Semantics=J. Biomed. Semant.|Journal of Biomedical Semantics JBS3|J. Biopharm. Stat.|Journal of Biopharmaceutical Statistics JBS4|Joint Bone Spine|Joint, Bone, Spine: Revue du Rhumatisme JBSD|J. Biomol. Struct. Dyn.|Journal of Biomolecular Structure & Dynamics=Journal of Biomolecular Structure and Dynamics JBSPE|J. Biomater. Sci. Polym. Ed.=J. Biomat. Sci. Polym. E.|Journal of Biomaterials Science. Polymer Edition JBT|J. Biomol. Tech.|Journal of Biomolecular Techniques JBTE|J. Biomater. Tissue Eng.=J. Biomater. Tiss. Eng.|Journal of Biomaterials and Tissue Engineering JBTEP|J. Behav. Ther. Exp. Psychiatry=J. Behav. Ther. Exp. Psychiat.|Journal of Behavior Therapy and Experimental Psychiatry JBVOM|J. Binocul. Vis. Ocul. Motil.|Journal of Binocular Vision and Ocular Motility JC|J. Cardiol.|Journal of Cardiology JC1|J. Catal.|Journal of Catalysis JC2|J. Chem.=J. Chem. NY|Journal of Chemistry JC3|J. Cheminform.=J. Cheminformatics|Journal of Cheminformatics JC4|J. Chemom.=J. Chemometr.|Journal of Chemometrics JC5|J. Chemother.=J. Chemotherapy|Journal of Chemotherapy JC6|J. Classif.|Journal of Classification JC7|J. Complex.=J. Complexity|Journal of Complexity JC8|J. Cryptol.|Journal of Cryptology JC9|J. Cytol.|Journal of Cytology JCA|J. Cell. Autom.|Journal of Cellular Automata JCA1|J. Chromatogr. A|Journal of Chromatography. A JCA2|J. Clin. Anesth.|Journal of Clinical Anesthesia JCA3|J. Clin. Apher.=J. Clinical Apheresis|Journal of Clinical Apheresis JCA4|J. Commut. Algebr.|Journal of Commutative Algebra JCA5|J. Comput. Acoust.|Journal of Computational Acoustics JCA6|J. Convex Anal.|Journal of Convex Analysis JCAM|J. Comput. Appl. Math.|Journal of Computational and Applied Mathematics JCAMD|J. Comput. Aided Mol. Des.=J. Comput. Aid. Molec. Design|Journal of Computer-Aided Molecular Design JCAMH|J. Child Adolesc. Ment. Health|Journal of Child and Adolescent Mental Health JCAP|J. Child Adolesc. Psychopharmacol.=J. Child Adolesc. Psychopharm.|Journal of Child and Adolescent Psychopharmacology JCAPN|J. Child Adolesc. Psychiatr. Nurs.|Journal of Child and Adolescent Psychiatric Nursing JCAT|J. Comput. Assist. Tomogr.=J. Comput. Assist. Tomo.|Journal of Computer Assisted Tomography JCB|J. Cell. Biochem.|Journal of Cellular Biochemistry JCB1|J. Cell Biol.|Journal of Cell Biology=The Journal of Cell Biology JCB2|J. Comput. Biol.=J. Comput. Biology|Journal of Computational Biology=Journal of Computational Biology: A Journal of Computational Molecular Cell Biology JCBATBLS|J. Chromatogr. B Analyt. Technol. Biomed. Life Sci.=J. Chromatogr. B|Journal of Chromatography B=Journal of Chromatography. B, Analytical Technologies in the Biomedical and Life Sciences JCBFM|J. Cereb. Blood Flow Metab.=J. Cerebr. Blood Flow Metabol.|Journal of Cerebral Blood Flow and Metabolism JCC|J. Carbohydr. Chem.=J. Carbohyd. Chem.|Journal of Carbohydrate Chemistry JCC1|J. Chem. Crystallogr.=J. Chem. Crystallography|Journal of Chemical Crystallography JCC2|J. Comb. Chem.|Journal of Combinatorial Chemistry JCC3|J. Comput. Chem.|Journal of Computational Chemistry JCC4|J. Coord. Chem.|Journal of Coordination Chemistry JCC5|J. Crit. Care|Journal of Critical Care JCC6|J. Crohns Colitis|Journal of Crohn's & Colitis JCCAP|J. Clin. Child Adolesc. Psychol.=J. Clin. Child Adolesc.|Journal of Clinical Child and Adolescent Psychology JCCG|J. Cross Cult. Gerontol.|Journal of Cross-Cultural Gerontology JCCP|J. Consult. Clin. Psychol.=J. Consult. Clin. Psych.|Journal of Consulting and Clinical Psychology JCCS|J. Cell Commun. Signal.|Journal of Cell Communication and Signaling JCCS1|J. Chil. Chem. Soc.|Journal of the Chilean Chemical Society JCCST|J. Chin. Chem. Soc. Taip|Journal of the Chinese Chemical Society JCCT|J. Cardiovasc. Comput. Tomogr.=J. Cardiovasc. Comput.|Journal of Cardiovascular Computed Tomography JCD|J. Clin. Densitom.|Journal of Clinical Densitometry JCD1|J. Comb. Des.|Journal of Combinatorial Designs JCD2|J. Commun. Disord.|Journal of Communication Disorders JCD3|J. Cosmet. Dermatol.=J. Cosmet. Dermatol. US|Journal of Cosmetic Dermatology JCDP|J. Contemp. Dent. Pract.|The Journal of Contemporary Dental Practice JCE|J. Cancer Educ.|Journal of Cancer Education JCE1|J. Cardiovasc. Electrophysiol.=J. Cardiovasc. Electr.|Journal of Cardiovascular Electrophysiology JCE2|J. Chem. Ecol.|Journal of Chemical Ecology JCE3|J. Chem. Educ.|Journal of Chemical Education JCE4|J. Clin. Epidemiol.|Journal of Clinical Epidemiology JCED|J. Chem. Eng. Data|Journal of Chemical and Engineering Data JCEH|J. Clin. Exp. Hematop.|Journal of Clinical and Experimental Hematopathology JCEHP|J. Contin. Educ. Health Prof.=J. Contin. Educ. Health|Journal of Continuing Education in the Health Professions=The Journal of Continuing Education in the Health Professions JCEJ|J. Chem. Eng. Jpn.|Journal of Chemical Engineering of Japan JCEN|J. Clin. Exp. Neuropsychol.=J. Clin. Exp. Neuropsyc.|Journal of Clinical and Experimental Neuropsychology JCEN1|J. Contin. Educ. Nurs.=J. Contin. Educ. Nursing|Journal of Continuing Education in Nursing JCER|J. Comp. Eff. Res.=J. Comp. Effect. Res.|Journal of Comparative Effectiveness Research JCF|J. Card. Fail.|Journal of Cardiac Failure JCF1|J. Cyst. Fibros.|Journal of Cystic Fibrosis JCG|J. Clin. Gastroenterol.|Journal of Clinical Gastroenterology JCG1|J. Cryst. Growth|Journal of Crystal Growth JCGS|J. Comput. Graph. Stat.=J. Comput. Graph. Statist.|Journal of Computational and Graphical Statistics JCH|J. Community Health=J. Commun. Health|Journal of Community Health JCH1|J. Contam. Hydrol.|Journal of Contaminant Hydrology JCHC|J. Child Health Care|Journal of Child Health Care=Journal of Child Health Care: for Professionals Working with Children in the Hospital and Community JCHC1|J. Correct. Health Care=J. Correct. Health Car.|Journal of Correctional Health Care JCHN|J. Community Health Nurs.=J. Commun. Health Nurs.|Journal of Community Health Nursing JCI|J. Clin. Immunol.|Journal of Clinical Immunology JCI1|J. Clin. Invest.|Journal of Clinical Investigation=The Journal of Clinical Investigation JCICS|J. Chem. Inf. Comput. Sci.|Journal of Chemical Information and Computer Sciences JCII|JCI Insight|JCI Insight JCIM|J. Chem. Inf. Model.|Journal of Chemical Information and Modeling JCIM1|J. Complement. Integr. Med.|Journal of Complementary & Integrative Medicine JCIS|J. Colloid Interface Sci.=J. Colloid Interf. Sci.|Journal of Colloid and Interface Science JCIS1|J. Comput. Inform. Syst.|Journal of Computer Information Systems JCJQPS|Jt. Comm. J. Qual. Patient Saf.|Joint Commission Journal on Quality and Patient Safety JCL|J. Child Lang.|Journal of Child Language JCL1|J. Clin. Lipidol.|Journal of Clinical Lipidology JCLA|J. Clin. Lab. Anal.|Journal of Clinical Laboratory Analysis JCLT|J. Cosmet. Laser Ther.|Journal of Cosmetic and Laser Therapy JCM|J. Clin. Microbiol.|Journal of Clinical Microbiology JCM1|J. Comput. Math.|Journal of Computational Mathematics=Journal of Computational Mathematics: An International Journal on Numerical Methods, Analysis and Applications JCMA|J. Chin. Med. Assoc.|Journal of the Chinese Medical Association JCMAAA|J. Contemp. Math. Anal. Armen. Aca.|Journal of Contemporary Mathematical Analysis-Armenian Academy of Sciences JCMC|J. Clin. Monit. Comput.=J. Clin. Monitor. Comput.|Journal of Clinical Monitoring and Computing JCMM|J. Cell. Mol. Med.|Journal of Cellular and Molecular Medicine JCMR|J. Cardiovasc. Magn. Reson.=J. Cardiovasc. Magn. R.|Journal of Cardiovascular Magnetic Resonance JCMS|J. Cutan. Med. Surg.|Journal of Cutaneous Medicine and Surgery JCN|J. Cardiovasc. Nurs.|Journal of Cardiovascular Nursing=The Journal of Cardiovascular Nursing JCN1|J. Chem. Neuroanat.|Journal of Chemical Neuroanatomy JCN2|J. Child Neurol.|Journal of Child Neurology JCN3|J. Christ. Nurs.|Journal of Christian Nursing: A Quarterly Publication of Nurses Christian Fellowship JCN4|J. Clin. Neurophysiol.|Journal of Clinical Neurophysiology JCN5|J. Clin. Neurosci.|Journal of Clinical Neuroscience JCN6|J. Clin. Nurs.|Journal of Clinical Nursing JCN7|J. Cogn. Neurosci.=J. Cognitive Neurosci.|Journal of Cognitive Neuroscience JCN8|J. Comp. Neurol.|Journal of Comparative Neurology=The Journal of Comparative Neurology JCN9|J. Comput. Neurosci.|Journal of Computational Neuroscience JCND|J. Clin. Neuromuscul. Dis.|Journal of Clinical Neuromuscular Disease JCNSK|J. Commun. Netw. S Kor|Journal of Communications and Networks JCO|J. Clin. Oncol.|Journal of Clinical Oncology JCO1|J. Clin. Orthod.|Journal of Clinical Orthodontics JCO2|J. Comb. Optim.|Journal of Combinatorial Optimization JCOU|J. CO2 Util.|Journal of CO2 Utilization JCP|J. Cardiovasc. Pharmacol.=J. Cardiovasc. Pharm.|Journal of Cardiovascular Pharmacology JCP1|J. Cell. Physiol.|Journal of Cellular Physiology JCP2|J. Cell. Plast.|Journal of Cellular Plastics JCP3|J. Chem. Phys.|Journal of Chemical Physics=The Journal of Chemical Physics JCP4|J. Clin. Pathol.|Journal of Clinical Pathology JCP5|J. Clin. Periodontol.|Journal of Clinical Periodontology JCP6|J. Clin. Pharmacol.|Journal of Clinical Pharmacology JCP7|J. Clin. Psychiatry|The Journal of Clinical Psychiatry JCP8|J. Clin. Psychol.|Journal of Clinical Psychology JCP9|J. Clin. Psychopharmacol.=J. Clin. Psychopharm.|Journal of Clinical Psychopharmacology JCP10|J. Community Psychol.|Journal of Community Psychology JCP11|J. Comp. Pathol.|Journal of Comparative Pathology JCP12|J. Comp. Psychol.|Journal of Comparative Psychology JCP13|J. Comput. Phys.|Journal of Computational Physics JCP14|J. Couns. Psychol.|Journal of Counseling Psychology JCP15|J. Cutan. Pathol.=J. Cutaneous Pathol.|Journal of Cutaneous Pathology JCPA|J. Comp. Physiol. A|Journal of Comparative Physiology. A, Sensory, Neural, and Behavioral Physiology=Journal of Comparative Physiology. A, Neuroethology, Sensory, Neural, and Behavioral Physiology JCPAAS|J. Contemp. Phys. Armen. Acad. Sci.|Journal of Contemporary Physics-Armenian Academy of Sciences JCPBBSEP|J. Comp. Physiol. B Biochem. Syst. Environ. Physiol.=J. Comp. Physiol. B|Journal of Comparative Physiology. B, Biochemical, Systemic, and Environmental Physiology JCPD|J. Clin. Pediatr. Dent.|Journal of Clinical Pediatric Dentistry=The Journal of Clinical Pediatric Dentistry JCPMS|J. Clin. Psychol. Med. Settings=J. Clin. Psychol. Med. S.|Journal of Clinical Psychology in Medical Settings JCPP|J. Child Psychol. Psychiatry|Journal of Child Psychology and Psychiatry, and Allied Disciplines JCPSP|J. Coll. Physicians Surg. Pak.|Journal of the College of Physicians and Surgeons: Pakistan JCPT|J. Cardiovasc. Pharmacol. Ther.=J. Cardiovasc. Pharm. T.|Journal of Cardiovascular Pharmacology and Therapeutics JCPT1|J. Clin. Pharm. Ther.|Journal of Clinical Pharmacy and Therapeutics JCR|J. Cardiopulm. Rehabil.|Journal of Cardiopulmonary Rehabilitation=Journal of Cardiopulmonary Rehabilitation and Prevention JCR1|J. Chem. Res.|Journal of Chemical Research JCR2|J. Clin. Rheumatol.|Journal of Clinical Rheumatology: Practical Reports on Rheumatic & Musculoskeletal Diseases JCR3|J. Control. Release=J. Controlled Release|Journal of Controlled Release JCRCO|J. Cancer Res. Clin. Oncol.=J. Cancer Res. Clin.|Journal of Cancer Research and Clinical Oncology JCRPE|J. Clin. Res. Pediatr. Endocrinol.=J. Clin. Res. Pediatr. E.|Journal of Clinical Research in Pediatric Endocrinology JCRS|J. Cataract Refract. Surg.=J. Cataract Refr. Surg.|Journal of Cataract and Refractive Surgery JCRT|J. Cancer Res. Ther.=J. Canc. Res. Ther.|Journal of Cancer Research and Therapeutics JCS|J. Cancer Surviv.|Journal of Cancer Survivorship=Journal of Cancer Survivorship: Research and Practice JCS1|J. Card. Surg.=J. Cardiac Surg.|Journal of Cardiac Surgery JCS2|J. Cardiothorac. Surg.|Journal of Cardiothoracic Surgery JCS3|J. Cell Sci.|Journal of Cell Science JCS4|J. Cereal Sci.|Journal of Cereal Science JCS5|J. Chem. Sci.|Journal of Chemical Sciences JCS6|J. Chromatogr. Sci.|Journal of Chromatographic Science JCS7|J. Cluster Sci.|Journal of Cluster Science JCS8|J. Comput. Sci.=J. Comput. Sci. Neth.|Journal of Computational Science JCS9|J. Cosmet. Sci.|Journal of Cosmetic Science JCS10|J. Craniofac. Surg.=J. Craniofac. Surgery|Journal of Craniofacial Surgery=The Journal of Craniofacial Surgery JCS11|J. Craniomaxillofac. Surg.=J. Cranio Maxillofac. Surg.|Journal of Cranio-Maxillo-Facial Surgery JCSA|J. Chem. Soc. A|Journal of the Chemical Society A: Inorganic, Physical, Theoretical JCSA1|J. Child Sex. Abus.|Journal of Child Sexual Abuse JCSFT|J. Chem. Soc. Faraday Trans.|Journal of the Chemical Society, Faraday Transactions JCSM|J. Cachexia Sarcopenia Muscle=J. Cachexia Sarcopeni.|Journal of Cachexia, Sarcopenia and Muscle JCSM1|J. Clin. Sleep Med.|Journal of Clinical Sleep Medicine JCSP|J. Chem. Soc. Pakistan|Journal of the Chemical Society of Pakistan JCSPT|J. Chem. Soc. Perkin Trans. 2|Journal of the Chemical Society, Perkin Transactions 2 JCSS|J. Comput. Syst. Sci.|Journal of Computer and System Sciences JCSSIET|J. Comput. Syst. Sci. Int. Engl. Tr.|Journal of Computer and Systems Sciences International JCST|J. Comput. Sci. Technol.=J. Comput. Sci. Tech. Ch|Journal of Computer Science and Technology JCT|J. Chem. Thermodyn.|Journal of Chemical Thermodynamics=The Journal of Chemical Thermodynamics JCTA|J. Comb. Theory A|Journal of Combinatorial Theory Series A JCTB|J. Chem. Technol. Biotechnol.=J. Chem. Technol. Biot.|Journal of Chemical Technology and Biotechnology JCTB1|J. Comb. Theory B|Journal of Combinatorial Theory Series B JCTC|J. Chem. Theory Comput.|Journal of Chemical Theory and Computation JCTE|J. Commun. Technol. Electron.|Journal of Communications Technology and Electronics JCTR|J. Cardiovasc. Transl. Res.=J. Cardiovasc. Transl.|Journal of Cardiovascular Translational Research JCTT|J. Comput. Theor. Trans.|Journal of Computational and Theoretical Transport JCU|J. Clin. Ultrasound|Journal of Clinical Ultrasound JCV|J. Clin. Virol.|Journal of Clinical Virology JCVA|J. Cardiothorac. Vasc. Anesth.=J. Cardiothor. Vasc. An.|Journal of Cardiothoracic and Vascular Anesthesia JD|J. Dent.|Journal of Dentistry JD1|J. Dermatol.|Journal of Dermatology=The Journal of Dermatology JD2|J. Diabetes|Journal of Diabetes JDA|J. Discrete Algorithms|Journal of Discrete Algorithms JDBP|J. Dev. Behav. Pediatr.=J. Develop. Behav. Pediat.|Journal of Developmental and Behavioral Pediatrics JDC|J. Diabetes Complicat.=J. Diabetes Complication.|Journal of Diabetes and its Complications JDD|J. Dig. Dis.=J. Digest. Dis.|Journal of Digestive Diseases JDD1|J. Drugs Dermatol.|Journal of Drugs in Dermatology JDD2|J. Dual Diagn.|Journal of Dual Diagnosis JDDE|J. Dyn. Differ. Equ.|Journal of Dynamics and Differential Equations JDE|J. Dent. Educ.|Journal of Dental Education JDE1|J. Differ. Equ.=J. Differential Equations|Journal of Differential Equations JDE2|J. Drug Educ.|Journal of Drug Education JDEA|J. Differ. Equ. Appl.|Journal of Difference Equations and Applications JDG|J. Differen. Geom.|Journal of Differential Geometry JDH|J. Dent. Hyg.|Journal of Dental Hygiene JDI|J. Diabetes Investig.=J. Diabetes Invest.|Journal of Diabetes Investigation JDI1|J. Digit. Imaging=J. Digital Imaging|Journal of Digital Imaging JDM|J. Database Manage.|Journal of Database Management JDM1|Judgm. Decis. Mak.|Judgment and Decision Making JDMS|J. Dance Med. Sci.|Journal of Dance Medicine & Science JDOHD|J. Dev. Orig. Health Dis.=J. Dev. Orig. Hlth. Dis.|Journal of Developmental Origins of Health and Disease JDR|J. Dairy Res.|Journal of Dairy Research=The Journal of Dairy Research JDR1|J. Dent. Res.|Journal of Dental Research JDR2|J. Diabetes Res.|Journal of Diabetes Research JDS|J. Dairy Sci.|Journal of Dairy Science JDS1|J. Dermatol. Sci.=J. Dermatological Sci.|Journal of Dermatological Science JDS2|J. Diet. Suppl.|Journal of Dietary Supplements JDSDE|J. Deaf Stud. Deaf Educ.=J. Deaf Stud. Deaf Edu.|Journal of Deaf Studies and Deaf Education JDST|J. Diabetes Sci. Technol.|Journal of Diabetes Science and Technology JDST1|J. Dispers. Sci. Technol.=J. Dispersion Sci. Technol.|Journal of Dispersion Science and Technology JDT|J. Dermatolog. Treat.|The Journal of Dermatological Treatment JDT1|J. Drug Target.=J. Drug Targeting|Journal of Drug Targeting JE|J. Echocardiogr.|Journal of Echocardiography JE1|J. Econom.=J. Econometrics|Journal of Econometrics JE2|J. Electrocardiol.|Journal of Electrocardiology JE3|J. Endocrinol.|Journal of Endocrinology=The Journal of Endocrinology JE4|J. Endod.=J. Endodont.|Journal of Endodontics JE5|J. Endourol.|Journal of Endourology JE6|J. Epidemiol.|Journal of Epidemiology JE7|J. Ethnobiol.|Journal of Ethnobiology JE8|J. Ethnopharmacol.|Journal of Ethnopharmacology JEAB|J. Exp. Anal. Behav.|Journal of the Experimental Analysis of Behavior JEADV|J. Eur. Acad. Dermatol. Venereol.=J. Eur. Acad. Dermatol.|Journal of the European Academy of Dermatology and Venereology JEAN|J. Elder Abuse Negl.|Journal of Elder Abuse & Neglect JEB|J. Evol. Biol.=J. Evolution. Biol.|Journal of Evolutionary Biology JEB1|J. Exp. Biol.|Journal of Experimental Biology=The Journal of Experimental Biology JEB2|J. Exp. Bot.|Journal of Experimental Botany JEBDP|J. Evid. Based Dent. Pract.=J. Evid. Based Dent. Pr.|Journal of Evidence-Based Dental Practice=The Journal of Evidence-Based Dental Practice JEBIM|J. Evid. Based Integr. Med.|Journal of Evidence-Based Integrative Medicine JEBM|J. Evid. Based Med.|Journal of Evidence-Based Medicine JEBP|J. Evol. Biochem. Physiol.=J. Evol. Biochem. Physl Engl. Tr.|Journal of Evolutionary Biochemistry and Physiology JEBS|J. Educ. Behav. Stat.|Journal of Educational and Behavioral Statistics JEC|J. Electroanal. Chem.|Journal of Electroanalytical Chemistry JEC1|J. Energy Chem.|Journal of Energy Chemistry JECCR|J. Exp. Clin. Cancer Res.=J. Exp. Clin. Canc. Res.|Journal of Experimental & Clinical Cancer Research JECH|J. Epidemiol. Community Health=J. Epidemiol. Commun. H.|Journal of Epidemiology and Community Health JECP|J. Eval. Clin. Pract.|Journal of Evaluation in Clinical Practice JECP1|J. Exp. Child Psychol.|Journal of Experimental Child Psychology JECT|J. Extra Corpor. Technol.|The Journal of Extra-Corporeal Technology JEE|J. Econ. Entomol.|Journal of Economic Entomology JEE1|J. Ethnobiol. Ethnomed.|Journal of Ethnobiology and Ethnomedicine JEE2|J. Evol. Equ.|Journal of Evolution Equations JEEHP|J. Educ. Eval. Health Prof.|Journal of Educational Evaluation for Health Professions JEF|J. Empir. Finance=J. Empir. Financ.|Journal of Empirical Finance JEGH|J. Epidemiol. Glob. Health|Journal of Epidemiology and Global Health JEI|J. Endocrinol. Invest.|Journal of Endocrinological Investigation JEIMC|J. Enzyme Inhib. Med. Chem.=J. Enzym. Inhib. Med. Chem.|Journal of Enzyme Inhibition and Medicinal Chemistry JEK|J. Electromyogr. Kinesiol.=J. Electromyograph. Kinesiol.|Journal of Electromyography and Kinesiology JEM|J. Emerg. Manag.|Journal of Emergency Management JEM1|J. Emerg. Med.|Journal of Emergency Medicine=The Journal of Emergency Medicine JEM2|J. Environ. Manage.|Journal of Environment Management=Journal of Environmental Management JEM3|J. Eukaryot. Microbiol.|Journal of Eukaryotic Microbiology=The Journal of Eukaryotic Microbiology JEM4|J. Exp. Med.|Journal of Experimental Medicine=The Journal of Experimental Medicine JEMS|J. Eur. Math. Soc.|Journal of the European Mathematical Society JEN|J. Emerg. Nurs.|Journal of Emergency Nursing JEN1|J. Exp. Nanosci.|Journal of Experimental Nanoscience JENCI|J. Egypt. Natl. Canc. Inst.|Journal of the Egyptian National Cancer Institute JEOSRP|J. Eur. Opt. Soc. Rapid Publ.=J. Eur. Opt. Soc. Rapid|Journal of the European Optical Society. Rapid Publications JEPA|J. Exp. Psychol. Appl.=J. Exp. Psychol. Applied|Journal of Experimental Psychology. Applied JEPALC|J. Exp. Psychol. Anim. Learn. Cogn.=J. Exp. Psychol. Anim. L.|Journal of Experimental Psychology. Animal Learning and Cognition JEPG|J. Exp. Psychol. Gen.|Journal of Experimental Psychology. General JEPH|J. Environ. Public Health|Journal of Environmental and Public Health JEPHPP|J. Exp. Psychol. Hum. Percept. Perform.=J. Exp. Psychol. Hum. Percep. Perf.|Journal of Experimental Psychology. Human Perception and Performance JEPLMC|J. Exp. Psychol. Learn. Mem. Cogn.=J. Exp. Psychol. Learn.|Journal of Experimental Psychology. Learning, Memory, and Cognition JEPTO|J. Environ. Pathol. Toxicol. Oncol.=J. Environ. Pathol. Toxicol. Onc.|Journal of Environmental Pathology, Toxicology and Oncology JEQ|J. Environ. Qual.|Journal of Environment Quality=Journal of Environmental Quality JER|J. Environ. Radioact.=J. Environ. Radioactiv.|Journal of Environment Radioactivity=Journal of Environmental Radioactivity JERD|J. Esthet. Restor. Dent.|Journal of Esthetic and Restorative Dentistry JERHRE|J. Empir. Res. Hum. Res. Ethics=J. Empir. Res. Hum. Res.|Journal of Empirical Research on Human Research Ethics JES|J. Electrochem. Soc.|Journal of the Electrochemical Society JESA|J. Ethn. Subst. Abuse|Journal of Ethnicity in Substance Abuse JESEE|J. Expo. Sci. Environ. Epidemiol.=J. Expo. Sci. Env. Epid.|Journal of Exposure Science & Environmental Epidemiology=Journal of Exposure Science and Environmental Epidemiology JESHB|J. Environ. Sci. Health B=J. Environ. Sci. Health B Pestic.|Journal of Environmental Science and Health. Part. B, Pesticides, Food Contaminants, and Agricultural Wastes JESHCECER|J. Environ. Sci. Health C Environ. Carcinog. Ecotoxicol. Rev.=J. Environ. Sci. Health C Envir.|Journal of Environmental Science and Health Part C: Environmental Carcinogenesis & Ecotoxicology Reviews JESRP|J. Electron Spectros. Relat. Phenomena=J. Electron Spectrosc. Relat. Phenom.|Journal of Electron Spectroscopy and Related Phenomena JEST|J. Electrochem. Sci. Technol.|Journal of Electrochemical Science and Technology JET|J. Endovasc. Ther.=J. Endovascular Therapy|Journal of Endovascular Therapy JETAI|J. Exp. Theor. Artif. Intell.=J. Exp. Theor. Artif. In.|Journal of Experimental & Theoretical Artificial Intelligence JETO|J. Exp. Ther. Oncol.|Journal of Experimental Therapeutics & Oncology JETP|J. Exp. Theor. Phys.|Journal of Experimental and Theoretical Physics JETPL|JETP Lett.=JETP Lett. Engl. Tr.|JETP Letters JETR|J. Eng. Thermophys. Rus|Journal of Engineering Thermophysics JEV|J. Extracell. Vesicles|Journal of Extracellular Vesicles JEZAEIP|J. Exp. Zool. A Ecol. Integr. Physiol.|Journal of Experimental Zoology Part A: Ecological and Integrative Physiology JEZBMDE|J. Exp. Zool. B Mol. Dev. Evol.=J. Exp. Zool. Part B|Journal of Experimental Zoology Part B: Molecular and Developmental Evolution JF|J. Fluoresc.|Journal of Fluorescence JFA|J. Frailty Aging|The Journal of Frailty & Aging JFA1|J. Funct. Anal.|Journal of Functional Analysis JFAA|J. Fourier Anal. Appl.|Journal of Fourier Analysis and Applications=The Journal of Fourier Analysis and Applications JFAR|J. Foot Ankle Res.|Journal of Foot and Ankle Research JFAS|J. Foot Ankle Surg.|Journal of Foot & Ankle Surgery=The Journal of Foot and Ankle Surgery JFB|J. Fish Biol.|Journal of Fish Biology JFC|J. Flow Chem.|Journal of Flow Chemistry JFC1|J. Fluor. Chem.=J. Fluorine Chem.|Journal of Fluorine Chemistry JFCA|J. Food Compost. Anal.=J. Food Compos. Anal.|Journal of Food Composition and Analysis JFD|J. Fish Dis.=J. Fish Diseases|Journal of Fish Diseases JFD1|J. Fluency Disord.|Journal of Fluency Disorders JFDA|J. Food Drug Anal.|Journal of Food and Drug Analysis JFE|J. Food Eng.|Journal of Food Engineering JFLM|J. Forensic Leg. Med.|Journal of Forensic and Legal Medicine JFMS|J. Feline Med. Surg.|Journal of Feline Medicine and Surgery JFN|J. Fam. Nurs.|Journal of Family Nursing JFN1|J. Forensic Nurs.|Journal of Forensic Nursing JFO|J. Forensic Odontostomatol|The Journal of Forensic Odonto-Stomatology JFO1|J. Fr. Ophtalmol.|Journal Français D'ophtalmologie JFP|J. Fam. Pract.=J. Fam. Practice|Journal of Family Practice=The Journal of Family Practice JFP1|J. Fam. Psychol.=J. Family Psychology|Journal of Family Psychology JFP2|J. Food Prot.=J. Food Protect.|Journal of Food Protection JFP3|J. Funct. Program.|Journal of Functional Programming JFPTA|J. Fixed Point Theory Appl.|Journal of Fixed Point Theory and Applications JFS|J. Food Sci.|Journal of Food Science JFS1|J. Forensic Sci.|Journal of Forensic Sciences JFS2|J. Funct. Space.|Journal of Function Spaces JG|J. Gastroenterol.=J. Gastroenterology|Journal of Gastroenterology JG1|J. Genet.|Journal of Genetics JG2|J. Geod.=J. Geodesy|Journal of Geodesy JG3|J. Glaucoma|Journal of Glaucoma JGA|J. Geom. Anal.|Journal of Geometric Analysis JGABSMS|J. Gerontol. A Biol. Sci. Med. Sci.|The Journals of Gerontology. Series A, Biological Sciences and Medical Sciences JGAM|J. Gen. Appl. Microbiol.=J. Gen. Appl. Microbiol. Tokyo|Journal of General and Applied Microbiology=The Journal of General and Applied Microbiology JGAR|J. Glob. Antimicrob. Resist.=J. Glob. Antimicrob. Re.|Journal of Global Antimicrobial Resistance JGC|J. Gastrointest. Cancer|Journal of Gastrointestinal Cancer JGC1|J. Genet. Couns.|Journal of Genetic Counseling JGC2|J. Grid Comput.|Journal of Grid Computing JGCD|J. Guid. Control Dyn.=J. Guid. Control Dynam.|Journal of Guidance, Control, and Dynamics JGG|J. Genet. Genomics|Journal of Genetics and Genomics JGH|J. Gastroenterol. Hepatol.=J. Gastroen. Hepatol.|Journal of Gastroenterology and Hepatology JGH1|J. Glob. Health|Journal of Global Health JGIM|J. Gen. Intern. Med.|Journal of General Internal Medicine JGLD|J. Gastrointestin. Liver Dis.=J. Gastrointest. Liver Dis.|Journal of Gastrointestinal and Liver Diseases JGM|J. Gene Med.|Journal of Gene Medicine=The Journal of Gene Medicine JGM1|J. Geom. Mech.|Journal of Geometric Mechanics JGME|J. Grad. Med. Educ.|Journal of Graduate Medical Education JGN|J. Gerontol. Nurs.|Journal of Gerontological Nursing JGO|J. Geriatr. Oncol.|Journal of Geriatric Oncology JGO1|J. Glob. Oncol.|Journal of Global Oncology JGO2|J. Glob. Optim.=J. Global Optim.|Journal of Global Optimization JGO3|J. Gynecol. Oncol.|Journal of Gynecologic Oncology JGOHR|J. Gynecol. Obstet. Hum. Reprod.=J. Gynecol. Obstet. Hum.|Journal of Gynecology Obstetrics and Human Reproduction JGP|J. Gen. Physiol.|Journal of General Physiology=The Journal of General Physiology JGP1|J. Gen. Psychol.|Journal of General Psychology=The Journal of General Psychology JGP2|J. Genet. Psychol.|Journal of Genetic Psychology=The Journal of Genetic Psychology JGP3|J. Geom. Physics|Journal of Geometry and Physics JGPN|J. Geriatr. Psychiatry Neurol.=J. Geriatr. Psychiatr. Neurol.|Journal of Geriatric Psychiatry and Neurology JGPT|J. Geriatr. Phys. Ther.|Journal of Geriatric Physical Therapy JGS|J. Gambl. Stud.|Journal of Gambling Studies JGS1|J. Gastrointest. Surg.|Journal of Gastrointestinal Surgery JGSUK|J. Grey Syst. UK|Journal of Grey System JGT|J. Graph Theor.|Journal of Graph Theory JGT1|J. Group Theory|Journal of Group Theory JGV|J. Gen. Virol.|Journal of General Virology=The Journal of General Virology JH|J. Helminthol.|Journal of Helminthology JH1|J. Hematop.|Journal of Hematopathology JH2|J. Hepatol.|Journal of Hepatology JH3|J. Hered.|Journal of Heredity=The Journal of Heredity JH4|J. Heuristics|Journal of Heuristics JH5|J. Histotechnol.|Journal of Histotechnology JH6|J. Homosex.=J. Homosexual.|Journal of Homosexuality JH7|J. Hydrol.|Journal of Hydrology JH8|J. Hypertens.=J. Hypertension|Journal of Hypertension JHB|J. Hist. Biol.|Journal of the History of Biology JHBS|J. Hist. Behav. Sci.|Journal of the History of the Behavioral Sciences JHC|J. Health Commun.|Journal of Health Communication JHC1|J. Heterocycl. Chem.=J. Heterocyclic Chem.|Journal of Heterocyclic Chemistry JHCC|J. Health Care Chaplain.|Journal of Health Care Chaplaincy JHCPU|J. Health Care Poor Underserved=J. Health Care Poor Underserve.|Journal of Health Care for the Poor and Underserved JHD|J. Huntingtons Dis.|Journal of Huntington's Disease JHDE|J. Hyperbolic Differ. Equ.|Journal of Hyperbolic Differential Equations JHE|J. Health Econ.|Journal of Health Economics JHE1|J. Healthc. Eng.|Journal of Healthcare Engineering JHE2|J. Hum. Evol.|Journal of Human Evolution JHEA|J. High Energy Astrophys.|Journal of High Energy Astrophysics JHEP|J. High Energy Phys.|Journal of High Energy Physics JHG|J. Hum. Genet.|Journal of Human Genetics JHH|J. Hum. Hypertens.=J. Hum. Hypertension|Journal of Human Hypertension JHI|J. Hosp. Infect.|Journal of Hospital Infection=The Journal of Hospital Infection JHL|J. Hum. Lact.|Journal of Human Lactation JHLT|J. Heart Lung Transplant.=J. Heart Lung Transpl.|Journal of Heart and Lung Transplantation=The Journal of Heart and Lung Transplantation JHM|J. Hazard. Mater.|Journal of Hazardous Materials JHM1|J. Hosp. Med.|Journal of Hospital Medicine JHMAS|J. Hist. Med. Allied Sci.=J. Hist. Med. All. Sci.|Journal of the History of Medicine and Allied Sciences JHN|J. Hist. Neurosci.|Journal of the History of the Neurosciences JHN1|J. Holist. Nurs.|Journal of Holistic Nursing JHND|J. Hum. Nutr. Diet.|Journal of Human Nutrition and Dietetics JHO|J. Hematol. Oncol.|Journal of Hematology & Oncology JHOM|J. Health Organ. Manag.|Journal of Health Organization and Management JHP|J. Headache Pain|Journal of Headache and Pain=The Journal of Headache and Pain JHP1|J. Health Psychol.|Journal of Health Psychology JHPN|J. Health Popul. Nutr.|Journal of Health, Population, and Nutrition JHPN1|J. Hosp. Palliat. Nurs.|Journal of Hospice & Palliative Nursing=Journal of Hospice and Palliative Nursing JHPPL|J. Health Polit. Policy Law=J. Health Polit. Polic.|Journal of Health Politics, Policy and Law JHPS|J. Hepatobiliary Pancreat. Sci.=J. Hepato Biliary Pancreat. Sci.|Journal of Hepato-Biliary-Pancreatic Sciences JHQ|J. Healthc. Qual.|Journal for Healthcare Quality JHR|J. Hum. Resour.|Journal of Human Resources=The Journal of Human Resources JHRM|J. Healthc. Risk Manag.|Journal of Healthcare Risk Management: The Journal of the American Society for Healthcare Risk Management JHRS|J. Homotopy Relat. Struct.|Journal of Homotopy and Related Structures JHSA|J. Hand Surg. Am.|The Journal of Hand Surgery=Journal of Hand Surgery-American Volume JHSAPV|J. Hand Surg. Asian Pac. Vol.|The Journal of Hand Surgery Asian-Pacific Volume JHSEV|J. Hand Surg. Eur. Vol.|Journal of Hand Surgery-European Volume=The Journal of Hand Surgery, European Volume JHSRP|J. Health Serv. Res. Policy=J. Health Serv. Res. Po.|Journal of Health Services Research & Policy JHT|J. Hand Ther.|Journal of Hand Therapy JHTB|J. Hard Tissue Biol.|Journal of Hard Tissue Biology JHTR|J. Head Trauma Rehabil.=J. Head Trauma Rehab.|Journal of Head Trauma Rehabilitation=The Journal of Head Trauma Rehabilitation JHVD|J. Heart Valve Dis.|Journal of Heart Valve Disease=The Journal of Heart Valve Disease JI|J. Immunol.|Journal of Immunology=The Journal of Immunology JI1|J. Immunother.|Journal of Immunotherapy JI2|J. Immunotoxicol.|Journal of Immunotoxicology JI3|J. Infect.|The Journal of Infection JI4|J. Instrum.|Journal of Instrumentation=Journal of Instrumentation: An IOP and SISSA Journal JIA|J. Inequal. Appl.|Journal of Inequalities and Applications JIACI|J. Investig. Allergol. Clin. Immunol.|Journal of Investigational Allergology & Clinical Immunology JIAIDSS|J. Int. AIDS Soc.|Journal of the International AIDS Society JIAO|J. Int. Adv. Otol.|Journal of International Advanced Otology=The Journal of International Advanced Otology JIAPAIDSC|J. Int. Assoc. Provid. AIDS Care|Journal of the International Association of Providers of AIDS Care JIB|J. Inorg. Biochem.|Journal of Inorganic Biochemistry JIB1|J. Integr. Bioinform.|Journal of Integrative Bioinformatics JIBES|J. Int. Bioethique Ethique Sci.|Journal International de Bioéthique et D'éthique des Sciences JIC|J. Immunother. Cancer|Journal for Immunotherapy of Cancer JIC1|J. Infect. Chemother.|Journal of Infection and Chemotherapy JIC2|J. Interprof. Care=J. Interprofessional Care|Journal of Interprofessional Care JIC3|J. Interv. Cardiol.|Journal of Interventional Cardiology JIC4|J. Invasive Cardiol.|Journal of Invasive Cardiology=The Journal of Invasive Cardiology JICD|J. Investig. Clin. Dent.|Journal of Investigative and Clinical Dentistry JICE|J. Interv. Card. Electrophysiol.=J. Interv. Card. Electr.|Journal of Interventional Cardiac Electrophysiology=Journal of Interventional Cardiac Electrophysiology: An International Journal of Arrhythmias and Pacing JICM|J. Intensive Care Med.|Journal of Intensive Care Medicine JICR|J. Interferon Cytokine Res.=J. Interf. Cytok. Res.|Journal of Interferon & Cytokine Research=Journal of Interferon and Cytokine Research JICS|J. Indian Chem. Soc.|Journal of the Indian Chemical Society JICS1|J. Iran. Chem. Soc.|Journal of the Iranian Chemical Society JID|J. Infect. Dis.=J. Infec. Dis.|Journal of Infectious Diseases=The Journal of Infectious Diseases JID1|J. Intellect. Disabil.|Journal of Intellectual Disabilities JID2|J. Invest. Dermatol.|Journal of Investigative Dermatology=The Journal of Investigative Dermatology JIDD|J. Intellect. Dev. Disabil.=J. Intellect. Dev. Dis.|Journal of Intellectual & Developmental Disability JIDR|J. Intellect. Disabil. Res.=J. Intell. Disabil. Res.|Journal of Intellectual Disability Research JIDSP|J. Investig. Dermatol. Symp. Proc.|The Journal of Investigative Dermatology. Symposium Proceedings JIEA|J. Integral Equ. Appl.|Journal of Integral Equations and Applications JIEC|J. Ind. Eng. Chem.|Journal of Industrial and Engineering Chemistry JIFS|J. Intell. Fuzzy Syst.|Journal of Intelligent & Fuzzy Systems JIHI|J. Innov. Health Inform.|Journal of Innovation in Health Informatics JII|J. Immunoassay Immunochem.|Journal of Immunoassay & Immunochemistry JII1|J. Innate Immun.|Journal of Innate Immunity JIIPP|J. Inverse Ill Posed Probl.|Journal of Inverse and Ill-Posed Problems JIIS|J. Intell. Inf. Syst.|Journal of Intelligent Information Systems JIM|J. Immunol. Methods=J. Immunol. Method.|Journal of Immunological Methods JIM1|J. Insur. Med.|Journal of Insurance Medicine JIM2|J. Integr. Med.|Journal of Integrative Medicine JIM3|J. Intern. Med.|Journal of Internal Medicine JIM4|J. Investig. Med.=J. Invest. Med.|Journal of Investigative Medicine JIMB|J. Ind. Microbiol. Biotechnol.=J. Ind. Microbiol. Biot.|Journal of Industrial Microbiology & Biotechnology=Journal of Industrial Microbiology and Biotechnology JIMD|J. Inherit. Metab. Dis.|Journal of Inherited Metabolic Disease JIMH|J. Immigr. Minor. Health=J. Immigr. Minor. Healt.|Journal of Immigrant and Minority Health JIMJ|J. Inst. Math. Jussieu|Journal of the Institute of Mathematics of Jussieu JIMO|J. Ind. Manag. Optim.|Journal of Industrial and Management Optimization JIMR|J. Int. Med. Res.|Journal of International Medical Research=The Journal of International Medical Research JIMW|J. Infrared Milim Waves|Journal of Infrared and Millimeter Waves JIN|J. Infus. Nurs.|Journal of Infusion Nursing JIN1|J. Integr. Neurosci.|Journal of Integrative Neuroscience JINC|J. Inorg. Nucl. Chem.|Journal of Inorganic and Nuclear Chemistry JINS|J. Int. Neuropsychol. Soc.=J. Int. Neuropsych. Soc.|Journal of the International Neuropsychological Society JIOHS|J. Innov. Opt. Health Sci.=J. Innov. Opt. Heal. Sci.|Journal of Innovative Optical Health Sciences JIOPM|J. Inorg. Organomet. Polym. Mater.=J. Inorg. Organomet. P.|Journal of Inorganic and Organometallic Polymers and Materials JIP|J. Insect Physiol.|Journal of Insect Physiology JIP1|J. Invertebr. Pathol.|Journal of Invertebrate Pathology JIPB|J. Integr. Plant Biol.|Journal of Integrative Plant Biology JIPH|J. Infect. Public Health=J. Infect. Public Heal.|Journal of Infection and Public Health JIPMC|J. Incl. Phenom. Macrocycl. Chem.=J. Incl. Phenom. Macro.|Journal of Inclusion Phenomena and Macrocyclic Chemistry JIR|J. Immunol. Res.|Journal of Immunology Research JIS|J. Insect Sci.|Journal of Insect Science JIS1|J. Invest. Surg.|Journal of Investigative Surgery JISE|J. Inf. Sci. Eng.|Journal of Information Science and Engineering JISPPD|J. Indian Soc. Pedod. Prev. Dent.|Journal of the Indian Society of Pedodontics and Preventive Dentistry JISSN|J. Int. Soc. Sports Nutr.=J. Int. Soc. Sport. Nutr.|Journal of the International Society of Sports Nutrition JIT|J. Inform. Technol.|Journal of Information Technology JIT1|J. Internet Technol.|Journal of Internet Technology JITP|J. Inst. Telecommun. Prof.|Journal of the Institute of Telecommunications Professionals JIV|J. Interpers. Violence|Journal of Interpersonal Violence JIVR|J. Inj. Violence Res.|Journal of Injury & Violence Research JJAP|Jpn. J. Appl. Phys.|Japanese Journal of Applied Physics JJCO|Jpn. J. Clin. Oncol.|Japanese Journal of Clinical Oncology JJIAM|Jpn. J. Ind. Appl. Math.|Japan Journal of Industrial and Applied Mathematics JJID|Jpn. J. Infect. Dis.|Japanese Journal of Infectious Diseases JJM|Jpn. J. Math.|Japanese Journal of Mathematics JJNS|Jpn. J. Nurs. Sci.|Japan Journal of Nursing Science JJO|Jpn. J. Ophthalmol.|Japanese Journal of Ophthalmology JJR|Jpn. J. Radiol.|Japanese Journal of Radiology JKAN|J. Korean Acad. Nurs.|Journal of Korean Academy of Nursing JKMS|J. Korean Math. Soc.|Journal of the Korean Mathematical Society JKMS1|J. Korean Med. Sci.|Journal of Korean Medical Science JKPS|J. Korean Phys. Soc.|Journal of the Korean Physical Society=The Journal of the Korean Physical Society JKS|J. Knee Surg.|Journal of Knee Surgery=The Journal of Knee Surgery JKSS|J. Korean Stat. Soc.|Journal of the Korean Statistical Society JKTR|J. Knot Theory Ramif.=J. Knot Theor. Ramifications|Journal of Knot Theory and its Ramifications JL|J. Lumin.=J. Luminesc.|Journal of Luminescence JLAMP|J. Log. Algebr. Methods Program.|Journal of Logical and Algebraic Methods in Programming JLASTA|J. Laparoendosc. Adv. Surg. Tech. A|Journal of Laparoendoscopic & Advanced Surgical Techniques. Part A JLB|J. Leukoc. Biol.=J. Leukocyte Biol.|Journal of Leukocyte Biology JLC|J. Logic Comput.|Journal of Logic and Computation JLCR|J. Labelled Comp. Radiopharm.=J. Label. Compound. Radiopharm.|Journal of Labelled Compounds & Radiopharmaceuticals JLCRT|J. Liq. Chromatogr. Relat. Technol.=J. Liq. Chromatogr. Relat. Techno.|Journal of Liquid Chromatography & Related Technologies JLD|J. Learn. Disabil.=J. Learn. Disabil. US|Journal of Learning Disabilities JLGTD|J. Low. Genit. Tract Dis.=J. Low. Genit. Tract Di.|Journal of Lower Genital Tract Disease JLH|J. Law Health|Journal of Law and Health JLLI|J. Logic Lang. Inf.=J. Logic Lang. Inform.|Journal of Logic, Language, and Information JLM|J. Leg. Med.|The Journal of Legal Medicine JLMSSS|J. London Math. Soc. Second Ser.|Journal of the London Mathematical Society-Second Series JLO|J. Laryngol. Otol.|Journal of Laryngology and Otology=The Journal of Laryngology and Otology JLPPI|J. Loss Prev. Process Ind.=J. Loss Prevent. Proc. Ind.|Journal of Loss Prevention in the Process Industries JLR|J. Lipid Res.|Journal of Lipid Research JLR1|J. Liposome Res.|Journal of Liposome Research JLS|J. Lesbian Stud.|Journal of Lesbian Studies JLT|J. Lie Theory|Journal of Lie Theory JLTEMI|J. Long Term Eff. Med. Implants|Journal of Long-Term Effects of Medical Implants JLTP|J. Low Temp. Phys.|Journal of Low Temperature Physics JM|J. Magn.|Journal of Magnetics JM1|J. Microbiol.|Journal of Microbiology=The Journal of Microbiology JM2|J. Microencapsul.=J. Microencapsulation|Journal of Microencapsulation JM3|J. Microsc.=J. Microsc. Oxford|Journal of Microscopy JM4|J. Morphol.|Journal of Morphology JMA|J. Multivar. Anal.=J. Multivariate Anal.|Journal of Multivariate Analysis JMAA|J. Math. Anal. Appl.|Journal of Mathematical Analysis and Applications JMASM|J. Mod. Appl. Stat. Methods|Journal of Modern Applied Statistical Methods JMB|J. Math. Biol.|Journal of Mathematical Biology JMB1|J. Med. Biochem.|Journal of Medical Biochemistry JMB2|J. Med. Biogr.|Journal of Medical Biography JMB3|J. Membr. Biol.=J. Membrane Biol.|Journal of Membrane Biology=The Journal of Membrane Biology JMB4|J. Microbiol. Biotechnol.=J. Microbiol. Biotechnology|Journal of Microbiology and Biotechnology JMB5|J. Mol. Biol.|Journal of Molecular Biology JMB6|J. Mot. Behav.=J. Motor Behav.|Journal of Motor Behavior JMBBM|J. Mech. Behav. Biomed. Mater.=J. Mech. Behav. Biomed.|Journal of the Mechanical Behavior of Biomedical Materials JMBE|J. Med. Biol. Eng.|Journal of Medical and Biological Engineering JMC|J. Math. Chem.|Journal of Mathematical Chemistry JMC1|J. Med. Chem.|Journal of Medicinal Chemistry JMCAC|J. Mol. Catal. A Chem.|Journal of Molecular Catalysis. A, Chemical JMCB|J. Mol. Cell Biol.|Journal of Molecular Cell Biology JMCC|J. Mol. Cell. Cardiol.|Journal of Molecular and Cellular Cardiology JMCR|J. Med. Case Rep.|Journal of Medical Case Reports JMCS|J. Mex. Chem. Soc.|Journal of the Mexican Chemical Society JMCSP|J. Manag. Care Spec. Pharm.=J. Manag. Care Spec. Ph.|Journal of Managed Care & Specialty Pharmacy JMD|J. Mech. Design|Journal of Mechanical Design JMD1|J. Med. Devices|Journal of Medical Devices-Transactions of the Asme JMD2|J. Mod. Dynam.|Journal of Modern Dynamics JMD3|J. Mol. Diagn.|Journal of Molecular Diagnostics=The Journal of Molecular Diagnostics JME|J. Med. Econ.|Journal of Medical Economics JME1|J. Med. Entomol.|Journal of Medical Entomology JME2|J. Med. Ethics|Journal of Medical Ethics JME3|J. Mol. Endocrinol.=J. Molecular Endocrinol.|Journal of Molecular Endocrinology JME4|J. Mol. Evol.|Journal of Molecular Evolution JMET|J. Med. Eng. Technol.|Journal of Medical Engineering & Technology JMF|J. Med. Food|Journal of Medicinal Food JMFM|J. Math. Fluid Mech.|Journal of Mathematical Fluid Mechanics JMFNM|J. Matern. Fetal Neonatal Med.=J. Matern. Fetal Neo. M.|Journal of Maternal-Fetal & Neonatal Medicine=The Journal of Maternal-Fetal & Neonatal Medicine JMFT|J. Marital Fam. Ther.|Journal of Marital and Family Therapy JMG|J. Med. Genet.|Journal of Medical Genetics JMG1|J. Mol. Graph.|Journal of Molecular Graphics JMGBN|J. Mammary Gland Biol. Neoplasia=J. Mammary Gland Biol. Neoplasi.|Journal of Mammary Gland Biology and Neoplasia JMGM|J. Mol. Graph. Model.=J. Mol. Graphics Modell.|Journal of Molecular Graphics & Modelling=Journal of Molecular Graphics and Modelling JMH|J. Med. Humanit.|The Journal of Medical Humanities JMH1|J. Ment. Health=J. Ment. Heal.|Journal of Mental Health JMH2|J. Mol. Histol.|Journal of Molecular Histology JMHPE|J. Ment. Health Policy Econ.=J. Ment. Health Policy|Journal of Mental Health Policy and Economics=The Journal of Mental Health Policy and Economics JMI|J. Math. Inequal.|Journal of Mathematical Inequalities JMI1|J. Med. Invest.|The Journal of Medical Investigation JMIG|J. Minim. Invasive Gynecol.=J. Minim. Invas. Gyn.|Journal of Minimally Invasive Gynecology JMIR|J. Med. Internet Res.|Journal of Medical Internet Research JMIRO|J. Med. Imaging Radiat. Oncol.=J. Med. Imag. Radiat. On.|Journal of Medical Imaging and Radiation Oncology JMIRSG|JMIR Serious Games|JMIR Serious Games JMIS|J. Manage. Inform. Syst.|Journal of Management Information Systems JMIV|J. Math. Imaging Vis.=J. Math. Imaging Vision|Journal of Mathematical Imaging and Vision JML|J. Math. Log.|Journal of Mathematical Logic JML1|J. Med. Life|Journal of Medicine and Life JML2|J. Mol. Liq.|Journal of Molecular Liquids JMLA|J. Med. Libr. Assoc.|Journal of the Medical Library Association JMLR|J. Mach. Learn. Res.|Journal of Machine Learning Research JMM|J. Math. Music|Journal of Mathematics and Music JMM1|J. Med. Microbiol.|Journal of Medical Microbiology JMM2|J. Microbiol. Methods=J. Microbiol. Meth.|Journal of Microbiological Methods JMM3|J. Micromechanic. Microengineer.|Journal of Micromechanics and Microengineering JMM4|J. Mol. Med.=J. Mol. Med. Jmm|Journal of Molecular Medicine=Journal of Molecular Medicine-Jmm JMM5|J. Mol. Model.|Journal of Molecular Modeling JMM6|J. Mycol. Med.=J. Mycologie Medicale|Journal de Mycologie Médicale JMMB|J. Mech. Med. Biol.|Journal of Mechanics in Medicine and Biology JMMB1|J. Mol. Microbiol. Biotechnol.=J. Mol. Microb. Biotech.|Journal of Molecular Microbiology and Biotechnology JMMM|J. Magn. Magn. Mater.|Journal of Magnetism and Magnetic Materials JMN|J. Math. Neurosci.|Journal of Mathematical Neuroscience JMN1|J. Mol. Neurosci.|Journal of Molecular Neuroscience JMNI|J. Musculoskelet. Neuronal Interact.=J. Musculoskelet. Neuron. Intera.|Journal of Musculoskeletal & Neuronal Interactions JMO|J. Mod. Opt.=J. Mod. Optic.|Journal of Modern Optics JMP|J. Math. Phys.=J. Math. Phys. NY|Journal of Mathematical Physics JMP1|J. Math. Psychol.|Journal of Mathematical Psychology JMP2|J. Med. Philos.=J. Med. Phil.|Journal of Medicine and Philosophy=The Journal of Medicine and Philosophy JMP3|J. Med. Primatol.|Journal of Medical Primatology JMPA|J. Math. Pures Appl.=J. Math. Pure. Appl.|Journal de Mathematiques Pures et Appliquees JMPAG|J. Math. Phys. Anal. Geom.|Journal of Mathematical Physics Analysis Geometry JMPT|J. Manipulative Physiol. Ther.=J. Manip. Physiol. Ther.|Journal of Manipulative and Physiological Therapeutics JMR|J. Magn. Reson.|Journal of Magnetic Resonance JMR1|J. Mol. Recognit.|Journal of Molecular Recognition JMRA|J. Magn. Reson. A=J. Magn. Reson. Ser. A|Journal of Magnetic Resonance. Series A JMRB|J. Magn. Reson. B=J. Magn. Reson. Ser. B|Journal of Magnetic Resonance. Series B JMRCM|J. Muscle Res. Cell Motil.=J. Muscle Res. Cell M.|Journal of Muscle Research and Cell Motility JMRI|J. Magn. Reson. Imaging|Journal of Magnetic Resonance Imaging JMRS|J. Med. Radiat. Sci.|Journal of Medical Radiation Sciences JMS|J. Mass Spectrom.=J. Mass Spectrometry|Journal of Mass Spectrometry JMS1|J. Med. Screen.|Journal of Medical Screening JMS2|J. Med. Syst.|Journal of Medical Systems JMS3|J. Memb. Sci.=J. Membrane Sci.|Journal of Membrane Science JMS4|J. Mol. Spectrosc.|Journal of Molecular Spectroscopy JMS5|J. Mol. Struct.|Journal of Molecular Structure JMSJ|J. Math. Soc. Jpn.|Journal of the Mathematical Society of Japan JMSMM|J. Mater. Sci. Mater. Med.=J. Mater. Sci. Mater. M.|Journal of Materials Science. Materials in Medicine JMSPA|J. Macromol. Sci. Part A|Journal of Macromolecular Science Part A: Pure and Applied Chemistry JMSPB|J. Macromol. Sci. Part B|Journal of Macromolecular Science Part B: Physics JMST|J. Mol. Struct. Theochem|Journal of Molecular Structure: Theochem JMT|J. Med. Toxicol.|Journal of Medical Toxicology JMT1|J. Music Ther.=J. Music Therapy|Journal of Music Therapy JMTR|Johns. Matthey Technol. Rev.|Johnson Matthey Technology Review JMUI|J. Multimodal User Interfaces|Journal on Multimodal User Interfaces JMV|J. Med. Vasc.|Journal de Médecine Vasculaire JMV1|J. Med. Virol.|Journal of Medical Virology JMVLSC|J. Mult. Valued Log. Soft Comput.|Journal of Multiple-Valued Logic and Soft Computing JMWH|J. Midwifery Womens Health=J. Midwifery Women Health|Journal of Midwifery & Women's Health JN|J. Nanobiotechnology=J. Nanobiotechnol.|Journal of Nanobiotechnology JN1|J. Nanophotonics|Journal of Nanophotonics JN2|J. Nephrol.=J. Nephrology|Journal of Nephrology JN3|J. Neurochem.|Journal of Neurochemistry JN4|J. Neuroendocrinol.|Journal of Neuroendocrinology JN5|J. Neurogenet.|Journal of Neurogenetics JN6|J. Neuroimaging|Journal of Neuroimaging JN7|J. Neuroimmunol.|Journal of Neuroimmunology JN8|J. Neuroinflammation=J. Neuroinflamm.|Journal of Neuroinflammation JN9|J. Neurol.|Journal of Neurology JN10|J. Neurooncol.=J. Neuro Oncol.|Journal of Neuro-Oncology JN11|J. Neuroophthalmol.=J. Neuro Ophthalmol.|Journal of Neuro-Ophthalmology JN12|J. Neurophysiol.|Journal of Neurophysiology JN13|J. Neuropsychol.|Journal of Neuropsychology JN14|J. Neuroradiol.=J. Neuroradiology|Journal of Neuroradiology=Journal of Neuroradiology. Journal de Neuroradiologie JN15|J. Neurosci.|Journal of Neuroscience=The Journal of Neuroscience JN16|J. Neurosurg.|Journal of Neurosurgery JN17|J. Neurotrauma=J. Neurotraum.|Journal of Neurotrauma JN18|J. Neurovirol.=J. Neurovirology|Journal of Neurovirology JN19|J. Nutr.|Journal of Nutrition=The Journal of Nutrition JNA|J. Neurosurg. Anesthesiol.=J. Neurosurg. Anesth.|Journal of Neurosurgical Anesthesiology JNA1|J. Nurs. Adm.|The Journal of Nursing Administration JNB|J. Nutr. Biochem.|Journal of Nutritional Biochemistry=The Journal of Nutritional Biochemistry JNC|J. Nucl. Cardiol.=J. Nuclear Cardiology|Journal of Nuclear Cardiology JNCA|J. Netw. Comput. Appl.|Journal of Network and Computer Applications JNCA1|J. Nonlinear Convex Anal.=J. Nonlinear Convex A.|Journal of Nonlinear and Convex Analysis JNCCN|J. Natl. Compr. Canc. Netw.=J. Natl. Compr. Cancer Netw.|Journal of the National Comprehensive Cancer Network JNCI|J. Natl. Cancer Inst.|Journal of the National Cancer Institute JNCIM|J. Natl. Cancer Inst. Monographs|Journal of the National Cancer Institute. Monographs JNCN|J. Neuropsychiatry Clin. Neurosci.|The Journal of Neuropsychiatry and Clinical Neurosciences JNCQ|J. Nurs. Care Qual.|Journal of Nursing Care Quality JNCS|J. Non Cryst. Solids|Journal of Non-Crystalline Solids JND|J. Neurodev. Disord.|Journal of Neurodevelopmental Disorders JND1|J. Neuromuscul. Dis.|Journal of Neuromuscular Diseases JNE|J. Neural Eng.|Journal of Neural Engineering JNE1|J. Nurs. Educ.|Journal of Nursing Education=The Journal of Nursing Education JNEB|J. Nutr. Educ. Behav.|Journal of Nutrition Education and Behavior JNEN|J. Neuropathol. Exp. Neurol.=J. Neuropath. Exp. Neur.|Journal of Neuropathology and Experimental Neurology JNG|J. Noncommutative Geom.|Journal of Noncommutative Geometry JNGG|J. Nutr. Gerontol. Geriatr.|Journal of Nutrition in Gerontology and Geriatrics JNHA|J. Nutr. Health Aging|Journal of Nutrition Health & Aging=The Journal of Nutrition, Health & Aging JNHRC|J. Nepal Health Res. Counc.|Journal of Nepal Health Research Council JNIS|J. Near Infrared Spectrosc.=J. Near Infrared Spec.|Journal of Near Infrared Spectroscopy JNM|J. Nat. Med.=J. Nat. Med. Tokyo|Journal of Natural Medicines JNM1|J. Neurosci. Methods=J. Neurosci. Meth.|Journal of Neuroscience Methods JNM2|J. Nucl. Med.|Journal of Nuclear Medicine JNM3|J. Numer. Math.|Journal of Numerical Mathematics JNM4|J. Nurs. Manag.=J. Nurs. Manage.|Journal of Nursing Management JNM5|J. Nurs. Meas.|Journal of Nursing Measurement JNMA|J. Natl. Med. Assoc.=J. Natl. Med. Assn.|Journal of the National Medical Association JNMAJNMA|JNMA J. Nepal Med. Assoc.|JNMA: Journal of the Nepal Medical Association JNMD|J. Nerv. Ment. Dis.|Journal of Nervous and Mental Disease=The Journal of Nervous and Mental Disease JNMP|J. Nonlinear Math. Phys.|Journal of Nonlinear Mathematical Physics JNMR|J. New Music Res.=J. New Music Research|Journal of New Music Research JNMT|J. Nucl. Med. Technol.|Journal of Nuclear Medicine Technology JNN|J. Nanosci. Nanotechnol.=J. Nanosci. Nanotechno.|Journal of Nanoscience and Nanotechnology JNN1|J. Neurosci. Nurs.|Journal of Neuroscience Nursing=The Journal of Neuroscience Nursing: Journal of the American Association of Neuroscience Nurses JNNP|J. Neurol. Neurosurg. Psychiatr.=J. Neurol. Neurosurg. Psychiatry|Journal of Neurology, Neurosurgery, and Psychiatry JNOPM|J. Nonlinear Opt. Physics Mat.|Journal of Nonlinear Optical Physics & Materials JNP|J. Nat. Prod.|Journal of Natural Products JNP1|J. Neuroimmune Pharmacol.=J. Neuroimmune Pharm.|Journal of Neuroimmune Pharmacology JNP2|J. Neurosurg. Pediatr.|Journal of Neurosurgery. Pediatrics JNPD|J. Nurses Prof. Dev.|Journal for Nurses in Professional Development JNPM|J. Neonatal Perinatal Med.|Journal of Neonatal-Perinatal Medicine JNPT|J. Neurol. Phys. Ther.|Journal of Neurologic Physical Therapy JNR|J. Neuroeng. Rehabil.|Journal of Neuroengineering and Rehabilitation JNR1|J. Neurosci. Res.|Journal of Neuroscience Research JNR2|J. Nurs. Res.|Journal of Nursing Research=The Journal of Nursing Research JNS|J. Neurointerv. Surg.=J. Neurointerventional Surg.|Journal of Neurointerventional Surgery JNS1|J. Neurol. Sci.|Journal of the Neurological Sciences JNS2|J. Neurosurg. Sci.|Journal of Neurosurgical Sciences JNS3|J. Neurosurg. Spine|Journal of Neurosurgery. Spine JNS4|J. Nonlinear Sci.|Journal of Nonlinear Science JNS5|J. Nonparametr. Stat.|Journal of Nonparametric Statistics JNS6|J. Nurs. Scholarsh.=J. Nurs. Scholarship|Journal of Nursing Scholarship JNSACEN|J. Neurol. Surg. A Cent. Eur. Neurosurg.=J. Neurol. Surg. Part A|Journal of Neurological Surgery Part A: Central European Neurosurgery JNSM|J. Netw. Syst. Manag.|Journal of Network and Systems Management JNSV|J. Nutr. Sci. Vitaminol.|Journal of Nutritional Science and Vitaminology JNT|J. Number Theory=J. Number Theor.|Journal of Number Theory JO|J. Obes.|Journal of Obesity JO1|J. Opt.=J. Optics UK|Journal of Optics JO2|J. Optom.|Journal of Optometry JO3|J. Orthod.|Journal of Orthodontics JOC|J. Org. Chem.|Journal of Organic Chemistry=The Journal of Organic Chemistry JOC1|J. Organomet. Chem.|Journal of Organometallic Chemistry JOCEC|J. Organ. Comput. Electron. Comme.|Journal of Organizational Computing and Electronic Commerce JOCN|J. Opt. Commun. Netw.|Journal of Optical Communications and Networking JOEH|J. Occup. Environ. Hyg.|Journal of Occupational and Environmental Hygiene JOEM|J. Occup. Environ. Med.|Journal of Occupational and Environmental Medicine JOEUC|J. Organ. End User Comput.=J. Organ. End User Com.|Journal of Organizational and End User Computing JOFPH|J. Oral Facial Pain Headache=J. Oral Facial Pain H.|Journal of Oral & Facial Pain and Headache JOG|J. Obstet. Gynaecol.|Journal of Obstetrics and Gynaecology=Journal of Obstetrics and Gynaecology: The Journal of the Institute of Obstetrics and Gynaecology JOGNN|J. Obstet. Gynecol. Neonatal Nurs.|Journal of Obstetric, Gynecologic, and Neonatal Nursing JOGR|J. Obstet. Gynaecol. Res.=J. Obstet. Gynaecol. Re.|Journal of Obstetrics and Gynaecology Research=The Journal of Obstetrics and Gynaecology Research JOH|J. Occup. Health|Journal of Occupational Health JOHP|J. Occup. Health Psychol.=J. Occup. Health Psych.|Journal of Occupational Health Psychology JOI|J. Oral Implantol.=J. Oral Implant.|Journal of Oral Implantology=The Journal of Oral Implantology JOM|J. Opioid Manag.|Journal of Opioid Management JOMS|J. Oral Maxillofac. Surg.=J. Oral Maxil. Surg.|Journal of Oral and Maxillofacial Surgery JOP|J. Oncol. Pract.|Journal of Oncology Practice JOPM|J. Oral Pathol. Med.|Journal of Oral Pathology & Medicine JOPP|J. Oncol. Pharm. Pract.|Journal of Oncology Pharmacy Practice JOPT0|J. Ocul. Pharmacol. Ther.=J. Ocul. Pharmacol. Therapeut.|Journal of Ocular Pharmacology and Therapeutics JOR|J. Occup. Rehabil.|Journal of Occupational Rehabilitation JOR1|J. Oral Rehabil.|Journal of Oral Rehabilitation JOR2|J. Orthop. Res.=J. Orthopaed. Res.|Journal of Orthopaedic Research JOR3|J. Ovarian Res.|Journal of Ovarian Research JOS|J. Oleo Sci.|Journal of Oleo Science JOS1|J. Oral Sci.|Journal of Oral Science JOS2|J. Orthop. Sci.|Journal of Orthopaedic Science JOSA|J. Opt. Soc. Am.|Journal of the Optical Society of America JOSAA|J. Opt. Soc. Am. A=J. Opt. Soc. Am. A Opt. Image Sci.|Journal of the Optical Society of America. A, Optics and Image Science=Journal of the Optical Society of America. A, Optics, Image Science, and Vision JOSAB|J. Opt. Soc. Am. B=J. Opt. Soc. Am. B Opt. Physics|Journal of the Optical Society of America. B, Optical Physics JOSPT|J. Orthop. Sports Phys. Ther.|The Journal of Orthopaedic and Sports Physical Therapy JOSR|J. Orthop. Surg. Res.|Journal of Orthopaedic Surgery and Research JOT|J. Operat. Theor.|Journal of Operator Theory JOT1|J. Orthop. Trauma|Journal of Orthopaedic Trauma JOT2|J. Orthop. Traumatol.|Journal of Orthopaedics and Traumatology JOTA|J. Optim. Theory Appl.=J. Optimiz. Theory App.|Journal of Optimization Theory and Applications JP|J. Pain|Journal of Pain=The Journal of Pain JP1|J. Parasitol.|Journal of Parasitology=The Journal of Parasitology JP2|J. Pathol.|Journal of Pathology=The Journal of Pathology JP3|J. Pediatr.=J. Pediat. Brazil|Jornal de Pediatria=The Journal of Pediatrics JP4|J. Perinatol.|Journal of Perinatology JP5|J. Periodontol.|Journal of Periodontology=The Journal of Periodontology JP6|J. Pers.=J. Personality|Journal of Personality JP7|J. Phycol.|Journal of Phycology JP8|J. Physiother.|Journal of Physiotherapy JP9|J. Pregnancy|Journal of Pregnancy JP10|J. Prosthodont.|Journal of Prosthodontics=Journal of Prosthodontics-Implant Esthetic and Reconstructive Dentistry JP11|J. Proteomics|Journal of Proteomics JP12|J. Psychol.|Journal of Psychology=The Journal of Psychology JPA|J. Pers. Assess.=J. Personal. Assess.|Journal of Personality Assessment JPA1|J. Physiol. Anthropol.|Journal of Physiological Anthropology JPAA|J. Pure Appl. Algebra|Journal of Pure and Applied Algebra JPAD|J. Prev. Alzheimers Dis.|The Journal of Prevention of Alzheimer's Disease JPAE|J. Physician Assist. Educ.|The Journal of Physician Assistant Education JPAG|J. Pediatr. Adolesc. Gynecol.=J. Pediatr. Adol. Gynec.|Journal of Pediatric and Adolescent Gynecology JPAH|J. Phys. Act. Health|Journal of Physical Activity & Health JPAMG|J. Phys. A Math. Gen.|Journal of Physics A: Mathematical and General JPAMT|J. Phys. A Math. Theor.|Journal of Physics. A, Mathematical and Theoretical JPB|J. Physiol. Biochem.|Journal of Physiology and Biochemistry JPB1|J. Proteomics Bioinform.|Journal of Proteomics & Bioinformatics JPBA|J. Pharm. Biomed. Anal.=J. Pharmaceut. Biomed. Anal.|Journal of Pharmaceutical and Biomedical Analysis JPBAMOP|J. Phys. B At. Mol. Opt. Phys.=J. Phys. B At. Mol. Opt.|Journal of Physics B: Atomic, Molecular and Optical Physics=Journal of Physics. B, Atomic, Molecular, and Optical Physics: An Institute of Physics Journal JPC|J. Palliat. Care|Journal of Palliative Care JPC1|J. Phys. Chem.|Journal of Physical Chemistry=The Journal of Physical Chemistry JPCA|J. Phys. Chem. A|Journal of Physical Chemistry A=The Journal of Physical Chemistry. A JPCB|J. Phys. Chem. B|Journal of Physical Chemistry B=The Journal of Physical Chemistry. B JPCC|J. Pastoral Care Counsel.|The Journal of Pastoral Care & Counseling JPCC1|J. Phys. Chem. C|Journal of Physical Chemistry C=The Journal of Physical Chemistry. C JPCCH|J. Prim. Care Community Health|Journal of Primary Care & Community Health JPCH|J. Paediatr. Child Health=J. Paediatr. Child H.|Journal of Paediatrics and Child Health JPCL|J. Phys. Chem. Lett.|Journal of Physical Chemistry Letters=The Journal of Physical Chemistry Letters JPCM|J. Phys. Condens. Matter=J. Phys. Condens. Mat.|Journal of Physics: Condensed Matter=Journal of Physics. Condensed Matter: An Institute of Physics Journal JPCR|J. Pathol. Clin. Res.|The Journal of Pathology. Clinical Research JPCRD|J. Phys. Chem. Ref. Data|Journal of Physical and Chemical Reference Data JPCS|J. Phys. Chem. Solids|Journal of Physics and Chemistry of Solids=The Journal of Physics and Chemistry of Solids JPD|J. Parkinsons Dis.=J. Parkinson Dis.|Journal of Parkinson's Disease JPD1|J. Pers. Disord.|Journal of Personality Disorders JPD2|J. Prosthet. Dent.|Journal of Prosthetic Dentistry=The Journal of Prosthetic Dentistry JPD3|J. Psychoactive Drugs=J. Psychoactive Drug.|Journal of Psychoactive Drugs JPDAP|J. Phys. D Appl. Phys.|Journal of Physics D: Applied Physics JPDC|J. Parallel Distrib. Comput.=J. Parallel Distr. Com.|Journal of Parallel and Distributed Computing JPE|J. Photonics Energy|Journal of Photonics for Energy JPE1|J. Polym. Eng.|Journal of Polymer Engineering JPE2|J. Polym. Environ.|Journal of Polymers and the Environment JPED|J. Phase Equilibria Diffus.=J. Phase Equilib. Diffus.|Journal of Phase Equilibria and Diffusion JPEM|J. Pediatr. Endocrinol. Metab.=J. Pediatr. Endocr. Met.|Journal of Pediatric Endocrinology & Metabolism JPENJPEN|JPEN J. Parenter. Enteral Nutr.|JPEN. Journal of Parenteral and Enteral Nutrition JPET|J. Pharmacol. Exp. Ther.|Journal of Pharmacology and Experimental Therapeutics=The Journal of Pharmacology and Experimental Therapeutics JPGN|J. Pediatr. Gastroenterol. Nutr.=J. Pediat. Gastroenterol. Nutr.|Journal of Pediatric Gastroenterology and Nutrition JPGNPP|J. Phys. G Nucl. Part. Phys.=J. Phys. G Nucl. Particle Phys.|Journal of Physics G: Nuclear and Particle Physics=Journal of Physics. G, Nuclear and Particle Physics: An Institute of Physics Journal JPHC|J. Pediatr. Health Care=J. Pediatr. Health Car.|Journal of Pediatric Health Care JPHC1|J. Prim. Health Care|Journal of Primary Health Care JPHD|J. Public Health Dent.|Journal of Public Health Dentistry JPHMP|J. Public Health Manag. Pract.=J. Public Health Man.|Journal of Public Health Management and Practice JPHP|J. Public Health Policy=J. Public Health Pol.|Journal of Public Health Policy JPIC|J. Prev. Interv. Community|Journal of Prevention & Intervention in the Community JPIDS|J. Pediatric Infect. Dis. Soc.=J. Pediatr. Infect. Dis. Soc.|Journal of the Pediatric Infectious Diseases Society JPII|J. Phys. II|Journal de Physique II JPL|J. Physiol. London|Journal of Physiology-London JPM|J. Palliat. Med.|Journal of Palliative Medicine JPM1|J. Perinat. Med.=J. Perinatal Med.|Journal of Perinatal Medicine JPM2|J. Policy Modeling|Journal of Policy Modeling JPM3|J. Polymer Materials|Journal of Polymer Materials JPM4|J. Postgrad. Med.|Journal of Postgraduate Medicine JPMA|J. Pak. Med. Assoc.|Journal of the Pakistan Medical Association=JPMA. the Journal of the Pakistan Medical Association JPMH|J. Prev. Med. Hyg.|Journal of Preventive Medicine and Hygiene JPMHN|J. Psychiatr. Ment. Health Nurs.=J. Psychiatr. Ment. Hlt.|Journal of Psychiatric and Mental Health Nursing JPN|J. Pediatr. Nurs.|Journal of Pediatric Nursing=Journal of Pediatric Nursing-Nursing Care of Children & Families JPN1|J. Perianesth. Nurs.=J. Perianesthesia Nurs.|Journal of Perianesthesia Nursing JPN2|J. Prof. Nurs.=J. Prof. Nursing|Journal of Professional Nursing JPN3|J. Psychiatry Neurosci.=J. Psychiatr. Neurosci.|Journal of Psychiatry & Neuroscience JPNN|J. Perinat. Neonatal Nurs.=J. Perinat. Neonat. Nur.|Journal of Perinatal & Neonatal Nursing=The Journal of Perinatal & Neonatal Nursing JPNS|J. Peripher. Nerv. Syst.|Journal of the Peripheral Nervous System JPO|J. Pediatr. Orthop.|Journal of Pediatric Orthopedics JPOA|J. Pseudodiffer. Oper. Appl.=J. Pseudo Differ. Oper. Appl.|Journal of Pseudo-Differential Operators and Applications JPOB|J. Pediatr. Orthop. B=J. Pediatr. Orthopaed. Part B|Journal of Pediatric Orthopaedics-Part B=Journal of Pediatric Orthopedics. Part B JPOC|J. Phys. Org. Chem.|Journal of Physical Organic Chemistry JPOG|J. Psychosom. Obstet. Gynaecol.|Journal of Psychosomatic Obstetrics and Gynaecology JPON|J. Pediatr. Oncol. Nurs.|Journal of Pediatric Oncology Nursing JPOS|J. Pediatr. Ophthalmol. Strabismus|Journal of Pediatric Ophthalmology and Strabismus JPP|J. Pediatr. Psychol.=J. Pediat. Psychol.|Journal of Pediatric Psychology JPP1|J. Perioper. Pract.|Journal of Perioperative Practice JPP2|J. Pharm. Pharmacol.|Journal of Pharmacy and Pharmacology=The Journal of Pharmacy and Pharmacology JPP3|J. Pharm. Pract.|Journal of Pharmacy Practice JPP4|J. Pharmacokinet. Pharmacodyn.=J. Pharmacokinet. Phar.|Journal of Pharmacokinetics and Pharmacodynamics JPP5|J. Physiol. Pharmacol.|Journal of Physiology and Pharmacology JPP6|J. Plant Physiol.|Journal of Plant Physiology JPP7|J. Plasma Phys.|Journal of Plasma Physics JPP8|J. Porphyr. Phthalocyanines=J. Porphyrins Phthalocyanines|Journal of Porphyrins and Phthalocyanines JPP9|J. Prim. Prev.|Journal of Primary Prevention=The Journal of Primary Prevention JPP10|J. Psychiatr. Pract.|Journal of Psychiatric Practice JPPAC|J. Photochem. Photobiol. A Chem.=J. Photoch. Photobio. A|Journal of Photochemistry and Photobiology. A, Chemistry JPPBB|J. Photochem. Photobiol. B Biol.=J. Photoch. Photobio. B|Journal of Photochemistry and Photobiology. B, Biology JPPCP|J. Pain Palliat. Care Pharmacother.|Journal of Pain & Palliative Care Pharmacotherapy JPPCP1|J. Photochem. Photobiol. C Photo.|Journal of Photochemistry and Photobiology C-Photochemistry Reviews JPPS|J. Pharm. Pharm. Sci.|Journal of Pharmacy & Pharmaceutical Sciences=Journal of Pharmacy and Pharmaceutical Sciences JPR|J. Periodont. Res.=J. Periodontal Res.|Journal of Periodontal Research JPR1|J. Pineal Res.|Journal of Pineal Research JPR2|J. Plant Res.|Journal of Plant Research JPR3|J. Polym. Res.|Journal of Polymer Research JPR4|J. Prosthodont. Res.|Journal of Prosthodontic Research JPR5|J. Proteome Res.|Journal of Proteome Research JPR6|J. Psychiatr. Res.|Journal of Psychiatric Research JPR7|J. Psycholinguist. Res.|Journal of Psycholinguistic Research JPR8|J. Psychosom. Res.|Journal of Psychosomatic Research JPRAS|J. Plast. Reconstr. Aesthet. Surg.=J. Plast. Reconstr. Aes.|Journal of Plastic, Reconstructive & Aesthetic Surgery=Journal of Plastic Reconstructive and Aesthetic Surgery JPRM|J. Pediatr. Rehabil. Med.|Journal of Pediatric Rehabilitation Medicine JPS|J. Patient Saf.|Journal of Patient Safety JPS1|J. Pediatr. Surg.=J. Pediat. Surg.|Journal of Pediatric Surgery JPS2|J. Pept. Sci.|Journal of Peptide Science JPS3|J. Pharm. Sci.=J. Pharm. Sci. US|Journal of Pharmaceutical Sciences JPS4|J. Pharmacol. Sci.|Journal of Pharmacological Sciences JPS5|J. Phys. Stud.|Journal of Physical Studies JPS6|J. Physiol. Sci.|Journal of Physiological Sciences=The Journal of Physiological Sciences JPSHS|J. Plast. Surg. Hand Surg.=J. Plast. Surg. Hand Su.|Journal of Plastic Surgery and Hand Surgery JPSJ|J. Phys. Soc. Jpn.|Journal of the Physical Society of Japan JPSM|J. Pain Symptom Manage.=J. Pain Symptom Manag.|Journal of Pain and Symptom Management JPST|J. Photopolym. Sci. Technol.|Journal of Photopolymer Science and Technology JPTM|J. Pharmacol. Toxicol. Methods=J. Pharmacol. Toxicol. Method.|Journal of Pharmacological and Toxicological Methods JPU|J. Pediatr. Urol.|Journal of Pediatric Urology JQSRT|J. Quant. Spectrosc. Radiat. Transf.=J. Quant. Spectrosc. Radiat.|Journal of Quantitative Spectroscopy & Radiative Transfer=Journal of Quantitative Spectroscopy and Radiative Transfer JR|J. Rheol.|Journal of Rheology JR1|J. Rheumatol.|Journal of Rheumatology=The Journal of Rheumatology JRA|J. Res. Adolesc.=J. Res. Adolescence|Journal of Research on Adolescence JRAAS|J. Renin Angiotensin Aldosterone Syst.=J. Renin Angiotensin Aldost. Sy.|Journal of the Renin-Angiotensin-Aldosterone System JRAM|J. Reine Angew. Math.|Journal fur Die Reine und Angewandte Mathematik JRAMC|J. R. Army Med. Corps=J. Roy. Army Med. Corps|Journal of the Royal Army Medical Corps JRC|J. Ren. Care=J. Renal Care|Journal of Renal Care JRCPE|J. R. Coll. Physicians Edinb.|The Journal of the Royal College of Physicians of Edinburgh JRCR|J. Radiol. Case Rep.|Journal of Radiology Case Reports JRD|J. Reprod. Dev.=J. Reprod. Develop.|Journal of Reproduction and Development=The Journal of Reproduction and Development JRE|J. Rare Earth.|Journal of Rare Earths JREHD|J. Racial Ethn. Health Disparities|Journal of Racial and Ethnic Health Disparities JRH|J. Relig. Health|Journal of Religion & Health=Journal of Religion and Health JRH1|J. Rural Health|Journal of Rural Health=The Journal of Rural Health JRHS|J. Res. Health Sci.|Journal of Research in Health Sciences JRI|J. Reprod. Immunol.|Journal of Reproductive Immunology JRIP|J. Reprod. Infant Psychol.=J. Reprod. Infant Psyc.|Journal of Reproductive and Infant Psychology JRM|J. Reconstr. Microsurg.|Journal of Reconstructive Microsurgery JRM1|J. Registry Manag.|Journal of Registry Management JRM2|J. Rehabil. Med.|Journal of Rehabilitation Medicine JRMS|J. Ramanujan Math. Soc.|Journal of the Ramanujan Mathematical Society JRMS1|J. Rehabil. Med. Suppl.|Journal of Rehabilitation Medicine. Supplement JRN|J. Ren. Nutr.=J. Renal Nutr.|Journal of Renal Nutrition JRNC|J. Radioanal. Nucl. Chem.=J. Radioanal. Nucl. Ch.|Journal of Radioanalytical and Nuclear Chemistry JRNIST|J. Res. Natl. Inst. Stand. Technol.=J. Res. Natl. Inst. Stan.|Journal of Research of the National Institute of Standards and Technology JRP|J. Radiol. Prot.|Journal of Radiological Protection JRR|J. Radiat. Res.|Journal of Radiation Research JRR1|J. Rubber Res.|Journal of Rubber Research JRRD|J. Rehabil. Res. Dev.|Journal of Rehabilitation Research and Development JRS|J. Raman Spectrosc.|Journal of Raman Spectroscopy JRS1|J. Refract. Surg.|Journal of Refractive Surgery JRS2|J. Rheumatol. Suppl.|The Journal of Rheumatology. Supplement JRS3|J. Robot. Surg.|Journal of Robotic Surgery JRSI|J. R. Soc. Interface|Journal of the Royal Society, Interface JRSM|J. R. Soc. Med.=J. Roy. Soc. Med.|Journal of the Royal Society of Medicine JRSSSBSM|J. R. Stat. Soc. Series B Stat. Methodol.=J. Roy. Stat. Soc. Ser. B Stat. Met.|Journal of the Royal Statistical Society. Series B, Statistical Methodology JRSSSCAS|J. R. Stat. Soc. Ser. C Appl. Stat.=J. Roy. Stat. Soc. Ser. C Appl.|Journal of the Royal Statistical Society. Series C, Applied Statistics JRST|J. Recept. Signal Transduct.|Journal of Receptors and Signal Transduction JRSTR|J. Recept. Signal Transduct. Res.|Journal of Receptor and Signal Transduction Research JRTIP|J. Real Time Image Process.=J. Real Time Image Pr.|Journal of Real-Time Image Processing JS|J. Spectrosc.|Journal of Spectroscopy JS1|J. Supercomput.|Journal of Supercomputing=The Journal of Supercomputing JSA|J. Syst. Architect.|Journal of Systems Architecture JSAD|J. Stud. Alcohol Drugs|Journal of Studies on Alcohol and Drugs JSADS|J. Stud. Alcohol Drugs Suppl.|Journal of Studies on Alcohol and Drugs. Supplement JSAP|J. Small Anim. Pract.|Journal of Small Animal Practice=The Journal of Small Animal Practice JSAT|J. Subst. Abuse Treat.|Journal of Substance Abuse Treatment JSAVA|J. S. Afr. Vet. Assoc.|Journal of the South African Veterinary Association JSB|J. Struct. Biol.|Journal of Structural Biology JSC|J. Sci. Comput.|Journal of Scientific Computing JSC1|J. Solution Chem.=J. Solut. Chem.|Journal of Solution Chemistry JSC2|J. Struct. Chem.=J. Struct. Chem. Engl. Tr.|Journal of Structural Chemistry JSC3|J. Sulfur Chem.|Journal of Sulfur Chemistry JSC4|J. Symb. Comput.|Journal of Symbolic Computation JSCD|J. Stroke Cerebrovasc. Dis.=J. Stroke Cerebrovasc.|Journal of Stroke & Cerebrovascular Diseases=Journal of Stroke and Cerebrovascular Diseases JSCM|J. Spinal Cord Med.|Journal of Spinal Cord Medicine=The Journal of Spinal Cord Medicine JSCR|J. Strength Cond. Res.|Journal of Strength and Conditioning Research JSCS|J. Saudi Chem. Soc.|Journal of Saudi Chemical Society JSCS1|J. Serb. Chem. Soc.|Journal of the Serbian Chemical Society JSCS2|J. Stat. Comput. Simul.=J. Stat. Comput. Sim.|Journal of Statistical Computation and Simulation JSD|J. Surfactants Deterg.|Journal of Surfactants and Detergents JSE|J. Surg. Educ.|Journal of Surgical Education JSE1|J. Surv. Eng.|Journal of Surveying Engineering JSEP|J. Softw. Evol. Proc.|Journal of Software-Evolution and Process JSEP1|J. Sport Exerc. Psychol.=J. Sport Exercise Psychol.|Journal of Sport & Exercise Psychology JSES|J. Shoulder Elbow Surg.=J. Shoulder Elb. Surg.|Journal of Shoulder and Elbow Surgery JSF|J. Supercrit. Fluids=J. Supercrit. Fluid.|Journal of Supercritical Fluids=The Journal of Supercritical Fluids JSFA|J. Sci. Food Agric.=J. Sci. Food Agr.|Journal of the Science of Food and Agriculture JSG|J. Symplectic Geom.|Journal of Symplectic Geometry JSH|J. Sch. Health=J. School Health|Journal of School Health=The Journal of School Health JSIS|J. Strategic Inform. Syst.|Journal of Strategic Information Systems JSL|J. Symbolic Logic|Journal of Symbolic Logic JSLHR|J. Speech Lang. Hear. Res.=J. Speech Lang. Hear. R.|Journal of Speech, Language, and Hearing Research JSM|J. Sex. Med.|Journal of Sexual Medicine=The Journal of Sexual Medicine JSMPF|J. Sports Med. Phys. Fitness=J. Sport. Med. Phys. Fit.|Journal of Sports Medicine and Physical Fitness=The Journal of Sports Medicine and Physical Fitness JSMS|J. Sci. Med. Sport|Journal of Science and Medicine in Sport JSMT|J. Sex Marital Ther.=J. Sex Mar. Ther.|Journal of Sex & Marital Therapy JSMTE|J. Stat. Mech. Theory Exp.|Journal of Statistical Mechanics: Theory and Experiment JSN|J. Sch. Nurs.|Journal of School Nursing=The Journal of School Nursing JSNM|J. Supercond. Nov. Magn.|Journal of Superconductivity and Novel Magnetism JSO|J. Surg. Oncol.|Journal of Surgical Oncology JSOA|J. Surg. Orthop. Adv.|Journal of Surgical Orthopaedic Advances JSOCJ|J. Synth. Org. Chem. Jpn.|Journal of Synthetic Organic Chemistry, Japan JSOM|J. Spec. Oper. Med.|Journal of Special Operations Medicine: A Peer Reviewed Journal for SOF Medical Professionals JSOMS|J. Stomatol. Oral Maxillofac. Surg.=J. Stomatol. Oral Maxillofac. Su.|Journal of Stomatology, Oral and Maxillofacial Surgery JSP|J. Sch. Psychol.=J. School Psychol.|Journal of School Psychology JSP1|J. Stat. Phys.=J. Statist. Phys.|Journal of Statistical Physics JSPI|J. Stat. Plan. Inference=J. Statist. Plann. Inference|Journal of Statistical Planning and Inference JSPN|J. Spec. Pediatr. Nurs.|Journal for Specialists in Pediatric Nursing JSR|J. Safety Res.|Journal of Safety Research JSR1|J. Sex Res.|Journal of Sex Research JSR2|J. Sleep Res.|Journal of Sleep Research JSR3|J. Sport Rehabil.|Journal of Sport Rehabilitation JSR4|J. Surg. Res.|Journal of Surgical Research=The Journal of Surgical Research JSR5|J. Synchrotron Radiat.|Journal of Synchrotron Radiation JSS|J. Sep. Sci.|Journal of Separation Science JSS1|J. Sports Sci.=J. Sport. Sci.|Journal of Sports Sciences JSS2|J. Stat. Softw.|Journal of Statistical Software JSS3|J. Syst. Software|Journal of Systems and Software JSSC|J. Solid State Chem.|Journal of Solid State Chemistry JSSC1|J. Syst. Sci. Complex.|Journal of Systems Science & Complexity=Journal of Systems Science and Complexity JSSE|J. Solid State Electrochem.=J. Solid State Electr.|Journal of Solid State Electrochemistry=Journal of Solid State Electrochemistry: Current Research and Development in Science and Technology JSSM|J. Sports Sci. Med.|Journal of Sports Science & Medicine JST|J. Spectr. Theory|Journal of Spectral Theory JT|J. Topol.|Journal of Topology JT1|J. Turbul.|Journal of Turbulence JTA|J. Topol. Anal.|Journal of Topology and Analysis JTAC|J. Therm. Anal. Calorim.|Journal of Thermal Analysis and Calorimetry JTACS|J. Trauma Acute Care Surg.=J. Trauma Acute Care|Journal of Trauma and Acute Care Surgery=The Journal of Trauma and Acute Care Surgery JTB|J. Theor. Biol.|Journal of Theoretical Biology JTB1|J. Therm. Biol.|Journal of Thermal Biology JTC|J. Theor. Chem.|Journal of Theoretical Chemistry JTCC|J. Theor. Comput. Chem.|Journal of Theoretical & Computational Chemistry=Journal of Theoretical and Computational Chemistry JTCS|J. Thorac. Cardiovasc. Surg.=J. Thorac. Cardiov. Sur.|Journal of Thoracic and Cardiovascular Surgery=The Journal of Thoracic and Cardiovascular Surgery JTD|J. Trauma Dissociation=J. Trauma Dissociatio.|Journal of Trauma & Dissociation JTE|J. Tissue Eng.|Journal of Tissue Engineering JTEHBCR|J. Toxicol. Environ. Health B Crit. Rev.=J. Toxicol. Environ. Health Pt. B|Journal of Toxicology and Environmental Health Part B: Critical Reviews JTEHPA|J. Toxicol. Environ. Health Part A|Journal of Toxicology and Environmental Health. Part A JTEMB|J. Trace Elem. Med. Biol.=J. Trace Elem. Med. Bio.|Journal of Trace Elements in Medicine and Biology JTERM|J. Tissue Eng. Regen. Med.=J. Tissue Eng. Regen. M.|Journal of Tissue Engineering and Regenerative Medicine JTH|J. Thromb. Haemost.|Journal of Thrombosis and Haemostasis JTI|J. Thorac. Imaging=J. Thorac. Imag.|Journal of Thoracic Imaging JTICE|J. Taiwan Inst. Chem. Eng.|Journal of the Taiwan Institute of Chemical Engineers JTM|J. Transl. Med.|Journal of Translational Medicine JTM1|J. Travel Med.|Journal of Travel Medicine JTN|J. Transcult. Nurs.|Journal of Transcultural Nursing JTN1|J. Trauma Nurs.|Journal of Trauma Nursing JTNB|J. Theor. Nombr. Bordx|Journal de Theorie des Nombres de Bordeaux JTO|J. Thorac. Oncol.|Journal of Thoracic Oncology JTP|J. Theor. Probability|Journal of Theoretical Probability JTP1|J. Trop. Pediatr.=J. Trop. Pediatrics|Journal of Tropical Pediatrics JTS|J. Texture Stud.|Journal of Texture Studies JTS1|J. Toxicol. Sci.|Journal of Toxicological Sciences=The Journal of Toxicological Sciences JTS2|J. Trauma. Stress|Journal of Traumatic Stress JTSA|J. Time Ser. Anal.|Journal of Time Series Analysis JTT|J. Telemed. Telecare|Journal of Telemedicine and Telecare JTT1|J. Thromb. Thrombolysis=J. Thromb. Thrombolys.|Journal of Thrombosis and Thrombolysis JTV|J. Tissue Viability=J. Tissue Viab.|Journal of Tissue Viability JU|J. Ultrasound|Journal of Ultrasound JU1|J. Urol.=J. Urology|Journal of Urology=The Journal of Urology JUCS|J Univers. Comput. Sci.|Journal of Universal Computer Science=Journal of Universal Computer Science: J. UCS JUH|J. Urban Health|Journal of Urban Health: Bulletin of the New York Academy of Medicine JUM|J. Ultrasound Med.=J. Ultras. Med.|Journal of Ultrasound in Medicine JV|J. Virol.|Journal of Virology JV1|J. Vis.=J. Visual. Japan|Journal of Vision=Journal of Visualization JV2|J. Voice|Journal of Voice JVA|J. Vasc. Access|Journal of Vascular Access=The Journal of Vascular Access JVBD|J. Vector Borne Dis.=J. Vector Dis.|Journal of Vector Borne Diseases JVC|J. Vet. Cardiol.|Journal of Veterinary Cardiology JVCIR|J. Vis. Commun. Image Represent.=J. Vis. Commun. Image R.|Journal of Visual Communication and Image Representation JVCM|J. Vis. Commun. Med.|Journal of Visual Communication in Medicine JVD|J. Vet. Dent.|Journal of Veterinary Dentistry JVDI|J. Vet. Diagn. Invest.|Journal of Veterinary Diagnostic Investigation JVE|J. Vector Ecol.|Journal of Vector Ecology=Journal of Vector Ecology: Journal of the Society for Vector Ecology JVE1|J. Vis. Exp.|Journal of Visualized Experiments JVH|J. Viral Hepat.=J. Viral Hepatitis|Journal of Viral Hepatitis JVIM|J. Vet. Intern. Med.|Journal of Veterinary Internal Medicine JVIR|J. Vasc. Interv. Radiol.=J. Vasc. Interven. Radiol.|Journal of Vascular and Interventional Radiology JVLC|J. Vis. Lang. Comput.=J. Visual Lang. Computing|Journal of Visual Languages and Computing JVM|J. Virol. Methods=J. Virol. Meth.|Journal of Virological Methods JVME|J. Vet. Med. Educ.|Journal of Veterinary Medical Education JVMS|J. Vet. Med. Sci.|Journal of Veterinary Medical Science=The Journal of Veterinary Medical Science JVN|J. Vasc. Nurs.|Journal of Vascular Nursing JVP|J. Vertebr. Paleontol.=J. Vertebrate Paleontol.|Journal of Vertebrate Paleontology JVPT|J. Vet. Pharmacol. Ther.|Journal of Veterinary Pharmacology and Therapeutics JVR|J. Vasc. Res.|Journal of Vascular Research JVR1|J. Vestib. Res.=J. Vestibul. Res. Equilib. Orient.|Journal of Vestibular Research: Equilibrium & Orientation JVS|J. Vasc. Surg.|Journal of Vascular Surgery JVS1|J. Vet. Sci.|Journal of Veterinary Science JVS2|J. Visc. Surg.|Journal of Visceral Surgery JVSVLD|J. Vasc. Surg. Venous Lymphat. Disord.=J. Vasc. Surg. Venous Lymphat. Di.|Journal of Vascular Surgery. Venous and Lymphatic Disorders JWA|J. Women Aging|Journal of Women & Aging JWC|J. Wound Care|Journal of Wound Care JWCT|J. Water Chem. Technol.|Journal of Water Chemistry and Technology JWCT1|J. Wood Chem. Technol.|Journal of Wood Chemistry and Technology JWD|J. Wildl. Dis.=J. Wildlife Dis.|Journal of Wildlife Diseases JWE|J. Web Eng.|Journal of Web Engineering JWM|J. Wildl. Manage.|The Journal of Wildlife Management JWOCN|J. Wound Ostomy Continence Nurs.=J. Wound Ostomy Cont. Nurs.|Journal of Wound, Ostomy, and Continence Nursing JWS|J. Web Semant.|Journal of Web Semantics JXST|J. Xray Sci. Technol.=J. X Ray Sci. Technol.|Journal of X-Ray Science and Technology JYA|J. Youth Adolesc.=J. Youth Adolescence|Journal of Youth and Adolescence JZUSA|J. Zhejiang Univ. Sci. A|Journal of Zhejiang University-Science A JZUSB|J. Zhejiang Univ. Sci. B=J. Zhejiang Univ. Sc. B|Journal of Zhejiang University. Science. B JZWM|J. Zoo Wildl. Med.=J. Zoo Wildlife Med.|Journal of Zoo and Wildlife Medicine K|Kardiologiia|Kardiologiia K1|Knee|The Knee KBPR|Kidney Blood Press. Res.=Kidney Blood Pressure Res.|Kidney & Blood Pressure Research KBS|Knowl. Based Syst.|Knowledge-Based Systems KCET|Kinet. Catal. Engl. Tr.|Kinetics and Catalysis KDGCK|Kongressbd Dtsch. Ges. Chir. Kongr.|Kongressband=Kongressband. Deutsche Gesellschaft fur Chirurgie. Kongress KER|Knowl. Eng. Rev.=Knowledge Engineering Review|The Knowledge Engineering Review KI|Kaku Igaku|Kaku Igaku. the Japanese Journal of Nuclear Medicine KI1|Kidney Int.|Kidney International KIEJ|Kennedy Inst. Ethics J.=Kennedy Inst. Ethic. J.|Kennedy Institute of Ethics Journal KIS|Knowl. Inf. Syst.|Knowledge and Information Systems KJCE|Korean J. Chem. Eng.|Korean Journal of Chemical Engineering=The Korean Journal of Chemical Engineering KJIM|Korean J. Intern. Med.|Korean Journal of Internal Medicine=The Korean Journal of Internal Medicine KJM|Keio J. Med.|The Keio Journal of Medicine KJM1|Kyoto J. Math.|Kyoto Journal of Mathematics KJM2|Kyushu J. Math.|Kyushu Journal of Mathematics KJME|Korean J. Med. Educ.|Korean Journal of Medical Education KJMS|Kaohsiung J. Med. Sci.|Kaohsiung Journal of Medical Sciences=The Kaohsiung Journal of Medical Sciences KJMS1|Kobe J. Med. Sci.|The Kobe Journal of Medical Sciences KJO|Korean J. Ophthalmol.|Korean Journal of Ophthalmology KJP|Korean J. Parasitol.|Korean Journal of Parasitology=The Korean Journal of Parasitology KJR|Korean J. Radiol.|Korean Journal of Radiology KKGK|Kgk Kautsch. Gummi Kunstst.|Kgk-Kautschuk Gummi Kunststoffe KKR|Kagaku Kogaku Ronbunshu|Kagaku Kogaku Ronbunshu KMA|Klin. Monbl Augenheilkd=Klin. Monatsbl. Augenheilk.|Klinische Monatsblätter für Augenheilkunde KMJ|Kodai Math. J.|Kodai Mathematical Journal KMJ1|Kurume Med. J.|The Kurume Medical Journal KO|Klin. Onkol.|Klinická Onkologie: Casopis Ceské A Slovenské Onkologické Spolecnosti KP|Kardiol. Pol.|Kardiologia Polska KP1|Klin. Padiatr.=Klin. Padiat.|Klinische Pädiatrie KR|Kobunshi Ronbunshu|Kobunshi Ronbunshu KRM|Kinet. Relat. Mod.|Kinetic and Related Models KSSTA|Knee Surg. Sports Traumatol. Arthrosc.=Knee Surg. Sports Traumatol. Ar.|Knee Surgery, Sports Traumatology, Arthroscopy KTIIS|Ksii Trans. Internet Inf. Syst.|Ksii Transactions on Internet and Information Systems L|Laeknabladid|Læknablađiđ L1|Lakartidningen|Läkartidningen L2|Lancet|Lancet L3|Langmuir|Langmuir: The ACS Journal of Surfaces and Colloids L4|Laryngorhinootologie=Laryngo Rhino Otol.|Laryngo- Rhino- Otologie L5|Laryngoscope|The Laryngoscope L6|Laterality|Laterality L7|Leukemia|Leukemia L8|Lipids|Lipids L9|Luminescence|Luminescence: The Journal of Biological and Chemical Luminescence L10|Lung|Lung L11|Lupus|Lupus L12|Lymphology|Lymphology LA|Lab. Anim.=Lab. Animals|Laboratory Animals LAA|Linear Algebra Appl.|Linear Algebra and its Applications LAAR|Latin Am. Appl. Res.|Latin American Applied Research LAM|Lett. Appl. Microbiol.|Letters in Applied Microbiology LAS|Langenbecks Arch. Surg.=Langenbeck Arch. Surg.|Langenbeck's Archives of Surgery LB|Learn. Behav.|Learning & Behavior LC|Lab Chip|Lab on A Chip LC1|Liq. Cryst.|Liquid Crystals LC2|Lung Cancer|Lung Cancer: Journal of the International Association for the Study of Lung Cancer LCAH|Lancet Child Adolesc. Health|The Lancet. Child & Adolescent Health LCGCE|LC GC Eur.|LC GC Europe LCGCNA|LC GC N. Am.|LC GC North America LDA|Lifetime Data Anal.|Lifetime Data Analysis LDE|Lancet Diabetes Endocrinol.=Lancet Diabetes Endo.|Lancet Diabetes & Endocrinology=The Lancet. Diabetes & Endocrinology LDIIB|LDI Issue Brief|LDI Issue Brief LG|Lifestyle Genom.|Lifestyle Genomics LGBTH|LGBT Health|LGBT Health LGH|Lancet Gastroenterol. Hepatol.|The Lancet. Gastroenterology & Hepatology LGH1|Lancet Glob. Health|Lancet Global Health=The Lancet. Global Health LH|Lancet Haematol.|Lancet Haematology=The Lancet. Haematology LHB|Law Hum. Behav.=Law Human Behav.|Law and Human Behavior LHD|Lipids Health Dis.|Lipids in Health and Disease LHIV|Lancet HIV|The Lancet. HIV LHT|Libr. Hi Tech|Library Hi Tech LI|Lab. Invest.|Laboratory Investigation=Laboratory Investigation: A Journal of Technical Methods and Pathology LI1|Liver Int.|Liver International LID|Lancet Infect. Dis.|Lancet Infectious Diseases=The Lancet. Infectious Diseases LJCM|Lms J. Comput. Math.|Lms Journal of Computation and Mathematics LJIGPL|Log. J. IGPL|Logic Journal of the IGPL LJM|Libyan J. Med.|Libyan Journal of Medicine=The Libyan Journal of Medicine LJP|Lith. J. Phys.|Lithuanian Journal of Physics LL|Leuk. Lymphoma=Leukemia Lymphoma|Leukemia & Lymphoma LM|Lab. Med.|Laboratory Medicine LM1|Learn. Mem.=Learn. Memory|Learning & Memory LM2|Lit. Med.|Literature and Medicine LMA|Linear Multilinear Algebra|Linear & Multilinear Algebra=Linear and Multilinear Algebra LMCS|Log. Meth. Comput. Sci.|Logical Methods in Computer Science LMJ|Lith. Math. J.|Lithuanian Mathematical Journal LMP|Lett. Math. Phys.|Letters in Mathematical Physics LMS|Lasers Med. Sci.=Laser. Med. Sci.|Lasers in Medical Science LN|Lancet Neurol.|Lancet Neurology=The Lancet. Neurology LNM|Lect. Notes Math.|Lecture Notes in Mathematics LO|Lancet Oncol.|Lancet Oncology=The Lancet. Oncology LO1|Limnol. Oceanogr.|Limnology and Oceanography LOC|Lett. Org. Chem.|Letters in Organic Chemistry LP|Lancet Psychiatry=Lancet Psychiat.|The Lancet. Psychiatry LP1|Laser Phys.|Laser Physics LPB|Laser Part. Beams|Laser and Particle Beams LPH|Lancet Planet. Health|The Lancet. Planetary Health LPH1|Lancet Public Health|The Lancet. Public Health LPL|Laser Phys. Lett.|Laser Physics Letters LPR|Laser Photon. Rev.=Laser Photonics Rev.|Laser & Photonics Reviews LPV|Logoped. Phoniatr. Vocol.=Logop. Phoniatr. Vocology|Logopedics, Phoniatrics, Vocology LR|Leuk. Res.=Leukemia Res.|Leukemia Research LRB|Lymphat. Res. Biol.|Lymphatic Research and Biology LRE|Lang. Resour. Eval.|Language Resources and Evaluation LRM|Lancet Respir. Med.=Lancet Resp. Med.|Lancet Respiratory Medicine=The Lancet. Respiratory Medicine LRR|Living Rev. Relativ.|Living Reviews in Relativity LS|Lang. Speech|Language and Speech LS1|Life Sci.|Life Sciences LSA|Light Sci. Appl.|Light, Science & Applications LSHSS|Lang. Speech Hear. Serv. Sch.=Lang. Speech Hearing Serv. Sch.|Language, Speech, and Hearing Services in Schools LSM|Lasers Surg. Med.=Laser. Surg. Med.|Lasers in Surgery and Medicine LSMS|Lasers Surg. Med. Suppl.|Lasers in Surgery and Medicine. Supplement LSSP|Life Sci. Soc. Policy|Life Sciences, Society and Policy LT|Liver Transpl.=Liver Transplant.|Liver Transplantation LTP|Low Temp. Phys.|Low Temperature Physics LUTS|Low. Urin. Tract Symptoms|Lower Urinary Tract Symptoms LWTFST|LWT Food Sci. Technol.|LWT-Food Science and Technology M|Mabs=Mabs Austin|Mabs M1|Macroheterocycles|Macroheterocycles M2|Macromolecules|Macromolecules M3|Magnetohydrodynamics|Magnetohydrodynamics M4|Mathematika|Mathematika M5|Maturitas|Maturitas M6|Mbio|Mbio M7|Medwave|Medwave M8|Memory|Memory M9|Menopause|Menopause: The Journal of the North American Menopause Society M10|Metabolomics|Metabolomics M11|Metallomics|Metallomics: Integrated Biometal Science M12|Methods|Methods: A Companion to Methods in Enzymology M13|Metrika|Metrika M14|Microbiologyopen|Microbiologyopen M15|Microbiome|Microbiome M16|Microcirculation|Microcirculation M17|Micron|Micron: The International Research and Review Journal for Microscopy M18|Microrna|Microrna M19|Microscopy=Microscopy Jpn.|Microscopy: The Journal of the Quekett Microscopical Club M20|Microsurgery=Microsurg.|Microsurgery M21|Midwifery|Midwifery M22|Mitochondrion|Mitochondrion M23|Molecules|Molecules: A Journal of Synthetic Chemistry and Natural Product Chemistry M24|Morphologie|Morphologie: Bulletin de L'association des Anatomistes M25|Msphere|Msphere M26|Mutagenesis|Mutagenesis M27|Mycobiology|Mycobiology M28|Mycologia|Mycologia M29|Mycopathologia|Mycopathologia M30|Mycorrhiza|Mycorrhiza M31|Mycoses|Mycoses MA|Math. Ann.|Mathematische Annalen MA1|Med. Anthropol.|Medical Anthropology MA2|Med. Arch.|Medical Archives MA3|Microchim. Acta|Microchimica Acta MA4|Mikrochim. Acta|Mikrochimica Acta MA5|Minerva Anestesiol.|Minerva Anestesiologica MA6|Mol. Autism|Molecular Autism MAD|Mech. Ageing Dev.=Mech. Age. Dev.|Mechanisms of Ageing and Development MAF|Methods Appl. Fluoresc.=Methods Appl. Fluores.|Methods and Applications in Fluorescence MAII|Monoclon. Antib. Immunodiagn. Immunother.|Monoclonal Antibodies in Immunodiagnosis and Immunotherapy MAM|Mol. Aspects Med.|Molecular Aspects of Medicine MAMS|Mem. Amer. Math. Soc.|Memoirs of the American Mathematical Society MAQ|Med. Anthropol. Q.|Medical Anthropology Quarterly MB|Macromol. Biosci.|Macromolecular Bioscience MB1|Mar. Biotechnol.=Mar. Biotechnolog.|Marine Biotechnology MB2|Math. Biosci.|Mathematical Biosciences MB3|Matrix Biol.=Matrix Biology|Matrix Biology: Journal of the International Society for Matrix Biology MB4|Microb. Biotechnol.|Microbial Biotechnology MB5|Mikrobiyol. Bul.|Mikrobiyoloji Bülteni MB6|Minerva Biotecnol.|Minerva Biotecnologica MB7|Mol. Biotechnol.|Molecular Biotechnology MB8|Mol. Brain|Molecular Brain MBC|Mol. Biol. Cell|Molecular Biology of the Cell MBD|Metab. Brain Dis.|Metabolic Brain Disease MBE|Math. Biosci. Eng.|Mathematical Biosciences and Engineering MBE1|Mol. Biol. Evol.|Molecular Biology and Evolution MBEC|Med. Biol. Eng. Comput.|Medical & Biological Engineering & Computing MBET|Mol. Biol. Engl. Tr.|Molecular Biology MBP|Mol. Biochem. Parasitol.=Mol. Biochem. Parasit.|Molecular and Biochemical Parasitology MBR|Mol. Biol. Rep.|Molecular Biology Reports MBR1|Monash Bioeth. Rev.|Monash Bioethics Review MBR2|Multivariate Behav. Res.=Multivar. Behav. Res.|Multivariate Behavioral Research MC|Math. Commun.|Mathematical Communications MC1|Math. Comput.|Mathematics of Computation MC2|Med. Care|Medical Care MC3|Med. Chem.|Medicinal Chemistry MC4|Mem. Cognit.=Mem. Cognition|Memory & Cognition MC5|Memet. Comput.|Memetic Computing MC6|Mendeleev Commun.|Mendeleev Communications MC7|Minerva Cardioangiol.|Minerva Cardioangiologica MC8|Minerva Chir.|Minerva Chirurgica MC9|Mol. Cancer|Molecular Cancer MC10|Mol. Carcinog.=Mol. Carcinogen.|Molecular Carcinogenesis MC11|Mol. Catal.|Molecular Catalysis MC12|Mol. Cell|Molecular Cell MC13|Mol. Cells|Molecules and Cells MC14|Mol. Cytogenet.|Molecular Cytogenetics MC15|Monatsh. Chem.|Monatshefte fur Chemie MC16|Motor Control|Motor Control MC17|Musculoskeletal Care|Musculoskeletal Care MCAP|Methodol. Comput. Appl. Probab.=Methodol. Comput. Appl.|Methodology and Computing in Applied Probability MCB|Methods Cell Biol.=Method. Cell Biol.|Methods in Cell Biology MCB1|Mol. Cell. Biochem.|Molecular and Cellular Biochemistry MCB2|Mol. Cell. Biol.|Molecular and Cellular Biology MCC|Monogr. Clin. Cytol.|Monographs in Clinical Cytology MCE|Metab. Clin. Exp.=Metabolism|Metabolism: Clinical and Experimental MCE1|Mol. Cell. Endocrinol.|Molecular and Cellular Endocrinology MCF|Microb. Cell Fact.|Microbial Cell Factories MCHJ|Matern. Child Health J.=Matern. Child Hlth. J.|Maternal and Child Health Journal MCLC|Mol. Cryst. Liquid Cryst.|Molecular Crystals and Liquid Crystals MCM|Math. Comput. Model.|Mathematical and Computer Modelling MCMCC|Match Commun. Math. Comput. Chem.|Match-Communications in Mathematical and in Computer Chemistry MCMDS|Math. Comput. Model. Dyn. Syst.=Math. Comput. Model. Dynam. Syst.|Mathematical and Computer Modelling of Dynamical Systems MCN|Matern. Child Nutr.|Maternal & Child Nutrition=Maternal and Child Nutrition MCN1|Mol. Cell. Neurosci.|Molecular and Cellular Neuroscience=Molecular and Cellular Neurosciences MCNA|Med. Clin. North Am.|The Medical Clinics of North America MCNAJMCN|MCN Am. J. Matern. Child Nurs.=MCN Am. J. Matern. Chil.|MCN: The American Journal of Maternal-Child Nursing MCP|Macromol. Chem. Phys.=Macromol. Chem. Physics|Macromolecular Chemistry and Physics MCP1|Mayo Clin. Proc.|Mayo Clinic Proceedings MCP2|Mol. Cell. Probes=Mol. Cell. Probe.|Molecular and Cellular Probes MCP3|Mol. Cell. Proteomics|Molecular & Cellular Proteomics MCR|Mol. Cancer Res.|Molecular Cancer Research MCRF|Math. Control Relat. Fields|Mathematical Control and Related Fields MCRR|Med. Care Res. Rev.|Medical Care Research and Review MCS|Math. Comput. Simul.=Math. Comput. Simulat.|Mathematics and Computers in Simulation MCS1|Med. Confl. Surviv.|Medicine, Conflict, and Survival MCT|Mol. Cancer Ther.|Molecular Cancer Therapeutics MD|Mar. Drugs|Marine Drugs MD1|Mech. Dev.=Mech. Develop.|Mechanisms of Development MD2|Med. Dosim.|Medical Dosimetry MD3|Mol. Divers.|Molecular Diversity MD4|Mov. Disord.=Movement Disord.|Movement Disorders MDA|MD Advis.|MD Advisor: A Journal for New Jersey Medical Community MDCJ|Methodist Debakey Cardiovasc. J.|Methodist Debakey Cardiovascular Journal MDM|Med. Decis. Making|Medical Decision Making=Medical Decision Making: An International Journal of the Society for Medical Decision Making MDNA|Mob. DNA=Mobile DNA UK|Mobile DNA MDNAADNAMSA|Mitochondrial DNA A DNA Mapp. Seq. Anal.|Mitochondrial DNA Part A: DNA Mapping, Sequencing, and Analysis MDNABR|Mitochondrial DNA B Resour.=Mitochondrial DNA Part B Reso.|Mitochondrial DNA Part B: Resources MDNAPA|Mitochondrial DNA Part A|Mitochondrial DNA Part A MDR|Microb. Drug Resist.|Microbial Drug Resistance MDT|Mol. Diagn. Ther.|Molecular Diagnosis & Therapy ME|Med. Educ.|Medical Education ME1|Metab. Eng.|Metabolic Engineering ME2|Meth. Enzymol.=Methods Enzymol.|Methods in Enzymology ME3|Microb. Ecol.=Microbial Ecol.|Microbial Ecology ME4|Microbes Environ.=Microbes Environments|Microbes and Environments ME5|Minerva Endocrinol.|Minerva Endocrinologica ME6|Mol. Ecol.|Molecular Ecology MEAJO|Middle East Afr. J. Ophthalmol.|Middle East African Journal of Ophthalmology MEDICCR|MEDICC Rev.|MEDICC Review MEO|Med. Educ. Online|Medical Education Online MEP|Med. Eng. Phys.|Medical Engineering & Physics MER|Mar. Environ. Res.|Marine Environment Research=Marine Environmental Research MER1|Mol. Ecol. Resour.|Molecular Ecology Resources METRON0|METRON|METRON MG|Mamm. Genome|Mammalian Genome MG1|Mar. Genomics=Mar. Genom.|Marine Genomics MG2|Med. Genet.=Med. Genet. Berlin|Medizinische Genetik=Medizinische Genetik: Mitteilungsblatt des Berufsverbandes Medizinische Genetik E.V MG3|Microb. Genom.=Microb. Genomics|Microbial Genomics MG4|Minerva Ginecol.|Minerva Ginecologica MGC|Main Group Chem.|Main Group Chemistry MGD|Minerva Gastroenterol. Dietol.|Minerva Gastroenterologica e Dietologica MGG|Mol. Genet. Genomics|Molecular Genetics and Genomics MGGM|Mol. Genet. Genomic Med.=Mol. Genet. Genom. Med.|Molecular Genetics & Genomic Medicine MGM|Mol. Genet. Metab.|Molecular Genetics and Metabolism MGMC|Main Group Met. Chem.|Main Group Metal Chemistry MH|Med. Hist.|Medical History MH1|Med. Humanit.|Medical Humanities MH2|Med. Hypotheses|Medical Hypotheses MHCP|Med. Health Care Philos.=Med. Health Care Phil.|Medicine, Health Care, and Philosophy MHM|Mon. Hefte Math.=Monatsh. Math.|Monatshefte fur Mathematik MHR|Mol. Hum. Reprod.|Molecular Human Reproduction MI|Math. Intell.|Mathematical Intelligencer MI1|Med. Intensiva=Med. Intensiv.|Medicina Intensiva MI2|Mediators Inflamm.=Mediat. Inflamm.|Mediators of Inflammation MI3|Microbes Infect.|Microbes and Infection MI4|Microbiol. Immunol.|Microbiology and Immunology MI5|Mol. Imaging|Molecular Imaging MI6|Mol. Immunol.|Molecular Immunology MI7|Mol. Inform.=Mol. Inf.|Molecular Informatics MI8|Mucosal Immunol.|Mucosal Immunology MIA|Math. Inequal. Appl.|Mathematical Inequalities & Applications MIA1|Med. Image Anal.|Medical Image Analysis MIB|Mol. Imaging Biol.|Molecular Imaging and Biology MIM|Methods Inf. Med.=Methods Inform. Med.|Methods of Information in Medicine MIOC|Mem. Inst. Oswaldo Cruz=Mem. I. Oswaldo Cruz|Memórias do Instituto Oswaldo Cruz MIS|Mob. Inf. Syst.|Mobile Information Systems MISQ|MIS Quart.|MIS Quarterly MITAT|Minim. Invasive Ther. Allied Technol.|Minimally Invasive Therapy & Allied Technologies MJ|Malar. J.=Malaria J.|Malaria Journal MJ1|Medizinhist. J.|Medizinhistorisches Journal MJ2|Microchem. J.|Microchemical Journal=Microchemical Journal, Devoted to the Application of Microtechniques in All Branches of Science MJA|Med. J. Aust.|The Medical Journal of Australia MJCCE|Maced. J. Chem. Chem. Eng.|Macedonian Journal of Chemistry and Chemical Engineering MJCS|Malays. J. Comput. Sci.|Malaysian Journal of Computer Science MJM|Med. J. Malaysia|The Medical Journal of Malaysia MJM1|Mediterr. J. Math.|Mediterranean Journal of Mathematics MJM2|Milan J. Math.|Milan Journal of Mathematics MJMSI|Mapan J. Metrol. Soc. India|Mapan: Journal of Metrology Society of India MJP|Malays. J. Pathol.=Malay. J. Pathol.|Malaysian Journal of Pathology=The Malaysian Journal of Pathology MKIN|Med. Klin. Intensivmed. Notfmed=Med. Klin. Intensivmed. Notfallm.|Medizinische Klinik, Intensivmedizin und Notfallmedizin ML|Mach. Learn.|Machine Learning ML1|Med. Lav.|Medicina Del Lavoro=La Medicina Del Lavoro MLDT|Med. Lett. Drugs Ther.=Med. Letter Drugs Ther.|Medical Letter on Drugs and Therapeutics=The Medical Letter on Drugs and Therapeutics MLJ|Med. Leg. J.|The Medico-Legal Journal MLQ|Math. Logic Quart.|Mathematical Logic Quarterly MLR|Med. Law Rev.|Medical Law Review MM|Mali Med.|Le Mali Médical MM1|Manuscripta Math.|Manuscripta Mathematica MM2|Med. Mycol.|Medical Mycology MM3|Microprocess. Microsyst.=Microprocessors Microsystems|Microprocessors and Microsystems MM4|Microsc. Microanal.|Microscopy and Microanalysis MM5|Mil. Med.=Milit. Med.|Military Medicine MM6|Mind. Mach.|Minds and Machines MM7|Minerva Med.|Minerva Medica MM8|Mol. Med.|Molecular Medicine MM9|Mol. Metab.|Molecular Metabolism MM10|Mol. Microbiol.|Molecular Microbiology MMA|Math. Model. Anal.|Mathematical Modelling and Analysis MMAS|Math. Methods Appl. Sci.=Math. Method. Appl. Sci.|Mathematical Methods in the Applied Sciences MMB|Math. Med. Biol.|Mathematical Medicine and Biology=Mathematical Medicine and Biology: A Journal of the IMA MMB1|Methods Mol. Biol.|Methods in Molecular Biology MMB2|Mol. Membr. Biol.=Mol. Membrane Biol.|Molecular Membrane Biology MMBR|Microbiol. Mol. Biol. Rev.=Microbiol. Mol. Biol. R.|Microbiology and Molecular Biology Reviews MMI|Med. Mal. Infect.=Med. Maladies Infect.|Médecine et Maladies Infectieuses MMI1|Med. Microbiol. Immunol.=Med. Microbiol. Immun.|Medical Microbiology and Immunology MMJ|Malawi Med. J.|Malawi Medical Journal=Malawi Medical Journal: The Journal of Medical Association of Malawi MMJ1|Med. Mycol. J.|Medical Mycology Journal MMJ2|Mich. Math. J.|Michigan Mathematical Journal MMJ3|Mosc. Math. J.|Moscow Mathematical Journal MMJ4|Mymensingh Med. J.|Mymensingh Medical Journal MMM|Med. Mol. Morphol.|Medical Molecular Morphology MMMAS|Math. Model. Method. Appl. Sci.|Mathematical Models & Methods in Applied Sciences MMN|Miskolc Math. Notes|Miskolc Mathematical Notes MMNP|Math. Model. Nat. Phenom.=Math. Model. Nat. Pheno.|Mathematical Modelling of Natural Phenomena MMR|Mil. Med. Res.|Military Medical Research MMR1|Mol. Med. Rep.|Molecular Medicine Reports MMS|Math. Methods Stat.=Math. Methods Statist.|Mathematical Methods of Statistics MMS1|Metrol. Meas. Syst.|Metrology and Measurement Systems MMS2|Multiscale Model. Simul.=Multiscale Model. Sim.|Multiscale Modeling & Simulation=Multiscale Modeling & Simulation: A SIAM Interdisciplinary Journal MMWFM|MMW Fortschr. Med.|MMW Fortschritte Der Medizin MMWRMMWR|MMWR Morb. Mortal. Wkly. Rep.=MMWR Morbid. Mortal. Wkly. Rep.|MMWR. Morbidity and Mortality Weekly Report MMWRRR|MMWR Recomm. Rep.|MMWR Recommendations and Reports=MMWR. Recommendations and Reports: Morbidity and Mortality Weekly Report. Recommendations and Reports MMWRSS|MMWR Surveill. Summ.|MMWR Surveillance Summaries=MMWR. Surveillance Summaries: Morbidity and Mortality Weekly Report. Surveillance Summaries MN|Math. Nachr.|Mathematische Nachrichten MN1|Mol. Neurobiol.|Molecular Neurobiology MN2|Mol. Neurodegener.|Molecular Neurodegeneration MN3|Muscle Nerve|Muscle & Nerve MNA|Mobile Netw. Appl.|Mobile Networks & Applications MNET|Math. Notes Engl. Tr.|Mathematical Notes MNFR|Mol. Nutr. Food Res.|Molecular Nutrition & Food Research MNL|Micro Nano Lett.|Micro & Nano Letters MNRAS|Mon. Not. R. Astron. Soc.=Mon. Notic. Roy. Astron. Soc.|Monthy Notices of the Royal Astronomical Society=Monthly Notices of the Royal Astronomical Society MO|Magy. Onkol.|Magyar Onkologia MO1|Med. Oncol.|Medical Oncology MO2|Mol. Omics|Molecular Omics MO3|Mol. Oncol.|Molecular Oncology MOM|MO Med.|Missouri Medicine MOM1|Mol. Oral Microbiol.|Molecular Oral Microbiology MOPOCB|Med. Oral Patol. Oral Cir. Bucal=Med. Oral Patol. Oral|Medicina Oral, Patología Oral y Cirugía Bucal MOR|Math. Oper. Res.|Mathematics of Operations Research MOS|Monogr. Oral Sci.|Monographs in Oral Science MP|Math. Program.|Mathematical Programming MP1|Med. Phys.|Medical Physics MP2|Med. Pr.|Medycyna Pracy MP3|Microb. Pathog.=Microb. Pathogenesis|Microbial Pathogenesis MP4|Minerva Pediatr.=Minerva Pediat.|Minerva Pediatrica MP5|Mod. Pathol.=Modern Pathol.|Modern Pathology MP6|Mol. Pain|Molecular Pain MP7|Mol. Pharm.=Mol. Pharmaceut.|Molecular Pharmaceutics MP8|Mol. Pharmacol.|Molecular Pharmacology MP9|Mol. Phys.|Molecular Physics MP10|Mol. Plant|Molecular Plant MP11|Mol. Psychiatry=Mol. Psychiatr.|Molecular Psychiatry MPAG|Math. Phys. Anal. Geom.|Mathematical Physics Analysis and Geometry MPB|Mar. Pollut. Bull.|Marine Pollution Bulletin=Marine Pollutution Bulletin MPCPS|Math. Proc. Cambridge Phil. Soc.|Mathematical Proceedings of the Cambridge Philosophical Society MPE|Math. Probl. Eng.|Mathematical Problems in Engineering MPE1|Mol. Phylogenet. Evol.|Molecular Phylogenetics and Evolution MPLA|Mod. Phys. Lett. A|Modern Physics Letters A MPLB|Mod. Phys. Lett. B|Modern Physics Letters B=Modern Physics Letters. B, Condensed Matter Physics, Statistical Physics, Applied Physics MPMI|Mol. Plant Microbe Interact.=Mol. Plant Microbe Interaction.|Molecular Plant-Microbe Interactions MPP|Med. Princ. Pract.|Medical Principles and Practice: International Journal of the Kuwait University, Health Science Centre MPP1|Mol. Plant Pathol.|Molecular Plant Pathology MPPA|Med. Probl. Perform. Art.=Med. Probl. Perform. Ar.|Medical Problems of Performing Artists MPRF|Markov Process. Relat. Fields|Markov Processes and Related Fields MQ|Milbank Q.=Milbank Quart.|Milbank Quarterly=The Milbank Quarterly MR|Macromol. Res.|Macromolecular Research MR1|Magnes. Res.=Magnesium Res.|Magnesium Research MR2|Math. Rep.|Mathematical Reports MR3|Melanoma Res.|Melanoma Research MR4|Microbiol. Res.|Microbiological Research MR5|Microvasc. Res.=Microvascular Res.|Microvascular Research MR6|Mod. Rheumatol.|Modern Rheumatology MR7|Multisens. Res.|Multisensory Research MR8|Mutat. Res.|Mutation Research MR9|Mycotoxin Res.|Mycotoxin Research MRC|Macromol. Rapid Commun.=Macromol. Rapid Comm.|Macromolecular Rapid Communications MRC1|Magn. Reson. Chem.|Magnetic Resonance in Chemistry MRD|Mol. Reprod. Dev.|Molecular Reproduction and Development MRE|Macromol. React. Eng.|Macromolecular Reaction Engineering MRFMMM|Mutat. Res. Fundam. Mol. Mech. Mut.|Mutation Research-Fundamental and Molecular Mechanisms of Mutagenesis MRGTEM|Mutat. Res. Genet. Toxicol. Environ. Mutagen.=Mutat. Res. Genet. Toxicol. E. M.|Mutation Research. Genetic Toxicology and Environmental Mutagenesis MRI|Magn. Reson. Imaging|Magnetic Resonance Imaging MRICNA|Magn. Reson. Imaging Clin. N. Am.=Magn. Reson. Imaging C.|Magnetic Resonance Imaging Clinics of North America MRL|Math. Res. Lett.|Mathematical Research Letters MRM|Magn. Reson. Med.|Magnetic Resonance in Medicine MRMC|Mini Rev. Med. Chem.|Mini Reviews in Medicinal Chemistry MRMS|Magn. Reson. Med. Sci.|Magnetic Resonance in Medical Sciences MROC|Mini Rev. Org. Chem.|Mini-Reviews in Organic Chemistry MRR|Med. Res. Rev.|Medicinal Research Reviews MRRMR|Mutat. Res. Rev. Mutat. Res.=Mutat. Res. Rev. Mutat.|Mutation Research. Reviews in Mutation Research MRSQ|Med. Ref. Serv. Q.|Medical Reference Services Quarterly MRT|Microsc. Res. Tech.=Microsc. Res. Technique|Microscopy Research and Technique MS|Magy. Seb.|Magyar Sebészet MS1|Manage. Sci.|Management Science MS2|Math. Scand.|Mathematica Scandinavica MS3|Math. Sci.|Mathematical Scientist MS4|Math. Slovaca|Mathematica Slovaca MS5|Meat Sci.|Meat Science MS6|Mech. Solids|Mechanics of Solids MS7|Microbiol. Spectr.|Microbiology Spectrum MS8|Minerva Stomatol.|Minerva Stomatologica MS9|Mol. Simul.=Mol. Simulat.|Molecular Simulation MS10|Mult. Scler.|Multiple Sclerosis: Clinical and Laboratory Research MS11|Multimedia Syst.|Multimedia Systems MS12|Musculoskelet. Surg.|Musculoskeletal Surgery MSB|Mol. Syst. Biol.|Molecular Systems Biology MSCS|Math. Struct. Comput. Sci.|Mathematical Structures in Computer Science MSECMBA|Mater. Sci. Eng. C Mater. Biol. Appl.=Mat. Sci. Eng. C Mater.|Materials Science and Engineering C=Materials Science & Engineering. C, Materials for Biological Applications MSL|Med. Sci. Law|Medicine, Science, and the Law MSM|Med. Sci. Monit.|Medical Science Monitor: International Medical Journal of Experimental and Clinical Research MSMBR|Med. Sci. Monit. Basic Res.|Medical Science Monitor Basic Research MSP|Musculoskelet. Sci. Pract.=Musculoskel. Sci. Prac.|Musculoskeletal Science & Practice=Musculoskeletal Science and Practice MSR|Mass Spectrom. Rev.|Mass Spectrometry Reviews MSRCD|Monogr. Soc. Res. Child Dev.=Monogr. Soc. Res. Child Develop.|Monographs of the Society for Research in Child Development MSRD|Metab. Syndr. Relat. Disord.=Metab. Syndr. Relat. D.|Metabolic Syndrome and Related Disorders MSRD1|Mult. Scler. Relat. Disord.=Mult. Scler. Relat. Dis.|Multiple Sclerosis and Related Disorders MSS|Med. Sport Sci.|Medicine and Sport Science MSSE|Med. Sci. Sports Exerc.=Med. Sci. Sport. Exercise|Medicine and Science in Sports and Exercise MSSP|Mech. Syst. Signal Process.=Mech. Syst. Signal Pr.|Mechanical Systems and Signal Processing MSSP1|Multidimens. Syst. Signal Process.=Multidimension. Syst. Sign. Proc.|Multidimensional Systems and Signal Processing MST|Meas. Sci. Technol.|Measurement Science & Technology=Measurement Science and Technology MST1|Med. Sante Trop.|Médecine et Santé Tropicales MT|Med. Teach.|Medical Teacher MT1|Mol. Ther.|Molecular Therapy=Molecular Therapy: The Journal of the American Society of Gene Therapy MTA|Multimed. Tools Appl.|Multimedia Tools and Applications MTMCD|Mol. Ther. Methods Clin. Dev.=Mol. Ther. Meth. Clin. D.|Molecular Therapy. Methods & Clinical Development MTNA|Mol. Ther. Nucleic Acids=Mol. Ther. Nucl. Acids|Molecular Therapy. Nucleic Acids MTO|Mol. Ther. Oncolytics|Molecular Therapy Oncolytics MTP|Mod. Trends Pharmacopsychiatry|Modern Trends in Pharmacopsychiatry MTS|Macromol. Theory Simul.=Macromol. Theor. Simul.|Macromolecular Theory and Simulations MU|Med. Ultrason.|Medical Ultrasonography MUPB|Mosc. Univ. Phys. Bull.|Moscow University Physics Bulletin MV|Mol. Vis.|Molecular Vision MVE|Med. Vet. Entomol.|Medical and Veterinary Entomology MWT|Membr. Water Treat.|Membrane Water Treatment MZ|Math. Z.|Mathematische Zeitschrift N|Nano|Nano N1|Nanomedicine=Nanomed. Nanotechnol. Biol. Med.|Nanomedicine: Nanotechnology, Biology, and Medicine N2|Nanophotonics=Nanophotonics Berlin|Nanophotonics N3|Nanoscale|Nanoscale N4|Nanotechnology=Nanotechnol.|Nanotechnology N5|Nanotoxicology|Nanotoxicology N6|Nature|Nature N7|Naturwissenschaften|Die Naturwissenschaften N8|Nefrologia|Nefrología N9|Neonatology|Neonatology N10|Neoplasia|Neoplasia: An International Journal for Oncology Research N11|Neoplasma|Neoplasma N12|Nephron|Nephron N13|Nervenarzt|Der Nervenarzt N14|Network=Network Comput. Neural Syst.|Network: Computation in Neural Systems N15|Networks|Networks N16|Neurocase|Neurocase N17|Neurochirurgie|Neuro-Chirurgie N18|Neurocomputing|Neurocomputing N19|Neuroendocrinology|Neuroendocrinology N20|Neuroepidemiology|Neuroepidemiology N21|Neurogenetics|Neurogenetics N22|Neuroimage|Neuroimage N23|Neuroimmunomodulation=Neuroimmunomodulat.|Neuroimmunomodulation N24|Neuroinformatics|Neuroinformatics N25|Neurologia|Neurología N26|Neurologist|The Neurologist N27|Neurology|Neurology N28|Neuromodulation|Neuromodulation: Journal of the International Neuromodulation Society N29|Neuron|Neuron N30|Neuropathology|Neuropathology N31|Neuropediatrics|Neuropediatrics N32|Neuropeptides|Neuropeptides N33|Neuropharmacology|Neuropharmacology N34|Neuropsychobiology|Neuropsychobiology N35|Neuropsychologia|Neuropsychologia N36|Neuropsychology|Neuropsychology N37|Neuropsychopharmacology=Neuropsychopharmacol.|Neuropsychopharmacology N38|Neuroradiology|Neuroradiology N39|Neurorehabilitation|Neurorehabilitation N40|Neuroreport|Neuroreport N41|Neuroscience|Neuroscience N42|Neuroscientist|The Neuroscientist: A Review Journal Bringing Neurobiology, Neurology and Psychiatry N43|Neurosignals|Neuro-Signals N44|Neurosurgery|Neurosurgery N45|Neurotherapeutics|Neurotherapeutics: The Journal of the American Society for Experimental Neurotherapeutics N46|Neurotoxicology|Neurotoxicology N47|Nonlinearity|Nonlinearity N48|Nucleus=Nucleus Phila|Nucleus N49|Nuklearmedizin=Nuklearmed. Nucl. Med.|Nuklearmedizin. Nuclear Medicine N50|Nukleonika|Nukleonika N51|Nursing|Nursing N52|Nutrients|Nutrients N53|Nutrition|Nutrition NA|Nat. Astron.|Nature Astronomy NA1|Neurobiol. Aging|Neurobiology of Aging NA2|Numer. Algorithms=Numer. Algor.|Numerical Algorithms NAHS|Nonlinear Anal. Hybrid Syst.|Nonlinear Analysis-Hybrid Systems NAMC|Nonlinear Anal. Model. Control|Nonlinear Analysis-Modelling and Control NAMS|Notices Amer. Math. Soc.|Notices of the American Mathematical Society NAN|Neuropathol. Appl. Neurobiol.=Neuropath. Appl. Neuro.|Neuropathology and Applied Neurobiology NAQ|Nurs. Adm. Q.|Nursing Administration Quarterly NAR|Nucleic Acids Res.=Nucl. Acids Res.|Nucleic Acids Research NARWA|Nonlinear Anal. Real World Appl.=Nonlinear Anal. Real World App.|Nonlinear Analysis. Real World Applications NASNSN|NASN Sch. Nurse|NASN School Nurse NAT|Nucleic Acid Ther.=Nucl. Acid Ther.|Nucleic Acid Therapeutics NATMA|Nonlinear Anal. Theory Methods Appl.=Nonlinear Anal. Theor. Meth. App.|Nonlinear Analysis, Theory, Methods & Applications NB|N. Biotechnol.=New Biotechnol.|New Biotechnology NB1|Nat. Biotechnol.|Nature Biotechnology NB2|Neurosci. Bull.|Neuroscience Bulletin NB3|New Bioeth.|The New Bioethics: A Multidisciplinary Journal of Biotechnology and the Body NBE|Nat. Biomed. Eng.|Nature Biomedical Engineering NBR|Neurosci. Biobehav. Rev.=Neurosci. Biobehav. R.|Neuroscience and Biobehavioral Reviews NC|Nat. Catal.|Nature Catalysis NC1|Nat. Chem.|Nature Chemistry NC2|Nat. Commun.|Nature Communications NC3|Nat. Comput.|Natural Computing NC4|Neural Comput.|Neural Computation NC5|Neurocrit. Care|Neurocritical Care NC6|Neuroimage Clin.|Neuroimage. Clinical NC7|Neurol. Clin.|Neurologic Clinics NC8|Nutr. Cancer|Nutrition and Cancer=Nutrition and Cancer-An International Journal NCB|Nat. Cell Biol.|Nature Cell Biology NCB1|Nat. Chem. Biol.|Nature Chemical Biology NCC|Nurs. Crit. Care|Nursing in Critical Care NCHSDB|NCHS Data Brief|NCHS Data Brief NCN|Nano Commun. Netw.|Nano Communication Networks NCNA|Neuroimaging Clin. N. Am.=Neuroimag. Clin. N. Am.|Neuroimaging Clinics of North America NCNA1|Neurosurg. Clin. N. Am.=Neurosurg. Clin. Amer.|Neurosurgery Clinics of North America NCNA2|Nurs. Clin. North Am.|The Nursing Clinics of North America NCP|Nutr. Clin. Pract.|Nutrition in Clinical Practice NCYP|Nurs. Child. Young People|Nursing Children and Young People ND|Neural Dev.|Neural Development ND1|Neurobiol. Dis.=Neurobiol. Disease|Neurobiology of Disease ND2|Neurodegener Dis.|Neuro-Degenerative Diseases ND3|Neuromuscul. Disord.=Neuromuscular Disord.|Neuromuscular Disorders ND4|Nutr. Diabetes|Nutrition & Diabetes ND5|Nutr. Diet.|Nutrition & Dietetics=Nutrition & Dietetics: The Journal of the Dietitians Association of Australia NDCAD|New Dir. Child Adolesc. Dev.=New Dir. Child Adoles. Develop.|New Directions for Child and Adolescent Development NDCBANC|Neuropsychol. Dev. Cogn. B Aging Neuropsychol. Cogn.|Neuropsychology, Development, and Cognition Section B: Aging, Neuropsychology and Cognition NDJFL|Notre Dame J. Form. Log.|Notre Dame Journal of Formal Logic NDM|Neurodegener. Dis. Manag.|Neurodegenerative Disease Management NDS|Nucl. Data Sheets|Nuclear Data Sheets NDSL|New Dir. Stud. Leadersh.|New Directions for Student Leadership NDT|Nephrol. Dial. Transplant.=Nephrol. Dialysis Transplant.|Nephrology, Dialysis, Transplantation NE|Neotrop. Entomol.|Neotropical Entomology NE1|Nurs. Ethics|Nursing Ethics NE2|Nurse Educ.=Nurs. Educ.|Nurse Educator NEE|Nat. Ecol. Evol.|Nature Ecology & Evolution NEJM|N. Engl. J. Med.=New Engl. J. Med.|New England Journal of Medicine=The New England Journal of Medicine NEL|Neuro Endocrinol. Lett.=Neuroendocrinol. Lett.|Neuro Endocrinology Letters NEP|Nurse Educ. Pract.|Nurse Education in Practice NET|Nurse Educ. Today=Nurs. Educ. Today|Nurse Education Today NEZ|Nihon Eiseigaku Zasshi|Nihon Eiseigaku Zasshi. Japanese Journal of Hygiene NF|Neurosurg. Focus|Neurosurgical Focus NF1|Nucl. Fusion|Nuclear Fusion NF2|Nurs. Forum|Nursing Forum NFAO|Numer. Funct. Anal. Optim.=Numer. Func. Anal. Optimiz.|Numerical Functional Analysis and Optimization NG|Nat. Genet.|Nature Genetics NGC|New Gener. Comput.=New Generation Comput.|New Generation Computing NH|Noise Health|Noise & Health NH1|Nutr. Health|Nutrition and Health NH2|Nutr. Hosp.|Nutrición Hospitalaria NHGGZ|Nihon Hoshasen Gijutsu Gakkai Zasshi|Nihon Hōshasen Gijutsu Gakkai Zasshi NHGZ|Nippon Hinyokika Gakkai Zasshi|Nihon Hinyōkika Gakkai Zasshi. the Japanese Journal of Urology NHM|Netw. Heterog. Media|Networks and Heterogeneous Media NHR|Nurs. Hist. Rev.|Nursing History Review NHS|Nurs. Health Sci.|Nursing & Health Sciences NHSR|Natl. Health Stat. Report.|National Health Statistics Reports NI|Nat. Immunol.|Nature Immunology NI1|Neurochem. Int.|Neurochemistry International NI2|Neurol. India|Neurology India NI3|Nurs. Inq.|Nursing Inquiry NIB|Narrat. Inq. Bioeth.|Narrative Inquiry in Bioethics NIHCSSS|NIH Consens. State Sci. Statements|NIH Consensus and State-Of: The-Science Statements NIHGGC|NIH Guide Grants Contracts|NIH Guide for Grants and Contracts NIMPRB|Nucl. Instrum. Methods Phys. Res. B=Nucl. Instrum. Meth. Phys. Res. B|Nuclear Instruments & Methods in Physics Research Section B: Beam Interactions with Materials and Atoms NIR|NIR news|NIR news NJ|Neurodiagn. J.|The Neurodiagnostic Journal NJ1|Neuroradiol. J.|The Neuroradiology Journal NJ2|Nutr. J.|Nutrition Journal NJC|New J. Chem.|New Journal of Chemistry NJCP|Niger. J. Clin. Pract.|Nigerian Journal of Clinical Practice NJM|Neth. J. Med.|Netherlands Journal of Medicine=The Netherlands Journal of Medicine NJMS|Nagoya J. Med. Sci.|Nagoya Journal of Medical Science NJO|Nepal J. Ophthalmol.|Nepalese Journal of Ophthalmology: A Biannual Peer-Reviewed Academic Journal of the Nepal Ophthalmic Society NJP|New J. Phys.|New Journal of Physics NJP1|Nord. J. Psychiatry=Nord. J. Psychiatr.|Nordic Journal of Psychiatry NJPS|Niger. J. Physiol. Sci.|Nigerian Journal of Physiological Sciences NL|Nano Lett.|Nano Letters NL1|Neurosci. Lett.|Neuroscience Letters NLAA|Numer. Linear Algebr. Appl.|Numerical Linear Algebra with Applications NLM|Neurobiol. Learn. Mem.=Neurobiol. Learn. Memory|Neurobiology of Learning and Memory NM|Nat. Mater.|Nature Materials NM1|Nat. Med.=Nature Med.|Nature Medicine NM2|Nat. Methods|Nature Methods NM3|Nat. Microbiol.|Nature Microbiology NM4|Neurogastroenterol. Motil.=Neurogastroent. Motil.|Neurogastroenterology and Motility NM5|Neuromolecular Med.=Neuromol. Med.|Neuromolecular Medicine NM6|New Microbiol.|New Microbiologica=The New Microbiologica NM7|Numer. Math.|Numerische Mathematik NM8|Nurs. Manage.|Nursing Management NMB|Nucl. Med. Biol.|Nuclear Medicine and Biology NMC|Nucl. Med. Commun.|Nuclear Medicine Communications NMCD|Nutr. Metab. Cardiovasc. Dis.=Nutr. Metab. Cardiovas.|Nutrition, Metabolism, and Cardiovascular Diseases NMJ|Nagoya Math. J.|Nagoya Mathematical Journal NMJI|Natl. Med. J. India|National Medical Journal of India=The National Medical Journal of India NMRB|NMR Biomed.|NMR in Biomedicine NMRCEE|Nucl. Med. Rev. Cent. East. Eur.|Nuclear Medicine Review. Central & Eastern Europe NMTMA|Numer. Math. Theory Methods Appl.=Numer. Math. Theory Methods App.|Numerical Mathematics: Theory Methods and Applications NN|Nat. Nanotechnol.|Nature Nanotechnology NN1|Nat. Neurosci.|Nature Neuroscience NN2|Neonatal Netw.|Neonatal Network NN3|Neural Netw.|Neural Networks NN4|Nutr. Neurosci.|Nutritional Neuroscience NNDEA|Nodea Nonlinear Differ. Equ. Ap.|Nodea-Nonlinear Differential Equations and Applications NNIWS|Nestle Nutr. Inst. Workshop Ser.|Nestlé Nutrition Institute Workshop Series NNJ|Nexus Netw. J.|Nexus Network Journal NNNA|Nucleosides Nucleotides Nucleic Acids=Nucleos. Nucleot. Nucleic Acids|Nucleosides, Nucleotides & Nucleic Acids NNR|Neurorehabil. Neural Repair=Neurorehab. Neural Re.|Journal of Neurologic Rehabilitation=Neurorehabilitation and Neural Repair NNW|Neural Netw. World|Neural Network World NO|Neuro Oncology|Neuro-Oncology NO1|Nitric Oxide=Nitric Oxide Biol. Chem.|Nitric Oxide: Biology and Chemistry NO2|Nurs. Outlook|Nursing Outlook NOP|Nurs. Older People|Nursing Older People NP|Nat. Photonics|Nature Photonics NP1|Nat. Phys.|Nature Physics NP2|Nat. Plants|Nature Plants NP3|Nat. Preced.|Nature Precedings NP4|Nat. Protoc.|Nature Protocols NP5|Neural Plast.|Neural Plasticity NP6|New Phytol.|New Phytologist=The New Phytologist NP7|Nurs. Philos.|Nursing Philosophy=Nursing Philosophy: An International Journal for Healthcare Professionals NP8|Nurse Pract.|The Nurse Practitioner NPA|Nucl. Phys. A|Nuclear Physics. A NPB|Nucl. Phys. B|Nuclear Physics. B NPJGM|NPJ Genom. Med.|NPJ Genomic Medicine NPJPCRM|NPJ Prim. Care Respir. Med.=NPJ Prim. Care Resp. M.|NPJ Primary Care Respiratory Medicine NPJQI|NPJ Quantum Inform.|NPJ Quantum Information NPL|Neural Process. Lett.|Neural Processing Letters NPMJ|Niger. Postgrad. Med. J.|The Nigerian Postgraduate Medical Journal NPR|Nat. Prod. Rep.|Natural Product Reports=Natural Products Reports NPR1|Nat. Prod. Res.|Natural Product Research NQJHM|Nig. Q. J. Hosp. Med.|Nigerian Quarterly Journal of Hospital Medicine NR|Nano Res.|Nano Research NR1|Neurochem. Res.|Neurochemical Research NR2|Neurol. Res.|Neurological Research NR3|Neuropsychol. Rehabil.|Neuropsychological Rehabilitation NR4|Neuropsychol. Rev.|Neuropsychology Review NR5|Neuropsychopharmacol. Rep.|Neuropsychopharmacology Reports NR6|Neurosci. Res.|Neuroscience Research=Neurosciences Research NR7|Neurosurg. Rev.|Neurosurgical Review NR8|Neurotox. Res.|Neurotoxicity Research NR9|Nurs. Res.|Nursing Research NR10|Nurse Res.|Nurse Researcher NR11|Nutr. Res.|Nutrition Research NR12|Nutr. Rev.|Nutrition Reviews NRC|Nat. Rev. Cancer|Nature Reviews. Cancer NRC1|Nat. Rev. Cardiol.|Nature Reviews. Cardiology NRC2|Nat. Rev. Chem.|Nature Reviews Chemistry NRCO|Nat. Rev. Clin. Oncol.|Nature Reviews. Clinical Oncology NRDD|Nat. Rev. Drug Discov.|Nature Reviews. Drug Discovery NRDP|Nat. Rev. Dis. Primers|Nature Reviews. Disease Primers NRE|Nat. Rev. Endocrinol.|Nature Reviews. Endocrinology NRG|Nat. Rev. Genet.|Nature Reviews. Genetics NRGH|Nat. Rev. Gastroenterol. Hepatol.=Nat. Rev. Gastro. Hepat.|Nature Reviews. Gastroenterology & Hepatology NRHM|New Rev. Hypermedia Multimed.|New Review of Hypermedia and Multimedia NRI|Nat. Rev. Immunol.|Nature Reviews. Immunology NRIZ|Nihon Ronen Igakkai Zasshi|Nihon Ronen Igakkai Zasshi. Japanese Journal of Geriatrics NRL|Nanoscale Res. Lett.|Nanoscale Research Letters NRL1|Nav. Res. Log.|Naval Research Logistics NRM|Nat. Rev. Microbiol.|Nature Reviews. Microbiology NRMCB|Nat. Rev. Mol. Cell Biol.=Nat. Rev. Mol. Cell Bio.|Nature Reviews. Molecular Cell Biology NRN|Nat. Rev. Nephrol.|Nature Reviews. Nephrology NRN1|Nat. Rev. Neurol.|Nature Reviews. Neurology NRN2|Nat. Rev. Neurosci.|Nature Reviews. Neuroscience NRR|Nat. Rev. Rheumatol.|Nature Reviews. Rheumatology NRR1|Nutr. Res. Rev.|Nutrition Research Reviews NRS|Nucl. Recept. Signal.|Nuclear Receptor Signaling NRU|Nat. Rev. Urol.|Nature Reviews. Urology NS|Neurol. Sci.|Neurological Sciences NS1|New Solut.|New Solutions=New Solutions: A Journal of Environmental and Occupational Health Policy NS2|Nurs. Stand.|Nursing Standard NSAP|Naunyn Schmiedebergs Arch. Pharmacol.=Naunyn Schmiedeberg S. Arch. Pharmacol.|Naunyn-Schmiedeberg's Archives of Pharmacology NSB|Nat. Struct. Biol.|Nature Structural Biology=Natural Structural Biology NSG|No Shinkei Geka|No Shinkei Geka. Neurological Surgery NSMB|Nat. Struct. Mol. Biol.|Nature Structural & Molecular Biology NSQ|Nurs. Sci. Q.=Nurs. Sci. Quarterly|Nursing Science Quarterly NST|Nucl. Sci. Tech.|Nuclear Science and Techniques NSZ|Nippon Saikingaku Zasshi|Nihon Saikingaku Zasshi. Japanese Journal of Bacteriology NT|Nano Today|Nano Today NT1|Nephrol. Ther.|Néphrologie & Thérapeutique NT2|Neurotoxicol. Teratol.|Neurotoxicology and Teratology NTG|Ned. Tijdschr. Geneeskd|Nederlands Tijdschrift Voor Geneeskunde NTPGMMR|Natl. Toxicol. Program Genet. Modif. Model Rep.|National Toxicology Program Genetically Modified Model Report NTPM|NTP Monogr.|NTP Monograph NTPTRS|Natl. Toxicol. Program Tech. Rep. Ser.|National Toxicology Program Technical Report Series NTR|Nicotine Tob. Res.|Nicotine & Tobacco Research NU|Neurourol. Urodyn.=Neurourol. Urodynam.|Neurourology and Urodynamics NWH|Nurs. Womens Health|Nursing for Women's Health NYJM|New York J. Math.|New York Journal of Mathematics NYZ|Nippon Yakurigaku Zasshi|Nihon Yakurigaku Zasshi. Folia Pharmacologica Japonica NZMJ|NZ Med. J.|The New Zealand Medical Journal NZVJ|NZ Vet. J.=New Zeal. Vet. J.|New Zealand Veterinary Journal O|Obesity|Obesity O1|Odontology|Odontology O2|Oecologia|Oecologia O3|Omics|Omics-A Journal of Integrative Biology O4|Oncogene|Oncogene O5|Oncogenesis|Oncogenesis O6|Oncoimmunology|Oncoimmunology O7|Oncologist|The Oncologist O8|Oncology=Oncology Basel|Oncology O9|Ophthalmologe|Der Ophthalmologe: Zeitschrift Der Deutschen Ophthalmologischen Gesellschaft O10|Ophthalmologica|Ophthalmologica O11|Ophthalmology|Ophthalmology O12|Optica|Optica O13|Optik|Optik O14|Optimization|Optimization O15|Orbit|Orbit O16|Order|Order-A Journal on the Theory of Ordered Sets and its Applications O17|Organogenesis|Organogenesis O18|Organometallics|Organometallics O19|Orthopade|Der Orthopäde O20|Orthopedics|Orthopedics OA|Opt. Appl.|Optica Applicata OB|Open Biol.|Open Biology OBC|Org. Biomol. Chem.|Organic & Biomolecular Chemistry OC|Open Chem.|Open Chemistry OC1|Opt. Commun.|Optics Communication=Optics Communications OC2|Osteoarthr. Cartil.=Osteoarthritis Cartilage|Osteoarthritis and Cartilage OCF|Org. Chem. Front.|Organic Chemistry Frontiers=Organic Chemistry Frontiers: An International Journal of Organic Chemistry OCNA|Orthop. Clin. North Am.|The Orthopedic Clinics of North America OCNA1|Otolaryngol. Clin. North Am.=Otolaryngol. Clin. N. Amer.|Otolaryngologic Clinics of North America OCR|Orthod. Craniofac. Res.|Orthodontics & Craniofacial Research OD|Oper. Dent.|Operative Dentistry OD1|Oral Dis.|Oral Diseases OE|Ophthalmic Epidemiol.=Ophthal. Epidemiol.|Ophthalmic Epidemiology OE1|Org. Electron.|Organic Electronics OEM|Occup. Environ. Med.=Occup. Environ. Medicine|Occupational and Environmental Medicine OEXPRESS|Opt. EXPRESS|Optics EXPRESS OF|Obes. Facts|Obesity Facts OF1|Orthod. Fr.|L' Orthodontie Française OFAJ|Okajimas Folia Anat. Jpn.|Okajimas Folia Anatomica Japonica OG|Obstet. Gynecol.|Obstetrics and Gynecology OG1|Ophthalmic Genet.|Ophthalmic Genetics OG2|Org. Geochem.|Organic Geochemistry OGCNA|Obstet. Gynecol. Clin. North Am.=Obstet. Gynecol. Clin. N. Amer.|Obstetrics and Gynecology Clinics of North America OGS|Obstet. Gynecol. Surv.|Obstetrical & Gynecological Survey OH|Orv. Hetil.|Orvosi Hetilap OHNS|Otolaryngol. Head Neck Surg.=Otolaryng. Head Neck|Otolaryngology: Head and Neck Surgery=Otolaryngology and Head and Neck Surgery OHPD|Oral Health Prev. Dent.=Oral Hlth. Prev. Dent.|Oral Health & Preventive Dentistry OHTAS|Ont. Health Technol. Assess. Ser.|Ontario Health Technology Assessment Series OII|Ocul. Immunol. Inflamm.|Ocular Immunology and Inflammation OIR|Online Inform. Rev.|Online Information Review OJM|Osaka J. Math.|Osaka Journal of Mathematics OJRD|Orphanet J. Rare Dis.|Orphanet Journal of Rare Diseases OJVR|Onderstepoort J. Vet. Res.=Onderstepoort J. Vet.|Onderstepoort Journal of Veterinary Research=The Onderstepoort Journal of Veterinary Research OL|Opt. Lett.|Optics Letters OL1|Optim. Lett.|Optimization Letters OL2|Org. Lett.|Organic Letters OLS|Open Life Sci.|Open Life Sciences OM|Open Math.|Open Mathematics OM1|Oper. Matrices|Operators and Matrices OMCL|Oxid. Med. Cell. Longev.=Oxidative Med. Cell. Longev.|Oxidative Medicine and Cellular Longevity OMEXPRESS|Opt. Mater. EXPRESS|Optical Materials EXPRESS OMS|Optim. Methods Softw.=Optim. Method. Softw.|Optimization Methods & Software=Optimization Methods and Software OMS1|Oral Maxillofac. Surg.|Oral and Maxillofacial Surgery OMSCNA|Oral Maxillofac. Surg. Clin. North Am.=Oral Maxillofac. Surg. Clin. N. A.|Oral and Maxillofacial Surgery Clinics of North America ON|Orthop. Nurs.|Orthopedic Nursing=Orthopaedic Nursing ON1|Otol. Neurotol.|Otology & Neurotology ONF|Oncol. Nurs. Forum|Oncology Nursing Forum OO|Optim. Online|Optimization Online OO1|Oral Oncol.|Oral Oncology OOT|Oper. Orthop. Traumatol.=Oper. Orthopade Traumatol.|Operative Orthopädie und Traumatologie OP|Open Phys.|Open Physics OPPI|Org. Prep. Proced. Int.=Org. Prep. Procedure. Int.|Organic Preparations and Procedures International OPRD|Org. Process Res. Dev.|Organic Process Research & Development=Organic Process Research and Development OPRS|Ophthal. Plast. Reconstr. Surg.=Ophthalmic Plast. Reconstr. Surg.|Ophthalmic Plastic and Reconstructive Surgery OR|Obes. Rev.|Obesity Reviews OR1|Oncol. Rep.|Oncology Reports OR2|Oncol. Res.|Oncology Research OR3|Oper. Res.|Operations Research OR4|Ophthalmic Res.|Ophthalmic Research OR5|Opt. Rev.|Optical Review ORCP|Obes. Res. Clin. Pract.|Obesity Research & Clinical Practice ORL|Oper. Res. Lett.|Operations Research Letters ORLJORS|ORL J. Otorhinolaryngol. Relat. Spec.|ORL: Journal for Oto-Rhino-Laryngology and its Related Specialties ORT|Oncol. Res. Treat.|Oncology Research and Treatment OS|Obes. Surg.|Obesity Surgery OS1|Ocul. Surf.|Ocular Surface=The Ocular Surface OS2|Opt. Spectrosc.|Optics and Spectroscopy OS3|Orthop. Surg.|Orthopaedic Surgery OSID|Open Syst. Inf. Dyn.|Open Systems & Information Dynamics OSLIR|Ophthalmic Surg. Lasers Imaging Retina=Ophthalmic Surg. Lasers Imag. R.|Ophthalmic Surgery, Lasers & Imaging Retina OSN|Opt. Switch. Netw.|Optical Switching and Networking OSOMOPOR|Oral Surg. Oral Med. Oral Pathol. Oral Radiol.|Oral Surgery, Oral Medicine, Oral Pathology and Oral Radiology OTHC|Occup. Ther. Health Care|Occupational Therapy in Health Care OTI|Occup. Ther. Int.|Occupational Therapy International OTR|Ortop. Traumatol. Rehabil.|Ortopedia, Traumatologia, Rehabilitacja OTSR|Orthop. Traumatol. Surg. Res.=Orthop. Traumatol. Sur.|Orthopaedics & Traumatology, Surgery & Research OVS|Optom. Vis. Sci.=Optometry Vision Sci.|Optometry and Vision Science P|Pain|Pain P1|Pancreas|Pancreas P2|Pancreatology|Pancreatology P3|Parasite|Parasite: Journal de la Société Française de Parasitologie P4|Parasitology|Parasitology P5|Pathobiology|Pathobiology: Journal of Immunopathology, Molecular and Cellular Biology P6|Pathologe|Der Pathologe P7|Pathologica|Pathologica P8|Pathology|Pathology P9|Patient|The Patient=Patient-Patient Centered Outcomes Research P10|Pediatrics|Pediatrics P11|Peptides|Peptides P12|Perception|Perception P13|Perfusion|Perfusion P14|Periodontol. 2000|Periodontology 2000 P15|Pharmacoeconomics|Pharmacoeconomics P16|Pharmacogenomics|Pharmacogenomics P17|Pharmacology|Pharmacology P18|Pharmacopsychiatry|Pharmacopsychiatry P19|Pharmacotherapy|Pharmacotherapy P20|Pharmazie|Die Pharmazie P21|Phlebology|Phlebology P22|Phonetica|Phonetica P23|Physiology|Physiology P24|Physiotherapy|Physiotherapy P25|Phytochemistry|Phytochemistry P26|Phytomedicine|Phytomedicine: International Journal of Phytotherapy and Phytopharmacology P27|Phytopathology|Phytopathology P28|Pituitary|Pituitary P29|Placenta|Placenta P30|Planta|Planta P31|Plasmid|Plasmid P32|Plasmonics|Plasmonics P33|Platelets|Platelets P34|Pneumologie|Pneumologie P35|Polimeros|Polimeros-Ciencia e Tecnologia P36|Polyhedron|Polyhedron P37|Polymer|Polymer P38|Positivity|Positivity P39|Primates|Primates: Journal of Primatology P40|Prion|Prion P41|Processes|Processes P42|Prostate|The Prostate P43|Proteins|Proteins: Structure, Function, and Bioinformatics P44|Proteomics|Proteomics P45|Protist|Protist P46|Protoplasma|Protoplasma P47|Psicothema|Psicothema P48|Psychiatry|Psychiatry-Interpersonal and Biological Processes P49|Psychogeriatrics|Psychogeriatrics P50|Psychometrika|Psychometrika P51|Psychoneuroendocrinology=Psychoneuroendocrino.|Psychoneuroendocrinology P52|Psychooncology=Psycho Oncology|Psycho-Oncology P53|Psychopathology|Psychopathology P54|Psychophysiology|Psychophysiology P55|Psychosomatics|Psychosomatics P56|Pteridines|Pteridines P57|Pulmonology|Pulmonology PA|Paediatr. Anaesth.|Paediatric Anaesthesia PA1|Pediatr. Ann.=Pediat. Ann.|Pediatric Annals PA2|Pflugers Arch.=Pflugers Arch. Eur. J. Physiol.|Pflügers Archiv: European Journal of Physiology PA3|Physica A|Physica A-Statistical Mechanics and its Applications PA4|Phytochem. Anal.=Phytochem. Analysis|Phytochemical Analysis PA5|Potential Analysis|Potential Analysis PA6|Psychol. Aging|Psychology and Aging PA7|Psychol. Assess.=Psychol. Assessment|Psychological Assessment PAA|Pattern Anal. Appl.|Pattern Analysis & Applications=Pattern Analysis and Applications PAB|Psychol. Addict. Behav.|Psychology of Addictive Behaviors=Psychology of Addictive Behaviors: Journal of the Society of Psychologists in Addictive Behaviors PAC|Polycycl. Aromat. Compd.=Polycycl. Aromat. Compound.|Polycyclic Aromatic Compounds PAC1|Pure Appl. Chem.|Pure and Applied Chemistry=Pure and Applied Chemistry. Chimie Pure et Appliquee PAG|Pure Appl. Geophys.|Pure and Applied Geophysics PAH|Pharm. Acta Helv.|Pharmaceutica Acta Helvetiae PAI|Pediatr. Allergy Immunol.=Pediat. Allerg. Imm. UK|Pediatric Allergy and Immunology PAMJ|Pan Afr. Med. J.|The Pan African Medical Journal PAMQ|Pure Appl. Math. Q.|Pure and Applied Mathematics Quarterly PAMS|Proc. Amer. Math. Soc.|Proceedings of the American Mathematical Society PANET|Phys. Atom. Nucl. Engl. Tr.|Physics of Atomic Nuclei PAP|Probiotics Antimicrob. Proteins=Probiotics Antimicrob. Protein.|Probiotics and Antimicrobial Proteins PAR|Public Adm. Rev.=Public Admin. Rev.|Public Administration Review PAS|Prog. Aerosp. Sci.|Progress in Aerospace Sciences PASP|Publ. Astron. Soc. Pac.|Publications of the Astronomical Society of the Pacific PAT|Polym. Adv. Technol.=Polym. Advan. Technol.|Polymers for Advanced Technologies PB|Period. Biol.|Periodicum Biologorum PB1|Pharm. Biol.|Pharmaceutical Biology=Le Pharmacien Biologiste PB2|Phys. Biol.|Physical Biology PB3|Physiol. Behav.|Physiology & Behavior PB4|Polym. Bull.|Polymer Bulletin PB5|Polymers Basel|Polymers PB6|Process Biochem.|Process Biochemistry PB7|Psychol. Bull.|Psychological Bulletin PB8|Psychopharmacol. Bull.|Psychopharmacology Bulletin PBB|Pharmacol. Biochem. Behav.=Pharmacol. Biochem. Be.|Pharmacology, Biochemistry, and Behavior PBB1|Prep. Biochem. Biotechnol.=Prep. Biochem. Biotech.|Preparative Biochemistry & Biotechnology=Preparative Biochemistry and Biotechnology PBB2|Prog. Biochem. Biophys.|Progress in Biochemistry and Biophysics PBC|Pediatr. Blood Cancer|Pediatric Blood & Cancer PBCM|Physica B Condens. Matter=Physica B|Physica. B, Condensed Matter PBJ|Plant Biotechnol. J.|Plant Biotechnology Journal PBK|Postepy Biol. Komorki|Postepy Biologii Komorki PBM|Perspect. Biol. Med.|Perspectives in Biology and Medicine PBMB|Prog. Biophys. Mol. Biol.=Prog. Biophys. Mol. Bio.|Progress in Biophysics & Molecular Biology=Progress in Biophysics and Molecular Biology PBP|Pestic. Biochem. Physiol.=Pestic. Biochem. Phys.|Pesticide Biochemistry and Physiology PBR|Prog. Brain Res.|Progress in Brain Research PBR1|Psychon. Bull. Rev.=Psychonomic Bull. Rev.|Psychonomic Bulletin & Review PBS|Proc. Biol. Sci.|Proceedings. Biological Sciences PBSN|Pharmeur. Bio Sci. Notes|Pharmeuropa Bio & Scientific Notes PBSW|Proc. Biol. Soc. Wash.|Proceedings of the Biological Society of Washington PBT|Postharvest Biol. Technol.=Postharvest Biol. Tec.|Postharvest Biology and Technology PBUCLACHPR|Policy Brief UCLA Cent Health Policy Res|Policy Brief PBZ|Physiol. Biochem. Zool.|Physiological and Biochemical Zoology PC|Parallel Comput.|Parallel Computing PC1|Pediatr. Cardiol.=Pediat. Cardiol.|Pediatric Cardiology PC2|Physica C|Physica C-Superconductivity and its Applications PC3|Plant Cell|The Plant Cell PC4|Polym. Chem.=Polym. Chem. UK|Polymer Chemistry PC5|Prim. Care|Primary Care PC6|Prog. Chem.|Progress in Chemistry PC7|Protein Cell|Protein & Cell PC8|Przem. Chem.|Przemysl Chemiczny PC9|Pulm. Circ.|Pulmonary Circulation PCA|Phys. Commun. Amst.|Physical Communication PCA1|Proteomics Clin. Appl.=Proteom. Clin. Appl.|Proteomics. Clinical Applications PCCCNSD|Prim. Care Companion CNS Disord.|The Primary Care Companion for CNS Disorders PCCM|Pediatr. Crit. Care Med.=Pediatr. Crit. Care Me.|Pediatric Critical Care Medicine PCCP|Phys. Chem. Chem. Phys.|Physical Chemistry Chemical Physics PCD|Prev. Chronic Dis.|Preventing Chronic Disease PCD1|Prim. Care Diabetes|Primary Care Diabetes PCD2|Prog. Cardiovasc. Dis.|Progress in Cardiovascular Diseases PCE|Pacing Clin. Electrophysiol.|Pacing and Clinical Electrophysiology PCE1|Plant Cell Environ.|Plant, Cell & Environment=Plant Cell and Environment PCET|Petrol. Chem. Engl. Tr.|Petroleum Chemistry PCHP|Prog. Community Health Partnersh.=Prog. Community Health Partner.|Progress in Community Health Partnerships: Research, Education, and Action PCL|Phys. Chem. Liquids=Phys. Chem. Liq.|Physics and Chemistry of Liquids PCM|Prof. Case Manag.|Professional Case Management PCMR|Pigment Cell Melanoma Res.=Pigm. Cell Melanoma R.|Pigment Cell & Melanoma Research PCN|Psychiatry Clin. Neurosci.=Psychiat. Clin. Neurosciences|Psychiatry and Clinical Neurosciences PCNA|Pediatr. Clin. North Am.=Pediat. Clin. N. Amer.|Pediatric Clinics of North America PCNA1|Psychiatr. Clin. North Am.|The Psychiatric Clinics of North America PCP|Plant Cell Physiol.|Plant & Cell Physiology=Plant and Cell Physiology PCPD|Prostate Cancer Prostatic Dis.=Prostate Cancer P. D.|Prostate Cancer and Prostatic Diseases PCPP|Plasma Chem. Plasma Process.|Plasma Chemistry and Plasma Processing PCR|Plant Cell Rep.|Plant Cell Reports PCSET|Program. Comput. Soft. Engl. Tr.|Programming and Computer Software PD|Paediatr. Drugs|Paediatric Drugs PD1|Pathog. Dis.|Pathogens and Disease PD2|Pediatr. Dent.|Pediatric Dentistry PD3|Pediatr. Dermatol.=Pediat. Dermatol.|Pediatric Dermatology PD4|Pediatr. Diabetes|Pediatric Diabetes PD5|Personal. Disord.|Personality Disorders=Personality Disorders: Theory Research and Treatment PD6|Physica D|Physica D. Nonlinear Phenomena PD7|Plant Dis.|Plant Disease PD8|Powder Diffr.|Powder Diffraction PD9|Prenat. Diagn.=Prenatal Diag.|Prenatal Diagnosis PD10|Psychiatr. Danub.=Psychiat. Danub.|Psychiatria Danubina PDAJPST|PDA J. Pharm. Sci. Technol.|PDA Journal of Pharmaceutical Science and Technology PDDD|Perspect. Drug Discovery Des.|Perspectives in Drug Discovery and Design PDI|Perit. Dial. Int.|Peritoneal Dialysis International: Journal of the International Society for Peritoneal Dialysis PDM|Prehosp. Disaster Med.=Prehospital Disaster Med.|Prehospital and Disaster Medicine PDP|Pediatr. Dev. Pathol.=Pediatr. Devel. Pathol.|Pediatric and Developmental Pathology PDS|Pharmacoepidemiol. Drug Saf.=Pharmacoepidem. Dr. S.|Pharmacoepidemiology and Drug Safety PDS1|Polym. Degrad. Stab.=Polym. Degrad. Stabil.|Polymer Degradation and Stability PDSERM|Profiles Drug Subst. Excip. Relat. Methodol.|Profiles of Drug Substances, Excipients, and Related Methodology PDT|Pharm. Dev. Technol.|Pharmaceutical Development and Technology PE|Perform. Evaluation|Performance Evaluation PE1|Protein Eng.|Protein Engineering PE2|Przegl. Epidemiol.|Przeglad Epidemiologiczny=Przegla̧d Epidemiologiczny PEC|Patient Educ. Couns.|Patient Education and Counseling PEC1|Pediatr. Emerg. Care|Pediatric Emergency Care PEC2|Prehosp. Emerg. Care|Prehospital Emergency Care PEDM|Pediatr. Endocrinol. Diabetes Metab.|Pediatric Endocrinology, Diabetes, and Metabolism PEDS|Protein Eng. Des. Sel.|Protein Engineering, Design & Selection PEHM|Philos. Ethics Humanit. Med.=Philos. Ethics Hum. Me.|Philosophy, Ethics, and Humanities in Medicine PELDSN|Physica E Low Dimens. Syst. Nanostruct.=Physica E|Physica. E, Low-Dimensional Systems & Nanostructures PEMP|Pediatr. Emerg. Med. Pract.|Pediatric Emergency Medicine Practice PEMS|Proc. Edinburgh Math. Soc.|Proceedings of the Edinburgh Mathematical Society PEP|Propellant. Explos. Pyrotech.|Propellants Explosives Pyrotechnics PEP1|Protein Expr. Purif.=Protein EXPRESS Purif.|Protein Expression and Purification PES|Pediatr. Exerc. Sci.|Pediatric Exercise Science PES1|Polym. Eng. Sci.|Polymer Engineering and Science PETC|PET Clin.|PET Clinics PF|Phys. Fluids|Physics of Fluids PFHN|Plant Foods Hum. Nutr.=Plant Food. Hum. Nutr.|Plant Foods for Human Nutrition PFT|Part. Fibre Toxicol.|Particle and Fibre Toxicology PG|Pharmacogenet. Genomics=Pharmacogenet. Genom.|Pharmacogenetics and Genomics PG1|Physiol. Genomics|Physiological Genomics PG2|Plant Genome=Plant Genome US|The Plant Genome PG3|Psychiatr. Genet.=Psychiat. Genet.|Psychiatric Genetics PGH|Pathog. Glob. Health|Pathogens and Global Health PH|Pregnancy Hypertens.|Pregnancy Hypertension=Pregnancy Hypertension-An International Journal of Womens Cardiovascular Health PH1|Psychol. Health|Psychology & Health PH2|Public Health|Public Health PHCRD|Prim. Health Care Res. Dev.=Prim. Health Care Res.|Primary Health Care Research & Development=Primary Health Care Research and Development PHG|Public Health Genomics=Public Health Genom.|Public Health Genomics PHIM|Perspect. Health Inf. Manag.|Perspectives in Health Information Management PHM|Popul. Health Manag.|Population Health Management PHM1|Popul. Health Metr.|Population Health Metrics PHM2|Psychol. Health Med.|Psychology, Health & Medicine PHN|Public Health Nurs.|Public Health Nursing PHN1|Public Health Nutr.|Public Health Nutrition PHO|Pediatr. Hematol. Oncol.=Pediatr. Hemat. Oncol.|Pediatric Hematology and Oncology PHR|Public Health Rep.|Public Health Reports PHRP|Public Health Res. Pract.|Public Health Research & Practice PI|Parasite Immunol.|Parasite Immunology PI1|Parasitol. Int.|Parasitology International PI2|Pathol. Int.|Pathology International PI3|Pediatr. Int.|Pediatrics International PI4|Perspect. Infirm.|Perspective Infirmière: Revue Officielle de L'ordre des Infirmières et Infirmiers du Québec PI5|Physiol. Int.|Physiology International PI6|Polym. Int.|Polymer International PI7|Prof. Inferm.|Professioni Infermieristiche PIASMS|Proc. Indian Acad. Sci. Math. Sci.|Proceedings of the Indian Academy of Sciences-Mathematical Sciences PIC|Prog. Inorgan. Chem.|Progress in Inorganic Chemistry PICH|Paediatr. Int. Child Health=Paediatr. Int. Child H.|Paediatrics and International Child Health PID|Pers. Individ. Dif.=Pers. Indiv. Differ.|Personality and Individual Differences PIDJ|Pediatr. Infect. Dis. J.=Pediat. Inf. Dis. J.|Pediatric Infectious Disease Journal=The Pediatric Infectious Disease Journal PIEEE|Proc. IEEE|Proceedings of the IEEE PIT|Probl. Inform. Transm.|Problems of Information Transmission PJ|Perm. J.|The Permanente Journal PJ1|Pharmacogenomics J.|Pharmacogenomics Journal=The Pharmacogenomics Journal PJ2|Plant J.|Plant Journal=The Plant Journal: for Cell and Molecular Biology PJ3|Polym. J.|Polymer Journal PJ4|Protein J.|Protein Journal=The Protein Journal PJ5|Psych J.|Psych Journal PJAAM|P. Jpn. Acad. A Math.|Proceedings of the Japan Academy Series A-Mathematical Sciences PJASBPBS|Proc. Jpn. Acad. Ser. B Phys. Biol. Sci.=P. Jpn. Acad. B Phys.|Proceedings of the Japan Academy. Series B, Physical and Biological Sciences PJBS|Pak. J. Biol. Sci.|Pakistan Journal of Biological Sciences PJCT|Pol. J. Chem. Technol.|Polish Journal of Chemical Technology PJM|Pac. J. Math.|Pacific Journal of Mathematics PJM1|Pol. J. Microbiol.|Polish Journal of Microbiology PJP|Pramana J. Phys.|Pramana: Journal of Physics PJPS|Pak. J. Pharm. Sci.|Pakistan Journal of Pharmaceutical Sciences PJVS|Pol. J. Vet. Sci.|Polish Journal of Veterinary Sciences PK|Polym. Korea|Polymer-Korea PKK|Prax. Kinderpsychol. Kinderpsychiatr.=Prax. Kinderpsychol. Kinderpsyc.|Praxis Der Kinderpsychologie und Kinderpsychiatrie PLA|Phys. Lett. A|Physics Letters. A PLB|Phys. Lett. B|Physics Letters B PLEFA|Prostaglandins Leukot. Essent. Fatty Acids=Prostagland. Leuk. Essent. Fatty|Prostaglandins, Leukotrienes, and Essential Fatty Acids PLMS|Proc. London Math. Soc.|Proceedings of the London Mathematical Society PLR|Phys. Life Rev.|Physics of Life Reviews PLR1|Prog. Lipid Res.|Progress in Lipid Research PLS|Photomed. Laser Surg.|Photomedicine and Laser Surgery PLS1|Politics Life Sci.|Politics and the Life Sciences: The Journal of the Association for Politics and the Life Sciences PLSB|PLoS Biol.|PLoS Biology PLSCB|PLoS Comput. Biol.|PLoS Computational Biology PLSG|PLoS Genet.|PLoS Genetics PLSM|PLoS Med.|PLoS Medicine PLSNTD|PLoS Negl. Trop. Dis.=PLoS Neglected Trop. Dis.|PLoS Neglected Tropical Diseases PLSONE|PLoS ONE|PLoS ONE PLSP|PLoS Pathog.|PLoS Pathogens PM|Pain Manag.|Pain Management PM1|Pain Med.|Pain Medicine PM2|Palliat. Med.=Palliative Med.|Palliative Medicine PM3|Panminerva Med.|Panminerva Medica PM4|Per. Med.=Pers. Med.|Personalized Medicine PM5|Physiol. Meas.|Physiological Measurement PM6|Planta Med.|Planta Medica PM7|Port. Math.|Portugaliae Mathematica PM8|Postgrad. Med.|Postgraduate Medicine PM9|Presse Med.=Presse Medicale|La Presse Médicale PM10|Prev. Med.|Preventive Medicine PM11|Psychol. Med.|Psychological Medicine PM12|Psychol. Methods|Psychological Methods PM13|Psychosom. Med.|Psychosomatic Medicine PM14|Publ. Mat.|Publicacions Matematiques PM15|Pulm. Med.|Pulmonary Medicine PMB|Phys. Med. Biol.|Physics in Medicine and Biology PMB1|Plant Mol. Biol.|Plant Molecular Biology PMBTS|Prog. Mol. Biol. Transl. Sci.=Prog. Molec. Biol. Transl. Sci.|Progress in Molecular Biology and Translational Science PMC|Pediatr. Med. Chir.|La Pediatria Medica e Chirurgica: Medical and Surgical Pediatrics PMC1|Pervasive Mob. Comput.|Pervasive and Mobile Computing PMC2|Prog. Med. Chem.|Progress in Medicinal Chemistry PMD|Publ. Math. Debrecen|Publicationes Mathematicae-Debrecen PMH|Period. Math. Hung.|Periodica Mathematica Hungarica PMH1|Personal. Ment. Health|Personality and Mental Health PMJ|Postgrad. Med. J.|Postgraduate Medical Journal PML|Philos. Mag. Lett.=Phil. Mag. Lett.|Philosophical Magazine Letters PML1|Pol. Merkur. Lekarski|Polski Merkuriusz Lekarski: Organ Polskiego Towarzystwa Lekarskiego PMN|Pain Manag. Nurs.|Pain Management Nursing PMP|Publ. Math. Paris|Publications Mathematiques de L Ihes PMRCNA|Phys. Med. Rehabil. Clin. N. Am.=Phys. Med. Reh. Clin. N.|Physical Medicine and Rehabilitation Clinics of North America PMS|Percept. Mot. Skills=Percept. Motor Skill.|Perceptual and Motor Skills PMS1|Pest Manag. Sci.|Pest Management Science PMSB|Prog. Mol. Subcell. Biol.|Progress in Molecular and Subcellular Biology PMSP|Probab. Math. Stat. Pol.|Probability and Mathematical Statistics-Poland PN|Pediatr. Neonatol.|Pediatrics and Neonatology PN1|Pediatr. Nephrol.=Pediat. Nephrol.|Pediatric Nephrology=Pediatric Nephrology: Journal of the International Pediatric Nephrology Association PN2|Pediatr. Neurol.=Pediat. Neurol.|Pediatric Neurology PN3|Pediatr. Neurosurg.=Pediat. Neurosurg.|Pediatric Neurosurgery PN4|Pharm. Nanotechnol.|Pharmaceutical Nanotechnology PN5|Photonics Nanostruct.=Photonic. Nanostruct.|Photonics and Nanostructures: Fundamentals and Applications PN6|Pract. Neurol.|Practical Neurology PN7|Prog. Neurobiol.|Progress in Neurobiology PNASIA|Proc. Nat. Acad. Sci. India A|Proceedings of the National Academy of Sciences India Section A: Physical Sciences PNASUSA|Proc. Natl. Acad. Sci. USA=Proc. Nat. Acad. Sci. USA|Proceedings of the National Academy of Sciences of the United States of America PNBP|Prog. Neuropsychopharmacol Biol. Psychiatry=Prog. Neuro Psych. Biol. Psych.|Progress in Neuro-Psychopharmacology & Biological Psychiatry PNC|Photonic Netw. Commun.|Photonic Network Communications PNMRS|Prog. Nucl. Magn. Reson. Spectrosc.=Prog. Nucl. Magn. Reson. Spectros.|Progress in Nuclear Magnetic Resonance Spectroscopy PNS|Proc. Nutr. Soc.|The Proceedings of the Nutrition Society PNS1|Prog. Neurol. Surg.|Progress in Neurological Surgery PO|Pediatr. Obes.|Pediatric Obesity PO1|Prog. Optics|Progress in Optics PO2|Prog. Orthod.|Progress in Orthodontics POI|Prosthet. Orthot. Int.=Prosthet. Orthotics Int.|Prosthetics and Orthotics International POLM|Prostaglandins Other Lipid Mediat.=Prostag. Other Lipid Mediat.|Prostaglandins & Other Lipid Mediators POR|Pathol. Oncol. Res.|Pathology & Oncology Research POTP|Phys. Occup. Ther. Pediatr.=Phys. Occup. Ther. Pedi.|Physical & Occupational Therapy in Pediatrics PP|Pain Physician|Pain Physician PP1|Pain Pract.|Pain Practice PP2|Pediatr. Pulmonol.=Pediatr. Pulm.|Pediatric Pulmonology PP3|Pers. Psychol.|Personnel Psychology PP4|Photochem. Photobiol.|Photochemistry and Photobiology PP5|Phys. Perspect.|Physics in Perspective PP6|Phys. Plasmas|Physics of Plasmas PP7|Physiol. Plant.=Physiol. Plantarum|Physiologia Plantarum PP8|Plant Physiol.|Plant Physiology PP9|Psychiatr. Pol.|Psychiatria Polska PP10|Psychiatr. Prax.=Psychiat. Prax.|Psychiatrische Praxis PP11|Psychodyn. Psychiatry|Psychodynamic Psychiatry PP12|Psychol. Psychother.|Psychology and Psychotherapy PP13|Psychother. Psychosom.|Psychotherapy and Psychosomatics PPA|Pharm. Pat. Anal.|Pharmaceutical Patent Analyst PPARR|PPAR Res.|PPAR Research PPB|Plant Physiol. Biochem.=Plant Physiol. Bioch.|Plant Physiology and Biochemistry PPC|Perspect. Psychiatr. Care=Perspect. Psychiatr. C.|Perspectives in Psychiatric Care PPC1|Pol. Przegl. Chir.|Polski Przeglad Chirurgiczny PPCE|Period. Polytech. Chem. Eng.|Periodica Polytechnica-Chemical Engineering PPE|Paediatr. Perinat. Epidemiol.=Paediatr. Perinat. Ep.|Paediatric and Perinatal Epidemiology PPH|Perspect. Public Health=Perspect. Public Heal.|Perspectives in Public Health PPL|Parallel Process. Lett.|Parallel Processing Letters PPL1|Protein Pept. Lett.=Protein Peptide Lett.|Protein and Peptide Letters PPMP|Psychother. Psychosom. Med. Psychol.=Psychother. Psychosom. Med. Psyc.|Psychotherapie, Psychosomatik, Medizinische Psychologie PPN|Phys. Part. Nuclei|Physics of Particles and Nuclei PPNA|Peer Peer Netw. Appl.|Peer-To-Peer Networking and Applications PPNP|Policy Polit. Nurs. Pract.|Policy, Politics & Nursing Practice PPNP1|Prog. Part. Nucl. Phys.=Prog. Part. Nucl. Physics|Progress in Particle and Nuclear Physics PPP|Photodermatol. Photoimmunol. Photomed.=Photodermatol. Photoimmunol. Ph.|Photodermatology, Photoimmunology & Photomedicine PPP1|Plasma Process. Polym.|Plasma Processes and Polymers PPR|Plasma Physics Reports|Plasma Physics Reports PPS|Pediatr. Pulmonol. Suppl.|Pediatric Pulmonology. Supplement PPS1|Perspect. Psychol. Sci.|Perspectives on Psychological Science=Perspectives on Psychological Science: A Journal of the Association for Psychological Science PPS2|Photochem. Photobiol. Sci.=Photoch. Photobio. Sci.|Photochemical & Photobiological Sciences PPS3|Prog. Polym. Sci.|Progress in Polymer Science PPT|Pediatr. Phys. Ther.|Pediatric Physical Therapy PPT1|Photodiagnosis Photodyn. Ther.=Photodiagn. Photodyn.|Photodiagnosis and Photodynamic Therapy PPT2|Pulm. Pharmacol. Ther.|Pulmonary Pharmacology & Therapeutics PPTE|Polym. Plast. Technol. Eng.=Polym. Plast. Technol.|Polymer - Plastics Technology and Engineering PQ|Psychiatr. Q.|The Psychiatric Quarterly PQ1|Psychoanal. Q.|The Psychoanalytic Quarterly PR|Papillomavirus Res.|Papillomavirus Research PR1|Parasitol. Res.|Parasitology Research PR2|Pattern Recognit.=Pattern Recogn.|Pattern Recognition PR3|Pediatr. Radiol.=Pediat. Radiol.|Pediatric Radiology PR4|Pediatr. Res.=Pediat. Res.|Pediatric Research PR5|Pediatr. Rev.|Pediatrics in Review PR6|Pharm. Res.=Pharm. Res. Dordr|Pharmaceutical Research PR7|Pharmacol. Rep.|Pharmacological Reports PR8|Pharmacol. Res.|Pharmacological Research PR9|Pharmacol. Rev.|Pharmacological Reviews PR10|Photonics Res.|Photonics Research PR11|Photosyn. Res.=Photosynth. Res.|Photosynthesis Research PR12|Phys. Rep.=Phys. Rep. Rev. Sect. Phys. Lett.|Physics Reports=Physics Reports-Review Section of Physics Letters PR13|Phys. Rev.|Physical Review=The Physical Review PR14|Physiol. Rep.|Physiological Reports PR15|Physiol. Res.|Physiological Research PR16|Physiol. Rev.|Physiological Reviews PR17|Phytother. Res.|Phytotherapy Research PR18|Plant Reprod.|Plant Reproduction PR19|Polym. Rev.|Polymer Reviews PR20|Psychiatry Res.=Psychiat. Res.|Psychiatry Research PR21|Psychoanal. Rev.|Psychoanalytic Review PR22|Psychol. Rep.|Psychological Reports PR23|Psychol. Res.|Psychological Research PR24|Psychol. Rev.|Psychological Review PR25|Psychother. Res.|Psychotherapy Research=Psychotherapy Research: Journal of the Society for Psychotherapy Research PRA|Phys. Rev. A=Phys. Rev. A At. Mol. Opt. Phys.|Physical Review A=Physical Review. A, Atomic, Molecular, and Optical Physics PRA1|Phys. Rev. Appl.|Physical Review Applied PRAB|Phys. Rev. Accel. Beams|Physical Review Accelerators and Beams PRASAMP|Proc. Rom. Acad. Ser. A Math. Phys.|Proceedings of the Romanian Academy Series A-Mathematics Physics Technical Sciences Information Science PRB|Phys. Rev. B|Physical Review. B=Physical Review. B, Condensed Matter and Materials Physics PRC|Phys. Rev. C|Physical Review C PRD|Parkinsonism Relat. Disord.=Parkinsonism Relat. D.|Parkinsonism & Related Disorders PRD1|Phys. Rev. D=Phys. Rev. D Part. Fields|Physical Review D=Physical Review. D, Particles and Fields PRE|Phys. Rev. E|Physical Review. E PRER|Prog. Retin. Eye Res.|Progress in Retinal and Eye Research PRESNSMP|Phys. Rev. E Stat. Nonlin. Soft Matter Phys.|Physical Review. E, Statistical, Nonlinear, and Soft Matter Physics PRESPPFRIT|Phys. Rev. E Stat. Phys. Plasmas Fluids Relat. Interdiscip. Topics=Phys. Rev. E Stat. Phys. Plasmas Fluids|Physical Review. E, Statistical Physics, Plasmas, Fluids, and Related Interdisciplinary Topics PRF|Phys. Rev. Fluids|Physical Review Fluids PRH|Post Reprod. Health|Post Reproductive Health PRHSJ|P. R. Health Sci. J.|Puerto Rico Health Sciences Journal PRI|Physiother. Res. Int.|Physiotherapy Research International: The Journal for Researchers and Clinicians in Physical Therapy PRIMS|Publ. Res. Inst. Math. Sci.|Publications of the Research Institute for Mathematical Sciences PRJ|Psychiatr. Rehabil. J.|Psychiatric Rehabilitation Journal PRKM|Prog. React. Kinet. Mech.|Progress in Reaction Kinetics and Mechanism PRL|Pattern Recognit. Lett.=Pattern Recognition Lett.|Pattern Recognition Letters PRL1|Phys. Rev. Lett.|Physical Review Letters PRM|Pain Res. Manag.|Pain Research & Management PRMR|Probl. Radiac Med. Radiobiol.|Problemy Radiatsiinoi Medytsyny ta Radiobiolohii=Problemy Radiat︠s︡iĭnoï Medyt︠s︡yny ta Radiobiolohiï PRO|Pract. Radiat. Oncol.|Practical Radiation Oncology PROJ|Pediatr. Rheumatol. Online J.|Pediatric Rheumatology Online Journal PRP|Pathol. Res. Pract.|Pathology, Research and Practice PRP1|Pharmacol. Res. Perspect.|Pharmacology Research & Perspectives PRPER|Phys. Rev. Phys. Educ. Res.|Physical Review Physics Education Research PRR|Paediatr. Respir. Rev.|Paediatric Respiratory Reviews PRS|Plast. Reconstr. Surg.|Plastic and Reconstructive Surgery PRSAMP|P. Roy. Soc. A Math. Phy.|Proceedings of the Royal Society A-Mathematical Physical and Engineering Sciences PRSESA|Proc. Roy. Soc. Edinburgh Sect. A|Proceedings of the Royal Society of Edinburgh Section A: Mathematics PRSLAMPS|Proc. R. Soc. Lond. A Math. Phys. Sci.|Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences PRSLSA|Proc. R. Soc. London Ser. A|Proceedings of the Royal Society of London Series A PRX|Phys. Rev. X|Physical Review. X PS|Peptide Sci.|Peptide Science PS1|Pharm. Stat.|Pharmaceutical Statistics PS2|Philos. Sci.=Phil. Sci.|Philosophy of Science PS3|Photonic Sens.|Photonic Sensors PS4|Phys. Scr.=Phys. Scripta|Physica Scripta PS5|Phys. Sportsmed.|The Physician and Sportsmedicine PS6|Plant Sci.|Plant Science=Plant Science: An International Journal of Experimental Plant Biology PS7|Poult. Sci.=Poultry Sci.|Poultry Science PS8|Prev. Sci.|Prevention Science PS9|Protein Sci.|Protein Science PS10|Proteome Sci.|Proteome Science PS11|Psychiatr. Serv.|Psychiatric Services: A Journal of the American Psychiatric Association PS12|Psychol. Sci.|Psychological Science PS13|Psychol. Serv.|Psychological Services PS14|Purinergic Signal.=Purinerg. Signal.|Purinergic Signalling PSB|Pac. Symp. Biocomput.|Pacific Symposium on Biocomputing PSB1|Plant Signal. Behav.|Plant Signaling & Behavior PSC|Palliat. Support. Care|Palliative & Supportive Care PSFG|Protein. Struct. Funct. Genet.|Proteins: Structure, Function, and Genetics PSGZIM|Probl. Sotsialnoi Gig. Zdravookhranenniiai Istor. Med.|Problemy Sotsial'noi Gigieny, Zdravookhraneniia i Istorii Meditsiny=Problemy Sot︠s︡ialʹnoĭ Gigieny, Zdravookhranenii︠a︡ i Istorii Medit︠s︡iny PSI|Pediatr. Surg. Int.=Pediat. Surg. Int.|Pediatric Surgery International PSIM|Proc. Steklov Inst. Math.|Proceedings of the Steklov Institute of Mathematics PSN|Plast. Surg. Nurs.|Plastic Surgical Nursing PSP|Process Saf. Prog.|Process Safety Progress PSPI|Psychol. Sci. Public Interest=Psychol. Sci. Publ. Int.|Psychological Science in the Public Interest=Psychological Science in the Public Interest: A Journal of the American Psychological Society PSRH|Perspect. Sex. Reprod. Health=Perspect. Sex. Repro. H.|Perspectives on Sexual and Reproductive Health PSS|Phys. Solid State|Physics of the Solid State PSS1|Prog. Surf. Sci.|Progress in Surface Science PSSA|Polym. Sci. Ser. A|Polymer Science Series A PSSAAM|Phys. Status Solidi A Appl. Mat.|Physical Status Solidi A=Physica Status Solidi A-Applications and Materials Science PSSB|Polym. Sci. Ser. B|Polymer Science Series B PSSBBSSP|Phys. Status Solidi B Basic Solid State Phys.=Phys. Status Solidi B Basic So.|Physical Status Solidi B=Physica Status Solidi. B, Basic Solid State Physics PSSC|Polym. Sci. Ser. C|Polymer Science Series C PSSC1|Prog. Solid State Chem.|Progress in Solid State Chemistry PSSRE|Phosphorus Sulfur Silicon Relat. Elem.=Phosphor. Sulfur Silicon|Phosphorus Sulfur Silicon and the Related Elements=Phosphorus, Sulfur, and Silicon and the Related Elements PSSRRL|Phys. Status Solidi Rapid Re. L.|Physica Status Solidi-Rapid Research Letters PSST|Plasma Sources Sci. Technol.=Plasma Sources Sci. T.|Plasma Sources Science & Technology=Plasma Sources Science and Technology PST|Plasma Sci. Technol.|Plasma Science & Technology PT|Pediatr. Transplant.|Pediatric Transplantation PT1|Pharmacol. Ther.=Pharmacol. Therapeut.|Pharmacology & Therapeutics PT2|Phase Transitions|Phase Transitions PT3|Phys. Teach.|Physics Teacher PT4|Phys. Ther.|Physical Therapy PT5|Phys. Today|Physics Today PT6|Powder Technol.|Powder Technology PT7|Prog. Transplant.|Progress in Transplantation PT8|Psychol. Trauma=Psychol. Trauma US|Psychological Trauma: Theory, Research, Practice and Policy PTAMPES|Philos. Trans. A Math. Phys. Eng. Sci.=Phil. Trans. R Soc. A|Philosophical Transactions. Series A, Mathematical, Physical, and Engineering Sciences PTEP|Prog. Theor. Exp. Phys.|Progress of Theoretical and Experimental Physics PTP|Physiother. Theory Pract.=Physiother. Theor. Pract.|Physiotherapy Theory and Practice PTR|Prog. Tumor Res.|Progress in Tumor Research PTRF|Probab. Theory Relat. Fields=Probab. Theory Relat. Field.|Probability Theory and Related Fields PTRSA|Philos. Trans. R. Soc. A|Philosophical Transactions of the Royal Society A-Mathematical Physical and Engineering Sciences PTRSBBS|Philos. Trans. R. Soc. B Biol. Sci.|Philosophical Transactions of the Royal Society B-Biological Sciences PTRSLBBS|Philos. Trans. R. Soc. Lond. B Biol. Sci.|Philosophical Transactions of the Royal Society of London. Series B, Biological Sciences PTS|Phys. Ther. Sport|Physical Therapy in Sport PTVE|Presence Teleoper. Virtual Env.|Presence-Teleoperators and Virtual Environments PU|Prog. Urol.|Progres en Urologie=Progrès en Urologie: Journal de L'association Française D'urologie et de la Société Française D'urologie PUC|Pers. Ubiquitous Comput.=Pers. Ubiquit. Comput.|Personal and Ubiquitous Computing PUS|Public Underst. Sci.|Public Understanding of Science PUSP|Phys. USP|Physics-Uspekhi PV|Parasit. Vectors=Parasites Vectors|Parasites & Vectors PVM|Prev. Vet. Med.|Preventive Veterinary Medicine PW|Phys. World|Physics World PW1|Polimery W|Polimery PWP|Phys. Wave Phenom.|Physics of Wave Phenomena QAM|Quart. Appl. Math.|Quarterly of Applied Mathematics QE|Quantum Electron.|Quantum Electronics QHR|Qual. Health Res.|Qualitative Health Research QI|Quintessence Int.|Quintessence International QIC|Quantum Inf. Comput.|Quantum Information & Computation QIP|Quantum Inf. Process.|Quantum Information Processing QITJ|Quant. Infrared Thermogr. J.=Quant. Infr. Therm. J.|Quantitative Infrared Thermography Journal QJM|Quart. J. Math.|Quarterly Journal of Mathematics QJNMMI|Q. J. Nucl. Med. Mol. Imaging|The Quarterly Journal of Nuclear Medicine and Molecular Imaging QJRMS|Quart. J. Roy. Meteorol. Soc.|Quarterly Journal of the Royal Meteorological Society QLR|Qual. Life Res.|Quality of Life Research=Quality of Life Research: An International Journal of Quality of Life Aspects of Treatment, Care and Rehabilitation QM|Quaest. Math.|Quaestiones Mathematicae QMHC|Qual. Manag. Health Care=Qual. Manag. Health CA|Quality Management in Health Care QN|Quim. Nova|Quimica Nova QQ|Qual. Quant.|Quality & Quantity QRB|Q. Rev. Biol.=Quart. Rev. Biol.|Quarterly Review of Biology=The Quarterly Review of Biology QRB1|Q. Rev. Biophys.=Quart. Rev. Biophys.|Quarterly Reviews of Biophysics QSAR|Quant. Struct. Act. Relat.|Quantitative Structure-Activity Relationships QSARCS|QSAR Comb. Sci.|QSAR & Combinatorial Science QTDS|Qual. Theory Dyn. Syst.|Qualitative Theory of Dynamical Systems R|Radiographics|Radiographics: A Review Publication of the Radiological Society of North America, Inc R1|Radiologe|Der Radiologe R2|Radiologia|Radiología R3|Radiology|Radiology R4|Reproduction|Reproduction R5|Respiration|Respiration: International Review of Thoracic Diseases R6|Respirology|Respirology R7|Resuscitation|Resuscitation R8|Retrovirology|Retrovirology R9|Reumatismo|Reumatismo R10|Rhinology|Rhinology R11|Rofo|Röfo: Fortschritte Auf Dem Gebiete Der Röntgenstrahlen und Der Nuklearmedizin RA|Radiochim. Acta|Radiochima Acta=Radiochimica Acta RA1|Res. Aging|Research on Aging RA2|Rheol. Acta|Rheologica Acta RA3|Risk Anal.|Risk Analysis RAC|Rev. Anal. Chem.|Reviews in Analytical Chemistry RAIROOR|RAIRO Oper. Res.|RAIRO-Operations Research RAIROTIA|RAIRO Theor. Inform. Appl.|RAIRO: Theoretical Informatics and Applications RAM|Rev. Alerg. Mex.|Revista Alergia Mexico RAM1|Rev. Argent. Microbiol.|Revista Argentina de Microbiología RAPM|Reg. Anesth. Pain Med.=Region. Anesth. Pain Med.|Regional Anesthesia and Pain Medicine RAS|Rev. Account. Stud.|Review of Accounting Studies RB|Redox Biol.|Redox Biology RB1|Reprod. Biol.|Reproductive Biology RBA|Rev. Bras. Anestesiol.|Revista Brasileira de Anestesiologia RBE|Reprod. Biol. Endocrinol.=Reprod. Biol. Endocrin.|Reproductive Biology and Endocrinology RBE1|Rev. Bras. Enferm.|Revista Brasileira de Enfermagem RBL|Rom. Biotechnol. Lett.=Rom. Biotech. Lett.|Romanian Biotechnological Letters RBO|Reprod. Biomed. Online|Reproductive Biomedicine Online RBP|Rev. Bras. Psiquiatr.|Revista Brasileira de Psiquiatria RBR|Rev. Bras. Reumatol.=Rev. Bras. Reumatol. Engl. Ed.|Revista Brasileira de Reumatologia RBT|Rev. Biol. Trop.|Revista de Biologia Tropical RBTI|Rev. Bras. Ter. Intensiva|Revista Brasileira de Terapia Intensiva RC|Reliab. Comput.|Reliable Computing RC1|Rep. Carcinog.|Report on Carcinogens: Carcinogen Profiles RC2|Respir. Care=Resp. Care|Respiratory Care RCA|Rev. Calid. Asist.|Revista de Calidad Asistencial: Organo de la Sociedad Española de Calidad Asistencial RCB|Rev. Chim. Bucharest|Revista de Chimie RCB1|Russ. Chem. Bull.|Russian Chemical Bulletin RCBC|Rev. Col. Bras. Cir.|Revista do Colégio Brasileiro de Cirurgiões RCBR|Retin. Cases Brief Rep.|Retinal Cases & Brief Reports RCC|Rev. Comput. Chem.|Reviews in Computational Chemistry RCD|Regul. Chaotic Dyn.|Regular & Chaotic Dynamics RCE|React. Chem. Eng.|Reaction Chemistry & Engineering RCE1|Rev. Chem. Eng.|Reviews in Chemical Engineering RCI|Rev. Chilena Infectol.|Revista Chilena de Infectología RCM|Rev. Cardiovasc. Med.|Reviews in Cardiovascular Medicine RCMS|Rapid Commun. Mass Spectrom.=Rapid Commun. Mass Sp.|Rapid Communications in Mass Spectrometry RCNA|Radiol. Clin. North Am.=Radiol. Clin. N. Amer.|Radiologic Clinics of North America RCP|Rev. Chil. Pediatr.|Revista Chilena de Pediatría RCP1|Rev. Colomb. Psiquiatr.|Revista Colombiana de Psiquiatría RCRET|Russ. Chem. Rev. Engl. Tr.|Russian Chemical Reviews RCT|Rubber Chem. Technol.|Rubber Chemistry and Technology RDCNA|Rheum. Dis. Clin. North Am.|Rheumatic Diseases Clinics of North America RDD|Res. Dev. Disabil.=Res. Develop. Disabil.|Research in Developmental Disabilities RDS|Rev. Diabet. Stud.|The Review of Diabetic Studies RE|Requir. Eng.|Requirements Engineering REAR|Rev. Esp. Anestesiol. Reanim.|Revista Española de Anestesiología y Reanimación REB|Radiat. Environ. Biophys.=Radiat. Environ. Bioph.|Radiation and Environmental Biophysics RECOT|Rev. Esp. Cir. Ortop. Traumatol.|Revista Española de Cirugía Ortopédica y Traumatología RECT|Rev. Environ. Contam. Toxicol.=Rev. Environ. Contam. T.|Reviews of Environment Contamination and Toxicology=Reviews of Environmental Contamination and Toxicology REED|Rev. Esp. Enferm. Dig.=Rev. Espan. Enferm. Dig.|Revista Española de Enfermedades Digestivas REGG|Rev. Esp. Geriatr. Gerontol.|Revista Española de Geriatría y Gerontología REH|Rev. Environ. Health|Reviews on Environmental Health REMD|Rev. Endocr. Metab. Disord.=Rev. Endocr. Metab. Dis.|Reviews in Endocrine & Metabolic Disorders REMNIM|Rev. Esp. Med. Nucl. Imagen Mol.=Rev. Esp. Med. Nucl. IMA|Revista Española de Medicina Nuclear e Imagen Molecular REP|Rev. Esp. Patol.|Revista Española de Patología REQ|Rev. Esp. Quimioter.|Revista Española de Quimioterapia RESCEUSP|Rev. ESC Enferm. USP|Revista Da Escola de Enfermagem Da U S P RESP|Rev. Epidemiol Sante Publique=Rev. Epidemiol Sante Publ.|Revue D'épidémiologie et de Santé Publique RESP1|Rev. Esp. Salud Publica=Rev. Esp. Salud Public.|Revista Española de Salud Pública RESP2|Rev. Esp. Sanid. Penit.|Revista Española de Sanidad Penitenciaria RF|Ren. Fail.|Renal Failure RFCMUNC|Rev. Fac. Cien. Med. Univ. Nac Cordoba|Revista de la Facultad de Ciencias Médicas=Revista de la Facultad de Ciencias Medicas de la Universidad Nac. de Cordoba RFD|Reprod. Fertil. Dev.=Reprod. Fert. Develop.|Reproduction, Fertility, and Development RFP|React. Funct. Polym.|Reactive & Functional Polymers=Reactive and Functional Polymers RGE|Rev. Gaucha Enferm.|Revista Gaúcha de Enfermagem RGM|Rev. Gastroenterol. Mex.|Revista de Gastroenterología de México RGN|Res. Gerontol. Nurs.|Research in Gerontological Nursing RGP|Rev. Gastroenterol. Peru|Revista de Gastroenterología Del Perú RH|Reprod. Health|Reproductive Health RHM|Reprod. Health Matters=Reprod. Health Matter.|Reproductive Health Matters RI|Respir. Investig.|Respiratory Investigation RI1|Rev. Infirm|Revue de L'infirmière RI2|Rheumatol. Int.|Rheumatology International RIA|Rev. Int. Androl.|Revista Internacional de Andrología RIC|Rev. Inorganic Chem.|Reviews in Inorganic Chemistry RIC1|Rev. Invest. Clin.=Rev. Investig. Clin.|Revista de Investigacion Clinica-Clinical and Translational Investigation=Revista de Investigación Clínica: Organo Del Hospital de Enfermedades de la Nutrición RIM|Rev. Iberoam. Micol.|Revista Iberoamericana de Micología RIMTSP|Rev. Inst. Med. Trop. Sao Paulo=Rev. Inst. Med. Trop. Sp|Revista do Instituto de Medicina Tropical de São Paulo RJ|R Journal|R Journal RJ1|Ramanujan J.|Ramanujan Journal RJACET|Russ. J. Appl. Chem. Eng Tr.|Russian Journal of Applied Chemistry RJBC|Russ. J. Bioorganic Chem.=Russ. J. Bioorg. Chem.|Russian Journal of Bioorganic Chemistry RJCC|Russ. J. Coord. Chem.|Russian Journal of Coordination Chemistry=Russion Journal of Coordination Chemistry RJDB|Russ. J. Dev. Biol.|Russian Journal of Developmental Biology RJE|Russian J. Electrochemistry|Russian Journal of Electrochemistry RJG|Russ. J. Genet.|Russian Journal of Genetics RJGC|Russ. J. Gen. Chem.|Russian Journal of General Chemistry RJIC|Russ. J. Inorg. Chem.|Russian Journal of Inorganic Chemistry RJIST|Rom. J. Inform. Sci. Technol.|Romanian Journal of Information Science and Technology RJME|Rom. J. Morphol. Embryol.|Romanian Journal of Morphology and Embryology RJMP|Russ. J. Math. Phys.|Russian Journal of Mathematical Physics RJOC|Russ. J. Organ. Chem.|Russian Journal of Organic Chemistry RJP|Rom. J. Phys.|Romanian Journal of Physics RJPCA|Russ. J. Phys. Chem. A|Russian Journal of Physical Chemistry A RJPCB|Russ. J. Phys. Chem. B|Russian Journal of Physical Chemistry B RKCL|React. Kinet. Catal. Lett.|Reaction Kinetics and Catalysis Letters RKMC|React. Kinet. Mech. Catal.|Reaction Kinetics Mechanisms and Catalysis RLAE|Rev. Lat. Am. Enfermagem=Rev. Latino Am. Enfermagem|Revista Latino-Americana de Enfermagem RLMA|Rend. Lincei Mat. Appl.|Rendiconti Lincei-Matematica e Applicazioni RLSFN|Rend. Lincei Sci. Fis. Nat.=Rend. Lincei Sci. Fis.|Rendiconti Lincei. Scienze Fisiche e Naturali RM|Radiat. Meas.|Radiation Measurements RM1|Radiol. Med.|Radiologia Medica=La Radiologia Medica RM2|Regen. Med.|Regenerative Medicine RM3|Res. Microbiol.|Research in Microbiology RM4|Respir. Med.=Resp. Med.|Respiratory Medicine RM5|Results Math.|Results in Mathematics RMC|Rev. Mat. Complut.|Revista Matematica Complutense RMC1|Rev. Med. Chil.=Rev. Med. Chile|Revista Médica de Chile RMF|Rev. Mex. Fis.|Revista Mexicana de Fisica RMI|Rev. Mat. Iberoam.|Revista Matematica Iberoamericana RMI1|Rev. Med. Interne|Revue de Medecine Interne=La Revue de Médecine Interne RMIQ|Rev. Mex. Ing. Quim.|Revista Mexicana de Ingenieria Quimica RMJM|Rocky Mt J. Math.|Rocky Mountain Journal of Mathematics RML|Rep. Math. Logic|Reports on Mathematical Logic RML1|Rev. Med. Liege|Revue Médicale de Liège RMP|Rep. Math. Phys.|Reports on Mathematical Physics RMP1|Rev. Math. Phys.|Reviews in Mathematical Physics RMP2|Rev. Mod. Phys.|Reviews of Modern Physics RMR|Rev. Mal. Respir.|Revue des Maladies Respiratoires RMS|Rev. Med. Suisse|Revue Médicale Suisse RMSET|Russ. Math. Survey. Engl. Tr.|Russian Mathematical Surveys RMTA|Random Matrices Theor. Appl.|Random Matrices: Theory and Applications RMV|Rev. Med. Virol.|Reviews in Medical Virology RN|Rehabil. Nurs.|Rehabilitation Nursing RN1|Rev. Neurol.=Rev. Neurol. France|Revue Neurologique=Revista de Neurologia RN2|Rev. Neurosci.=Rev. Neuroscience.|Reviews in the Neurosciences RNA0|RNA|RNA RNAB|RNA Biol.|RNA Biology RNC|Riv. Nuovo Cimento|Rivista Del Nuovo Cimento RNH|Res. Nurs. Health|Research in Nursing & Health RNN|Restor. Neurol. Neurosci.=Restor. Neurol. Neuros.|Restorative Neurology and Neuroscience RO|Radiat. Oncol.|Radiation Oncology RO1|Radiol. Oncol.|Radiology and Oncology RO2|Radiother. Oncol.|Radiotherapy and Oncology=Radiotherapy and Oncology: Journal of the European Society for Therapeutic Radiology and Oncology ROIE|Rev. Off Int Epizoot|Revue Scientifique et Technique RP|Rehabil. Psychol.|Rehabilitation Psychology RP1|Results Phys.|Results in Physics RP2|Riv. Psichiatr.|Rivista di Psichiatria RPADD|Recent Pat. Anticancer Drug Discov.=Recent Patents Anti Canc. Dr. D.|Recent Patents on Anti-Cancer Drug Discovery RPADD1|Recent Pat. Antiinfect. Drug Discov.|Recent Patents on Anti-Infective Drug Discovery RPB|Recent Pat. Biotechnol.|Recent Patents on Biotechnology RPB1|Rural Policy Brief|Rural Policy Brief RPBP|Rev. Physiol. Biochem. Pharmacol.=Rev. Physiol. Bioch. P.|Reviews of Physiology, Biochemistry and Pharmacology RPC|Radiat. Phys. Chem.|Radiation Physics and Chemistry RPC1|Rev. Pneumol. Clin.|Revue de Pneumologie Clinique RPCD|Results Probl. Cell Differ.|Results and Problems in Cell Differentiation RPD|Radiat. Prot. Dosimetry=Radiat. Prot. Dosim.|Radiation Protection Dosimetry RPDDF|Recent Pat. Drug Deliv. Formul.|Recent Patents on Drug Delivery & Formulation RPEMIDD|Recent Pat. Endocr. Metab. Immune Drug Discov.|Recent Patents on Endocrine, Metabolic & Immune Drug Discovery RPFNA|Recent Pat. Food Nutr. Agric.|Recent Patents on Food, Nutrition & Agriculture RPIADD|Recent Pat. Inflamm. Allergy Drug Discov.|Recent Patents on Inflammation & Allergy Drug Discovery RPJ|Russ. Phys. J.|Russian Physics Journal RPM|Recenti Prog. Med.|Recenti Progressi in Medicina RPMESP|Rev. Peru. Med. Exp. Salud Publica|Revista Peruana de Medicina Experimental y Salud Pública RPN|Recent Pat. Nanotechnol.=Recent Pat. Nanotechnology|Recent Patents on Nanotechnology RPN1|Respir. Physiol. Neurobiol.=Resp. Physiol. Neurobi.|Respiratory Physiology & Neurobiology RPP|Rep. Prog. Phys.=Rep. Progr. Phys.|Reports on Progress in Physics RPP1|Rev. Paul. Pediatr.|Revista Paulista de Pediatria RPSM|Rev. Psiquiatr. Salud Ment.=Rev. Psiquiatr. Salud|Revista de Psiquiatria y Salud Mental=Revista de Psiquiatrí́a y Salud Mental RPT|Radiol. Phys. Technol.|Radiological Physics and Technology RPZH|Rocz. Panstw. Zakl. Hig.|Roczniki Państwowego Zakładu Higieny RQE|Radiophys. Quantum Electron.|Radiophysics and Quantum Electronics RQES|Res. Q. Exerc. Sport=Res. Quart. Exercise Sport|Research Quarterly for Exercise and Sport RR|Radiat. Res.|Radiation Research RR1|Redox Rep.|Redox Report=Redox Report: Communications in Free Radical Research RR2|Rejuvenation Res.=Rejuv. Res.|Rejuvenation Research RR3|Respir. Res.=Resp. Res.|Respiratory Research RRACEF|Rev. Real Acad. Cienc. Exactas F.|Revista de la Real Academia de Ciencias Exactas Fisicas y Naturales Serie A-Matematicas RRC|Rev. Roum. Chim.|Revue Roumaine de Chimie=Revue Roumaine du Chimie RRCR|Recent Results Cancer Res.|Recent Results in Cancer Research. Fortschritte Der Krebsforschung. Progrès Dans Les Recherches Sur le Cancer RRCT|Rev. Recent Clin. Trials|Reviews on Recent Clinical Trials RRH|Rural Remote Health|Rural and Remote Health RRP|Rom. Rep. Phys.|Romanian Reports in Physics RS|Reprod. Sci.|Reproductive Sciences RS1|Rev. Stat.|Revista de Statistica RS2|Rev. Synth.|Revue de Synthèse RSA|Random Struct. Algorithms=Random Struct. Algorithm.|Random Structures & Algorithms RSBMT|Rev. Soc. Bras. Med. Trop.=Rev. Soc. Bras. Med. Tro.|Revista Da Sociedade Brasileira de Medicina Tropical RSCA|RSC Adv.|RSC Advances RSE|Remote Sens. Environ.|Remote Sensing of Environment RSI|Rech. Soins Infirm.|Recherche en Soins Infirmiers RSI1|Rev. Sci. Instrum.=Rev. Sci. Instr.|Review of Scientific Instruments=The Review of Scientific Instruments RSJ|Revstat Stat. J.|Revstat Statistical Journal RSL|Rev. Symb. Logic|Review of Symbolic Logic RSM|Res. Sports Med.|Research in Sports Medicine RSM1|Res. Synth. Methods|Research Synthesis Methods RSMUP|Rend. Semin. Mat. Univ. Padova|Rendiconti Del Seminario Matematico Della Universita di Padova RSP|Rev. Saude Publica=Rev. Saude Publ.|Revista de Saúde Pública RT|Radiol. Technol.|Radiologic Technology RT1|Regen. Ther.|Regenerative Therapy RT2|Represent. Theory|Representation Theory RT3|Reprod. Toxicol.|Reproductive Toxicology RTNP|Res. Theory Nurs. Pract.=Res. Theor. Nurs. Pract.|Research and Theory for Nursing Practice RTP|Regul. Toxicol. Pharmacol.=Regul. Toxicol. Pharm.|Regulatory Toxicology and Pharmacology RTS|Real Time Syst.|Real-Time Systems RUMA|Rev. Union Mat. Argent.|Revista de la Union Matematica Argentina RVS|Res. Vet. Sci.|Research in Veterinary Science S|Sankhya|Sankhya S1|Scanning|Scanning S2|Schmerz|Der Schmerz S3|Science|Science S4|Scientificworldjournal|Thescientificworldjournal S5|Scientometrics|Scientometrics S6|Seizure|Seizure S7|Semergen|Semergen S8|Shock|Shock S9|Skinmed|Skinmed S10|Sleep|Sleep S11|Small|Small S12|Soins|Soins: la Revue de Référence Infirmière S13|Spine|Spine S14|Statistics=Statistics Abingdon|Statistics S15|Steroids|Steroids S16|Stochastics|Stochastics-An International Journal of Probability and Stochastic Processes S17|Stomatologija|Stomatologija S18|Strabismus|Strabismus S19|Stress|Stress: The International Journal on the Biology of Stress S20|Stroke|Stroke S21|Structure|Structure S22|Surgeon|The Surgeon: Journal of the Royal Colleges of Surgeons of Edinburgh and Ireland S23|Surgery|Surgery S24|Symbiosis|Symbiosis S25|Synapse|Synapse S26|Synlett|Synlett: Accounts and Rapid Communications in Synthetic Organic Chemistry SA|Sci. Adv.|Science Advances SA1|Sci. Am.=Sci. Amer.|Scientific American SA2|Seq. Anal.=Sequential Anal.|Sequential Analysis=Sequential Analysis-Design Methods and Applications SA3|Sex. Abuse=Sex. Abuse J. Res. Treat.|Sexual Abuse=Sexual Abuse: A Journal of Research and Treatment SA4|Spectrochim. Acta|Spectrochimica Acta SA5|Subst. Abus.|Substance Abuse SAA|Spectrochim. Acta A=Spectrochim. Acta Pt. A Mol. Bio.|Spectrochimica Acta Part A: Molecular and Biomolecular Spectroscopy SAA1|Stoch. Anal. Appl.=Stochastic Anal. Appl.|Stochastic Analysis and Applications SABC|Sens. Actuators B Chem.=Sensor. Actuator. B Chem.|Sensors and Actuators. B, Chemical SADM|Stat. Anal. Data Min.|Statistical Analysis and Data Mining SAGMB|Stat. Appl. Genet. Mol. Biol.=Stat. Appl. Genet. Mol.|Statistical Applications in Genetics and Molecular Biology SAJ|Scand. Actuar. J.|Scandinavian Actuarial Journal SAJCSATC|S. Afr. J. Chem. S. Afr. Tydskr. Ch.|South African Journal of Chemistry-Suid-Afrikaanse Tydskrif Vir Chemie SAJS|S. Afr. J. Surg.|South African Journal of Surgery=South African Journal of Surgery. Suid-Afrikaanse Tydskrif Vir Chirurgie SAM|Stud. Appl. Math.|Studies in Applied Mathematics SAM1|Syst. Appl. Microbiol.|Systematic and Applied Microbiology SAPA|Spectrochim. Acta Part A|Spectrochimica Acta, Part A SAPBAS|Spectrochim. Acta Part B At. Spectrosc.=Spectrochim. Acta Pt. B At. Spec.|Spectrochimica Acta Part B: Atomic Spectroscopy SAR|Semin. Arthritis Rheum.=Semin. Arthritis Rheu.|Seminars in Arthritis and Rheumatism SARQSARER|SAR QSAR Environ. Res.|SAR and QSAR in Environmental Research SAT|Schweiz. Arch. Tierheilkd=Schweiz. Arch. Tierh.|Schweizer Archiv für Tierheilkunde SATPP|Subst. Abuse Treat. Prev. Policy=Subst. Abus. Treatment Prev. Pol.|Substance Abuse Treatment, Prevention, and Policy SB|Schizophr. Bull.=Schizophrenia Bull.|Schizophrenia Bulletin SB1|Sensors Basel|Sensors SB2|Sports Biomech.=Sport. Biomech.|Sports Biomechanics SB3|Stat. Biosci.|Statistics in Biosciences SB4|Struct. Bond.|Structure and Bonding SB5|Syst. Biol.|Systematic Biology SBB|Soil Biol. Biochem.|Soil Biology & Biochemistry=Soil Biology and Biochemistry SBR|Stat. Biopharm. Res.|Statistics in Biopharmaceutical Research SBRM|Syst. Biol. Reprod. Med.|Systems Biology in Reproductive Medicine SC|Salud Colect.|Salud Colectiva SC1|Sci. Context|Science in Context SC2|Soft Comput.|Soft Computing SC3|Speech Commun.|Speech Communication SC4|Spinal Cord|Spinal Cord SC5|Stat. Comput.|Statistics and Computing SC6|Stem Cells|Stem Cells SC7|Struct. Chem.|Structural Chemistry SC8|Studies Conservation|Studies in Conservation SC9|Supramol. Chem.|Supramolecular Chemistry SC10|Synth. Commun.=Synthetic Commun.|Synthetic Communications SCB|Semin. Cancer Biol.|Seminars in Cancer Biology SCC|Sci. China Chem.|Science China. Chemistry SCC1|Support. Care Cancer|Supportive Care in Cancer SCCLS|Sci. China C Life Sci.|Science in China. Series C, Life Sciences SCD|Spec. Care Dentist.|Special Care in Dentistry SCD1|Stem Cells Dev.|Stem Cells and Development SCDB|Semin. Cell Dev. Biol.|Seminars in Cell & Developmental Biology SCI|Stem Cells Int.|Stem Cells International SCIS|Sci. China Inform. Sci.|Science China-Information Sciences SCIS1|Sustain. Comput. Inf. Syst.|Sustainable Computing-Informatics & Systems SCJ|Scand. Cardiovasc. J.|Scandinavian Cardiovascular Journal SCJS|Scand. Cardiovasc. J. Suppl.|Scandinavian Cardiovascular Journal. Supplement SCLS|Sci. China Life Sci.|Science China. Life Sciences SCM|Sci. China Math.|Science China. Mathematics SCMS|Semin. Cutan. Med. Surg.|Seminars in Cutaneous Medicine and Surgery SCN|Secur. Commun. Netw.|Security and Communication Networks SCNA|Surg. Clin. North Am.|The Surgical Clinics of North America SCP|Sci. Comput. Program.|Science of Computer Programming SCPMA|Sci. China Phys. Mech. Astron.|Science China-Physics Mechanics & Astronomy SCR|Stem Cell Reports=Stem Cell Rep.|Stem Cell Reports SCR1|Stem Cell Res.|Stem Cell Research SCR2|Stem Cell Rev.|Stem Cell Reviews SCRR|Stem Cell Rev. Rep.|Stem Cell Reviews and Reports SCRT|Stem Cell Res. Ther.|Stem Cell Research & Therapy SCSAM|Sci. China Ser. A Math.|Science in China. Series A, Mathematics SCTM|Stem Cells Transl. Med.=Stem Cell. Transl. Med.|Stem Cells Translational Medicine SCVA|Semin. Cardiothorac. Vasc. Anesth.|Seminars in Cardiothoracic and Vascular Anesthesia SD|Sci. Data|Scientific Data SD1|Semin. Dial.=Semin. Dialysis|Seminars in Dialysis SD2|Sex. Dev.|Sexual Development SD3|Spine Deform.|Spine Deformity SD4|Stoch. Dynam.|Stochastics and Dynamics SDEE|Soil Dynam. Earthquake Eng.|Soil Dynamics and Earthquake Engineering SDJ|Singapore Dent. J.|Singapore Dental Journal SDP|Semin. Diagn. Pathol.|Seminars in Diagnostic Pathology SDUS|Struct. Dynam. US|Structural Dynamics SE|Surg. Endosc.|Surgical Endoscopy=Surgical Endoscopy and Other Interventional Techniques SEC|Swarm Evol. Comput.|Swarm and Evolutionary Computation SEE|Sci. Eng. Ethics|Science and Engineering Ethics SEIE|Solvent Extr. Ion Exch.|Solvent Extraction and Ion Exchange SEM|Struct. Equ. Modeling|Structural Equation Modeling: A Multidisciplinary Journal SERDJ|Solvent Extr. Res. Dev. Jpn.|Solvent Extraction Research and Development-Japan SERRA|Stoch. Environ. Res. Risk Assess.=Stoch. Env. Res. Risk A.|Stochastic Environmental Research and Risk Assessment=Stochastic Environmental Research and Risk Assessment: Research Journal SET|Semiconductors Engl. Tr.|Semiconductors SEZ|Shokuhin Eiseigaku Zasshi|Shokuhin Eiseigaku Zasshi. Journal of the Food Hygienic Society of Japan SF|Semigroup Forum|Semigroup Forum SFC|Solid Fuel Chem.|Solid Fuel Chemistry SFN|Stereotact. Funct. Neurosurg.=Stereot. Funct. Neuros.|Stereotactic and Functional Neurosurgery SFNM|Semin. Fetal Neonatal Med.=Semin. Fetal Neonat. M.|Seminars in Fetal & Neonatal Medicine SFP|Stud. Fam. Plann.=Stud. Family Plann.|Studies in Family Planning SG|Small Gtpases|Small Gtpases SG1|Soins Gerontol.|Soins. Gérontologie SGS|Stand. Genomic Sci.|Standards in Genomic Sciences SH|Semin. Hematol.|Seminars in Hematology SH1|Sex. Health|Sexual Health SH2|Simul. Healthc.|Simulation in Healthcare: Journal of the Society for Simulation in Healthcare SH3|Sleep Health|Sleep Health SH4|Sports Health|Sports Health-A Multidisciplinary Approach SH5|Stress Health|Stress and Health=Stress and Health: Journal of the International Society for the Investigation of Stress SHI|Sociol. Health Illn.=Sociol. Health Ill.|Sociology of Health & Illness SHPBBS|Stud. Hist. Philos. Biol. Biomed. Sci.|Studies in History and Philosophy of Biological and Biomedical Sciences SHPMP|Stud. Hist. Philos. Mod. Phys.|Studies in History and Philosophy of Modern Physics SHPS|Stud. Hist. Philos. Sci.=Stud. Hist. Phil. Sci.|Studies in History and Philosophy of Science SHTI|Stud. Health Technol. Inform.|Studies in Health Technology and Informatics SI|Sci. Immunol.|Science Immunology SI1|Semin. Immunol.|Seminars in Immunology SI2|Semin. Immunopathol.|Seminars in Immunopathology SI3|Stat. Interface|Statistics and its Interface SI4|Surg. Innov.|Surgical Innovation SIA|Surf. Interface Anal.|Surface and Interface Analysis SIAMAJUQ|SIAM Asa J. Uncertain. Quantif.|SIAM-Asa Journal on Uncertainty Quantification SIAMJADS|SIAM J. Appl. Dyn. Syst.|SIAM Journal on Applied Dynamical Systems SIAMJAM|SIAM J. Appl. Math.|SIAM Journal on Applied Mathematics SIAMJC|SIAM J. Comput.|SIAM Journal on Computing SIAMJIS|SIAM J. Imaging Sci.|SIAM Journal on Imaging Sciences SIAMJMA|SIAM J. Math. Anal.|SIAM Journal on Mathematical Analysis SIAMJMAA|SIAM J. Matrix Anal. Appl.=SIAM J. Matrix Anal. Applicat.|SIAM Journal on Matrix Analysis and Applications SIAMJNA|SIAM J. Numer. Anal.|SIAM Journal on Numerical Analysis SIAMJO|SIAM J. Optim.=SIAM J. Optimization|SIAM Journal on Optimization SIAMJSC|SIAM J. Sci. Comput.=SIAM J. Sci. Comp.|SIAM Journal on Scientific Computing SIAMJSSC|SIAM J. Sci. Stat. Comput.|SIAM Journal on Scientific and Statistical Computing SIAMR|SIAM Rev.|SIAM Review SIFQS|Sens. Instrum. Food Qual. Saf.|Sensing and Instrumentation for Food Quality and Safety SIG|Symmetry Integr. Geom.|Symmetry Integrability and Geometry-Methods and Applications SIGMODR|SIGMOD Rec.|SIGMOD Record SIUS|Swarm Intell. US|Swarm Intelligence SJ|Sci. Justice|Science & Justice=Science & Justice: Journal of the Forensic Science Society SJ1|Spine J.|Spine Journal=The Spine Journal SJ2|Stata J.|Stata Journal=The Stata Journal SJBS|Saudi J. Biol. Sci.|Saudi Journal of Biological Sciences SJCLI|Scand. J. Clin. Lab. Invest.=Scand. J. Clin. Lab. Inv.|Scandinavian Journal of Clinical & Laboratory Investigation=Scandinavian Journal of Clinical and Laboratory Investigation SJCLIS|Scand. J. Clin. Lab. Invest. Suppl.|Scandinavian Journal of Clinical and Laboratory Investigation. Supplementum SJCS|Scand. J. Caring Sci.=Scand. J. Caring Sciences|Scandinavian Journal of Caring Sciences SJG|Saudi J. Gastroenterol.=Saudi J. Gastroentero.|Saudi Journal of Gastroenterology SJG1|Scand. J. Gastroenterol.=Scand. J. Gastroentero.|Scandinavian Journal of Gastroenterology SJGS|Scand. J. Gastroenterol. Suppl.|Scandinavian Journal of Gastroenterology. Supplement SJI|Scand. J. Immunol.|Scandinavian Journal of Immunology SJKDT|Saudi J. Kidney Dis. Transpl.|Saudi Journal of Kidney Diseases and Transplantation SJMSS|Scand. J. Med. Sci. Sports=Scand. J. Med. Sci. Spor.|Scandinavian Journal of Medicine & Science in Sports SJOT|Scand. J. Occup. Ther.|Scandinavian Journal of Occupational Therapy SJP|Scand. J. Pain|Scandinavian Journal of Pain SJP1|Scand. J. Psychol.|Scandinavian Journal of Psychology SJP2|Span. J. Psychol.|Spanish Journal of Psychology=The Spanish Journal of Psychology SJPH|Scand. J. Public Health=Scand. J. Public Healt.|Scandinavian Journal of Public Health SJPHC|Scand. J. Prim. Health Care=Scand. J. Primary Health Care|Scandinavian Journal of Primary Health Care SJR|Scand. J. Rheumatol.|Scandinavian Journal of Rheumatology SJRS|Scand. J. Rheumatol. Suppl.|Scandinavian Journal of Rheumatology. Supplement SJS|Scand. J. Statist.|Scandinavian Journal of Statistics SJS1|Scand. J. Surg.|Scandinavian Journal of Surgery SJTREM|Scand. J. Trauma Resusc. Emerg. Med.|Scandinavian Journal of Trauma, Resuscitation and Emergency Medicine SJU|Scand. J. Urol.|Scandinavian Journal of Urology SJWEH|Scand. J. Work Environ. Health=Scand. J. Work Env. Hea.|Scandinavian Journal of Work, Environment & Health SL|Spectrosc. Lett.|Spectroscopy Letters=Spectroscopy Letters: An International Journal for Rapid Communication SL1|Stud. Log.=Stud. Logica|Studia Logica SLASD|SLAS Discov.|SLAS Discovery=SLAS Discovery: Advancing Life Sciences R & D SLAST|SLAS Technol.|SLAS Technology SLD|Semin. Liver Dis.|Seminars in Liver Disease SLEPT|Surg. Laparosc. Endosc. Percutan. Tech.=Surg. Laparosc. Endosc. Percutan.|Surgical Laparoscopy, Endoscopy & Percutaneous Techniques SLR|Stanford Law Rev.|Stanford Law Review SLTB|Suicide Life Threat. Behav.|Suicide & Life-Threatening Behavior SM|Sb. Math.|Sbornik Mathematics SM1|Skelet. Muscle|Skeletal Muscle SM2|Sleep Med.|Sleep Medicine SM3|Soft Matter|Soft Matter SM4|Sports Med.=Sport. Med.|Sports Medicine SM5|Stat. Med.|Statistics in Medicine SM6|Stat. Methodol.|Statistical Methodology SM7|Stat. Modelling=Stat. Model.|Statistical Modelling SM8|Stoch. Models|Stochastic Models SM9|Stud. Math.|Studia Mathematica SM10|Superlattices Microstruct.=Superlattice. Microstruct.|Superlattices and Microstructures SM11|Synth. Met.=Synthetic Met.|Synthetic Metals SMA|Sports Med. Arthrosc.=Sports Med. Arthrosc. Rev.|Sports Medicine and Arthroscopy Review SMA1|Stat. Methods Appt.|Statistical Methods & Applications SMA2|Surv. Math. Appl.|Surveys in Mathematics and its Applications SMAG|Stat. Method. Appl. Ger|Statistical Methods and Applications SMC|Sleep Med. Clin.|Sleep Medicine Clinics SMJ|Saudi Med. J.|Saudi Medical Journal SMJ1|Scott. Med. J.=Scot. Med. J.|Scottish Medical Journal SMJ2|Singapore Med. J.=Singap. Med. J.|Singapore Medical Journal SMJ3|South. Med. J.=Southern Med. J.|Southern Medical Journal SMJET|Sib. Math. J. Engl. Tr.|Siberian Mathematical Journal SMMR|Stat. Methods Med. Res.|Statistical Methods in Medical Research SMNS|Sel. Math. New Ser.|Selecta Mathematica-New Series SMPT|Simul. Model. Pract. Theory=Simul. Model. Pract. Th.|Simulation Modelling Practice and Theory SMQ|Sante Ment. Que.|Santé Mentale Au Québec SMR|Semin. Musculoskelet. Radiol.=Semin. Musculoskel. R.|Seminars in Musculoskeletal Radiology SMR1|Sex. Med. Rev.|Sexual Medicine Reviews SMR2|Sleep Med. Rev.|Sleep Medicine Reviews SMR3|Sociol. Methods Res.=Sociol. Method. Res.|Sociological Methods & Research SMR4|Somatosens. Mot. Res.=Somatosens. Motor Res.|Somatosensory & Motor Research=Somatosensory and Motor Research SMW|Swiss Med. Wkly.|Swiss Medical Weekly SN|Semin. Nephrol.|Seminars in Nephrology SN1|Semin. Neurol.|Seminars in Neurology SN2|Stat. Neerl.|Statistica Neerlandica SNM|Semin. Nucl. Med.|Seminars in Nuclear Medicine SO|Semin. Oncol.|Seminars in Oncology SO1|Semin. Ophthalmol.|Seminars in Ophthalmology SO2|Surg. Oncol.|Surgical Oncology=Surgical Oncology-Oxford SO3|Surv. Ophthalmol.|Survey of Ophthalmology SOCNA|Surg. Oncol. Clin. N. Am.|Surgical Oncology Clinics of North America SON|Semin. Oncol. Nurs.|Seminars in Oncology Nursing SORD|Surg. Obes. Relat. Dis.|Surgery for Obesity and Related Diseases SORTSORT|SORT Stat. Oper. Res. Trans.|SORT-Statistics and Operations Research Transactions SP|Sante Publique|Santé Publique: Revue Multidisciplinaire Pour la Recherche et L'action SP1|Sci. Program.=Sci. Programming Neth.|Scientific Programming SP2|Semin. Perinatol.|Seminars in Perinatology SP3|Signal Processing=Signal Process.|Signal Processing SP4|Soins Psychiatr.|Soins. Psychiatrie SP5|Stat. Pap.|Statistical Papers SP6|Syst. Parasitol.|Systematic Parasitology SPC|Surg. Pathol. Clin.|Surgical Pathology Clinics SPE|Softw. Pract. Exp.=Software Pract. Exper.|Software: Practice & Experience SPL|Stat. Probab. Lett.=Statist. Probab. Lett.|Statistics & Probability Letters SPM|Salud Publica Mex.=Salud Publica Mexico|Salud Pública de México SPMJ|St Petersb. Math. J.|St Petersburg Mathematical Journal SPN|Semin. Pediatr. Neurol.|Seminars in Pediatric Neurology SPP|Skin Pharmacol. Physiol.=Skin Pharmacol. Phys.|Skin Pharmacology and Physiology SPP1|Soins Pediatr. Pueric.|Soins. Pédiatrie, Puériculture SPQ|Sch. Psychol. Q.=School Psychol. Quart.|School Psychology Quarterly SPR|Sep. Purif. Rev.|Separation and Purification Reviews SPS|Semin. Pediatr. Surg.|Seminars in Pediatric Surgery SPT|Sep. Purif. Technol.|Separation and Purification Technology SPTA|Stoch. Process. Their Appl.=Stoch. Proc. Appl.|Stochastic Processes and their Applications SQJ|Software Qual. J.|Software Quality Journal SQUMJ|Sultan Qaboos Univ. Med. J.|Sultan Qaboos University Medical Journal SR|Schizophr. Res.|Schizophrenia Research SR1|Sci. Rep.=Sci. Rep. UK|Scientific Reports SR2|Semin. Roentgenol.|Seminars in Roentgenology SR3|Sensor Rev.|Sensor Review SR4|Skeletal Radiol.|Skeletal Radiology SR5|Soft Robot.|Soft Robotics SR6|Surv. Rev.|Survey Review SR7|Syst. Rev.|Systematic Reviews SRA|Surg. Radiol. Anat.=Surg. Radiol. Anatomy|Surgical and Radiologic Anatomy SRCCM|Semin. Respir. Crit. Care Med.=Semin. Resp. Crit. Care|Seminars in Respiratory and Critical Care Medicine SRH|Sex. Reprod. Healthc.|Sexual & Reproductive Healthcare SRL|Surf. Rev. Letters|Surface Review and Letters SRM|Semin. Reprod. Med.|Seminars in Reproductive Medicine SRO|Semin. Radiat. Oncol.|Seminars in Radiation Oncology SRR|Small Ruminant Res.|Small Ruminant Research SRT|Skin Res. Technol.|Skin Research and Technology SS|Sci. Signal.|Science Signaling SS1|Spat. Stat.=Spat. Stat. Neth.|Spatial Statistics SS2|Spin Singapore|Spin SS3|Sportverletz. Sportschaden=Sportverletz. Sportsc.|Sportverletzung-Sportschaden=Sportverletzung Sportschaden: Organ Der Gesellschaft für Orthopädisch-Traumatologische Sportmedizin SS4|Stat. Sci.=Statist. Sci.|Statistical Science=Statistical Science: A Review Journal of the Institute of Mathematical Statistics SS5|Stat. Sin.=Statist. Sinica|Statistica Sinica SS6|Stat. Surv.|Statistics Surveys SS7|Surf. Sci.=Surface Sci.|Surface Science SS8|Synthesis Stuttgart|Synthesis-Stuttgart SSA|Spectrosc. Spectr. Anal.|Spectroscopy and Spectral Analysis SSC|Solid State Commun.|Solid State Communications SSE|Solid State Electron.|Solid-State Electronics SSE1|Spat. Spatiotemporal Epidemiol.|Spatial and Spatio-Temporal Epidemiology SSI|Solid State Ion.|Solid State Ionics SSL|Semin. Speech Lang.|Seminars in Speech and Language SSM|Softw. Syst. Model.|Software and Systems Modeling SSMH|Stud. Sci. Math. Hung.|Studia Scientiarum Mathematicarum Hungarica SSNMR|Solid State Nucl. Magn. Reson.=Solid State Nucl. Mag.|Solid State Nuclear Magnetic Resonance SSP|Solid State Physics|Solid State Physics SSR|Surf. Sci. Rep.|Surface Science Reports SSS|Solid State Sci.|Solid State Sciences SSSAJ|Soil Sci. Soc. Am. J.=Soil Sci. Soc. Amer. J.|Soil Science Society of America Journal=Soil Science Society of America Journal. Soil Science Society of America SST|Semicond. Sci. Technol.=Semicond. Sci. Tech.|Semiconductor Science and Technology SST1|Sep. Sci. Technol.=Separ. Sci. Technol.|Separation Science and Technology SST2|Supercond. Sci. Technol.=Superconduct. Sci. Technol.|Superconductor Science & Technology=Superconductor Science and Technology ST|Suppl. Tumori|I Supplementi di Tumori ST1|Surg. Today|Surgery Today STCS|Semin. Thorac. Cardiovasc. Surg.|Seminars in Thoracic and Cardiovascular Surgery STCSPCSA|Semin. Thorac. Cardiovasc. Surg. Pediatr. Card. Surg. Annu.|Seminars in Thoracic and Cardiovascular Surgery. Pediatric Cardiac Surgery Annual STD|Sex. Transm. Dis.|Sexually Transmitted Diseases STE|Sci. Total Environ.=Sci. Total Envir.|Science of the Total Environment=The Science of the Total Environment STH|Semin. Thromb. Hemost.=Semin. Thromb. Hemostasis|Seminars in Thrombosis and Hemostasis STI|Sex. Transm. Infect.|Sexually Transmitted Infections STI1|Surg. Technol. Int.|Surgical Technology International STL|Skin Therapy Lett.|Skin Therapy Letter STM|Sci. Transl. Med.|Science Translational Medicine STSMSI|Simul. Trans. Soc. Model. Simul. I.|Simulation-Transactions of the Society for Modeling and Simulation International STVR|Softw. Test. Verif. Reliab.|Software Testing Verification & Reliability SUBBC|Stud. Univ. Babes Bolyai Chem.|Studia Universitatis Babes-Bolyai Chemia SUCTMR|Semin. Ultrasound CT MR|Seminars in Ultrasound, CT, and MR SUM|Subst. Use Misuse|Substance Use & Misuse SUS|Spectroscopy US|Spectroscopy SVS|Semin. Vasc. Surg.|Seminars in Vascular Surgery SVVA|Set Valued Var. Anal.|Set-Valued and Variational Analysis SW|Semant. Web|Semantic Web T|Talanta|Talanta T1|Technometrics|Technometrics T2|Terminology|Terminology T3|Tetrahedron|Tetrahedron T4|Theranostics|Theranostics T5|Therapie|Thérapie T6|Theriogenology|Theriogenology T7|Thorax|Thorax T8|Thyroid|Thyroid T9|Torture|Torture: Quarterly Journal on Rehabilitation of Torture Victims and Prevention of Torture T10|Toxicology|Toxicology T11|Toxicon|Toxicon T12|Traffic|Traffic T13|Transcription|Transcription T14|Transfusion|Transfusion T15|Transplantation|Transplantation T16|Trials|Trials T17|Tumori|Tumori TA|Thermochim. Acta|Thermochimica Acta TA1|Thermophys. Aeromechanics|Thermophysics and Aeromechanics TA2|Topol. Appl.|Topology and its Applications TAC|Theor. Appl. Climatol.|Theoretical and Applied Climatology TAC1|Theory Appl. Categ.|Theory and Applications of Categories TAC2|Trends Analyt. Chem.|Trends in Analytical Chemistry TACCA|Trans. Am. Clin. Climatol. Assoc.|Transactions of the American Clinical and Climatological Association TACD|Ther. Adv. Cardiovasc. Dis.|Therapeutic Advances in Cardiovascular Disease TACTAC|TrAC Trends Anal. Chem.|TrAC-Trends in Analytical Chemistry TAD|Ther. Apher. Dial.|Therapeutic Apheresis and Dialysis TAG|Theor. Appl. Genet.|Theoretical and Applied Genetics=TAG. Theoretical and Applied Genetics. Theoretische und Angewandte Genetik TAHP|Trop. Anim. Health Prod.=Trop. Anim. Health Pro.|Tropical Animal Health and Production TAM|Top. Antivir. Med.|Topics in Antiviral Medicine TAMS|Trans. Am. Math. Soc.=Trans. Amer. Math. Soc.|Transactions of the American Mathematical Society TAOS|Trans. Am. Ophthalmol. Soc.|Transactions of the American Ophthalmological Society TAP|Top. Appl. Phys.|Topics in Applied Physics TAP1|Toxicol. Appl. Pharmacol.=Toxicol. Appl. Pharm.|Toxicology and Applied Pharmacology TARD|Ther. Adv. Respir. Dis.|Therapeutic Advances in Respiratory Disease TAS|Transfus. Apher. Sci.|Transfusion and Apheresis Science TB|Theor. Biosci.|Theory in Biosciences TB1|Tissue Barriers|Tissue Barriers TB2|Trends Biotechnol.=Trends Biotech.|Trends in Biotechnology TB3|Trop. Biomed.|Tropical Biomedicine TB4|Tumour Biol.|Tumour Biology: The Journal of the International Society for Oncodevelopmental Biology and Medicine TBF|Theor. Biol. Forum|Theoretical Biology Forum TBM|Transl. Behav. Med.|Translational Behavioral Medicine TBMM|Theor. Biol. Med. Model.|Theoretical Biology & Medical Modelling=Theoretical Biology and Medical Modelling TBS|Trends Biochem. Sci.|Trends in Biochemical Sciences TC|Tech. Coloproctol.=Tech. Coloproctology|Techniques in Coloproctology TC1|Technol. Cult.=Technol. Culture|Technology and Culture TC2|Theory Comput.|Theory of Computing TC3|Thorac. Cancer|Thoracic Cancer TC4|Tissue Cell|Tissue & Cell TC5|Tob. Control|Tobacco Control TC6|Top. Catal.=Topic. Catalysis|Topics in Catalysis TC7|Trends Cancer|Trends in Cancer TCA|Theor. Chem. Acc.|Theoretical Chemistry Accounts TCA1|Theor. Chim. Acta|Theoretica Chimica Acta TCAM|Top. Companion Anim. Med.=Top. Companion Anim. M.|Topics in Companion Animal Medicine TCB|Transfus. Clin. Biol.=Transfus. Clin. Biologique|Transfusion Clinique et Biologique=Transfusion Clinique et Biologique: Journal de la Société Française de Transfusion Sanguine TCB1|Trends Cell Biol.=Tr. Cell Biol.|Trends in Cell Biology TCC|Top. Curr. Chem.=Topics Curr. Chem.|Topics in Current Chemistry=Topics in Current Chemistry-Series TCFD|Theor. Comput. Fluid Dyn.=Theor. Comput. Fluid Dynamics|Theoretical and Computational Fluid Dynamics TCM|Trends Cardiovasc. Med.=Trends Cardiovas. Med.|Trends in Cardiovascular Medicine TCR|Transl. Cancer Res.|Translational Cancer Research TCRT|Technol. Cancer Res. Treat.=Technol. Cancer Res. T.|Technology in Cancer Research & Treatment TCS|Theor. Comput. Sci.|Theoretical Computer Science TCS1|Theory Comput. Syst.=Theor. Comput. Syst.|Theory of Computing Systems TCS2|Thorac. Cardiovasc. Surg.=Thorac. Cardiov. Surg.|Thoracic and Cardiovascular Surgeon=The Thoracic and Cardiovascular Surgeon TCS3|Top. Cogn. Sci.|Topics in Cognitive Science TD|Ther. Deliv.|Therapeutic Delivery TD1|Trop. Doct.|Tropical Doctor TDM|Ther. Drug Monit.|Therapeutic Drug Monitoring TEAC|Trends Environ. Anal. Chem.|Trends in Environmental Analytical Chemistry TEC|Theor. Exp. Chem.|Theoretical and Experimental Chemistry TED|Transbound. Emerg. Dis.=Transboundary Emerg. Dis.|Transboundary and Emerging Diseases TEE|Trace Elem. Electrolytes|Trace Elements and Electrolytes TEM|Trends Endocrinol. Metab.=Trends Endocrin. Met.|Trends in Endocrinology and Metabolism TEPA|Tissue Eng. Part A=Tissue Eng. Pt. A|Tissue Engineering. Part A TEPBR|Tissue Eng. Part B Rev.=Tissue Eng. Part B Re.|Tissue Engineering Part B: Reviews TEPCM|Tissue Eng. Part C Methods=Tissue Eng. Part C Me.|Tissue Engineering Part C: Methods TERM|Tissue Eng. Regen. Med.|Tissue Engineering and Regenerative Medicine TETT|Trans. Emerg. Telecommun. Techno.|Transactions on Emerging Telecommunications Technologies TFST|Trends Food Sci. Technol.=Trends Food Sci. Tech.|Trends in Food Science & Technology TG|Transform. Groups|Transformation Groups TG1|Trends Genet.|Trends in Genetics TGG|Tijdschr. Gerontol. Geriatr.|Tijdschrift Voor Gerontologie en Geriatrie TGG1|Trends Glycosci. Glycotechnol.=Trends Glycosci. Glyc.|Trends in Glycoscience and Glycotechnology TH|Thromb. Haemost.=Thromb. Haemostasis|Thrombosis and Haemostasis TH1|Trends Hear.|Trends in Hearing THC|Technol. Health Care|Technology and Health Care THIJ|Tex. Heart Inst. J.=Tex. Heart I. J.|Texas Heart Institute Journal THTM|Ther. Hypothermia Temp. Manag.=Ther. Hypothermia Tem.|Therapeutic Hypothermia and Temperature Management THUES|Tech. Hand Up. Extrem. Surg.|Techniques in Hand & Upper Extremity Surgery TI|Transpl. Immunol.|Transplant Immunology TI1|Transpl. Int.=Transplant Int.|Transplant International TI2|Trends Immunol.|Trends in Immunology TID|Transpl. Infect. Dis.|Transplant Infectious Disease TIH|Toxicol. Ind. Health|Toxicology and Industrial Health TIP|Traffic Inj. Prev.|Traffic Injury Prevention TIRS|Ther. Innov. Regul. Sci.|Therapeutic Innovation & Regulatory Science TIV|Toxicol. In. Vitro=Toxicol. Vitro|Toxicology in Vitro=Toxicology in Vitro: An International Journal Published in Association with BIBRA TJB|Turk J. Biochem.|Turkish Journal of Biochemistry-Turk Biyokimya Dergisi TJB1|Turk. J. Biol.|Turkish Journal of Biology TJC|Turk. J. Chem.|Turkish Journal of Chemistry TJECM|Tokai J. Exp. Clin. Med.|The Tokai Journal of Experimental and Clinical Medicine TJEH|Telemed. J. E Health|Telemedicine Journal and E-Health TJEM|Tohoku J. Exp. Med.|Tohoku Journal of Experimental Medicine=The Tohoku Journal of Experimental Medicine TJG|Turk. J. Gastroenterol.|Turkish Journal of Gastroenterology=The Turkish Journal of Gastroenterology TJH|Turk. J. Haematol.|Turkish Journal of Haematology TJM|Taiwan. J. Math.|Taiwanese Journal of Mathematics TJM1|Tokyo J. Math.|Tokyo Journal of Mathematics TJM2|Turk. J. Math.|Turkish Journal of Mathematics TJMS|Turk. J. Med. Sci.|Turkish Journal of Medical Sciences TJOG|Taiwan. J. Obstet. Gynecol.=Taiwan. J. Obstet. Gyne.|Taiwanese Journal of Obstetrics & Gynecology TJP|Turk. J. Pediatr.=Turkish J. Pediatr.|Turkish Journal of Pediatrics=The Turkish Journal of Pediatrics TKDA|Turk Kardiyol. Dern. Ars.|Turk Kardiyoloji Dernegi Arsivi: Turk Kardiyoloji Derneginin Yayin Organidir=Türk Kardiyoloji Derneği Arşivi: Türk Kardiyoloji Derneğinin Yayın Organıdır TL|Tetrahedron Lett.|Tetrahedron Letters TL1|Toxicol. Lett.|Toxicology Letters TLM|Teach. Learn. Med.|Teaching and Learning in Medicine TM|Tex. Med.|Texas Medicine TM1|Transfus. Med.=Transfusion Med.|Transfusion Medicine TM2|Trends Microbiol.|Trends in Microbiology TM3|Tunis. Med.|La Tunisie Médicale TMB|Theor. Med. Bioeth.|Theoretical Medicine and Bioethics TMC|Transition Met. Chem.|Transition Metal Chemistry TMID|Travel Med. Infect. Dis.=Travel Med. Infect. Di.|Travel Medicine and Infectious Disease TMIH|Trop. Med. Int. Health|Tropical Medicine & International Health=Tropical Medicine & International Health: TM & IH TMJ|Tohoku Math. J.|Tohoku Mathematical Journal TMM|Toxicol. Mech. Methods=Toxicol. Mech. Method.|Toxicology Mechanisms and Methods TMM1|Trends Mol. Med.|Trends in Molecular Medicine TMNA|Topol. Methods Nonlinear Anal.=Topol. Method. Nonl. An.|Topological Methods in Nonlinear Analysis TMPET|Theor. Math. Phys. Engl. Tr.|Theoretical and Mathematical Physics TMR|Transfus. Med. Rev.|Transfusion Medicine Reviews TMRI|Top. Magn. Reson. Imaging|Topics in Magnetic Resonance Imaging TN|Trends Neurosci.|Trends in Neurosciences TN1|Turk. Neurosurg.|Turkish Neurosurgery TNL|Tidsskr. Nor. Laegeforen.|Tidsskrift for Den Norske Lægeforening: Tidsskrift for Praktisk Medicin, NY Række=Tidsskrift for Den Norske Laegeforening: Tidsskrift for Praktisk Medicin, NY Raekke TO|Target. Oncol.|Targeted Oncology TOC|Top. Organomet. Chem.=Top. Organometal. Chem.|Topics in Organometallic Chemistry TP|Tech. Phys.|Technical Physics TP1|Tijdschr. Psychiatr.|Tijdschrift Voor Psychiatrie TP2|Toxicol. Pathol.|Toxicologic Pathology TP3|Transcult. Psychiatry|Transcultural Psychiatry TP4|Transl. Psychiatry=Transl. Psychiatr.|Translational Psychiatry TP5|Transplant. Proc.=Transpl. P.|Transplantation Proceedings TP6|Tree Physiol.|Tree Physiology TP7|Trends Parasitol.|Trends in Parasitology TPAET|Theor. Probab. Appl. Engl. Tr.|Theory of Probability and its Applications TPB|Theor. Popul. Biol.=Theor. Pop. Biol.|Theoretical Population Biology TPD|Turk Patoloji Derg.|Türk Patoloji Dergisi TPD1|Turkiye Parazitol. Derg.|Türkiye Parazitolojii Dergisi TPL|Tech. Phys. Lett.|Technical Physics Letters TPLP|Theory Pract. Log. Program.|Theory and Practice of Logic Programming TPM|Transp. Porous Media=Transport Porous Med.|Transport in Porous Media TPP|Trends Psychiatry Psychother.|Trends in Psychiatry and Psychotherapy TPS|Trends Pharmacol. Sci.|Trends in Pharmacological Sciences TPS1|Trends Plant Sci.|Trends in Plant Science TQMP|Tutor. Quant. Methods Psychol.|Tutorials in Quantitative Methods for Psychology TR|Technol. Rev.|Technology Review TR1|Thromb. Res.|Thrombosis Research TR2|Transgenic Res.|Transgenic Research TR3|Transl. Res.|Translational Research=Translational Research: The Journal of Laboratory and Clinical Medicine TRHG|Twin Res. Hum. Genet.|Twin Research and Human Genetics TRS|Toxic. Rep. Ser.|Toxicity Report Series TRSTMH|Trans. R. Soc. Trop. Med. Hyg.=Trans. Roy. Soc. Trop. Med. Hyg.|Transactions of the Royal Society of Tropical Medicine and Hygiene TS|Telecommun. Syst.|Telecommunication Systems TS1|Test Spain|Test TS2|Toxicol. Sci.|Toxicological Sciences TSC|Thorac. Surg. Clin.|Thoracic Surgery Clinics TSCIR|Top. Spinal Cord Inj. Rehabil.|Topics in Spinal Cord Injury Rehabilitation TSD|Tenside Surfactants Deterg.|Tenside Surfactants Detergents TSR|Top. Stroke Rehabil.|Topics in Stroke Rehabilitation TSR1|Transl. Stroke Res.|Translational Stroke Research TST|Tsinghua Sci. Technol.=Tsinghua Sci. Techn.|Tsinghua Science and Technology TT|Tuberk. Toraks|Tüberküloz Ve Toraks TTBD|Ticks Tick Borne Dis.|Ticks and Tick-Borne Diseases TU|Ther. Umsch.|Therapeutische Umschau. Revue Thérapeutique TVA|Trauma Violence Abuse=Trauma Violence Abus.|Trauma, Violence & Abuse TVIR|Tech. Vasc. Interv. Radiol.|Techniques in Vascular and Interventional Radiology U|Uirusu|Uirusu U1|Uisahak|Ŭi Sahak U2|Ultramicroscopy|Ultramicroscopy U3|Ultrasonics|Ultrasonics U4|Unfallchirurg|Der Unfallchirurg U5|Urolithiasis|Urolithiasis U6|Urologia|Urologia U7|Urology|Urology UA|Urologe A|Der Urologe. Ausg. A UAIS|Universal Access Inf. Soc.|Universal Access in the Information Society UCNA|Urol. Clin. North Am.|The Urologic Clinics of North America UHM|Undersea Hyperb. Med.|Undersea & Hyperbaric Medicine: Journal of the Undersea and Hyperbaric Medical Society, Inc UI|Ultrason. Imaging|Ultrasonic Imaging UI1|Urol. Int.|Urologia Internationalis UJ|Urol. J.|Urology Journal UJMS|Ups. J. Med. Sci.=Upsala J. Med. Sci.|Upsala Journal of Medical Sciences UJPO|Ukr. J. Phys. Opt.|Ukrainian Journal of Physical Optics UL|Ugeskr. Laeg.|Ugeskrift for Laeger UM|Utilitas Mathematica|Utilitas Mathematica UMB|Ultrasound Med. Biol.|Ultrasound in Medicine & Biology=Ultrasound in Medicine and Biology UMJ|Ukr. Math. J.|Ukrainian Mathematical Journal UMJ1|Ulster Med. J.|The Ulster Medical Journal UMUAI|User Model. User Adapt. Interact.=User Model. User Adapt. Intera.|User Modeling and User-Adapted Interaction UO|Urol. Oncol.|Urologic Oncology UOG|Ultrasound Obstet. Gynecol.=Ultrasound Obstet. Gyn.|Ultrasound in Obstetrics & Gynecology UP|Ultrastruct. Pathol.|Ultrastructural Pathology UPBSBA|Univ. Politeh. Buchar. Sci. Bul. A|University Politehnica of Bucharest Scientific Bulletin-Series A-Applied Mathematics and Physics UQ|Ultrasound Q.|Ultrasound Quarterly US|Ultrason. Sonochem.=Ultrason. Sonochemistry|Ultrasonics Sonochemistry US1|Updates Surg.|Updates in Surgery USAMDJ|US Army Med. Dep. J.|US Army Medical Department Journal V|Vaccine|Vaccine V1|Vascular|Vascular V2|Vertex|Vertex: Revista Argentina de Psiquiatriá V3|Virology|Virology V4|Virulence|Virulence V5|Viruses|Viruses VA|Virchows Arch.=Virchows Archiv|Virchows Archiv: An International Journal of Pathology VAA|Vet. Anaesth. Analg.|Veterinary Anaesthesia and Analgesia VAW|Violence Against Women=Violence Against Wom.|Violence Against Women VBZD|Vector Borne Zoonotic Dis.=Vector Borne Zoonot.|Vector Borne and Zoonotic Diseases VC|Veh. Commun.|Vehicular Communications VC1|Visual Comput.|Visual Computer VCNAEAP|Vet. Clin. North Am. Exot. Anim. Pract.|The Veterinary Clinics of North America. Exotic Animal Practice VCNAEP|Vet. Clin. North Am. Equine Pract.|The Veterinary Clinics of North America. Equine Practice VCNAFAP|Vet. Clin. North Am. Food Anim. Pract.|The Veterinary Clinics of North America. Food Animal Practice VCNASAP|Vet. Clin. North Am. Small Anim. Pract.|The Veterinary Clinics of North America. Small Animal Practice VCO|Vet. Comp. Oncol.|Veterinary and Comparative Oncology VCOT|Vet. Comp. Orthop. Traumatol.|Veterinary and Comparative Orthopaedics and Traumatology: V.C.O.T VCP|Vet. Clin. Pathol.=Vet. Clin. Path.|Veterinary Clinical Pathology VD|Vet. Dermatol.|Veterinary Dermatology VES|Vasc. Endovascular Surg.=Vasc. Endovasc. Surg.|Vascular and Endovascular Surgery VG|Virus Genes|Virus Genes VH|Value Health|Value in Health=Value in Health: The Journal of the International Society for Pharmacoeconomics and Outcomes Research VH1|Vitam. Horm.|Vitamins and Hormones VHRI|Value Health Reg. Issues|Value in Health Regional Issues VHRM|Vasc. Health Risk Manag.|Vascular Health and Risk Management VHS|Vital Health Stat. 2|Vital and Health Statistics. Series 2, Data Evaluation and Methods Research VI|Vet. Ital.|Veterinaria Italiana VI1|Viral Immunol.|Viral Immunology VII|Vet. Immunol. Immunopathol.=Vet. Immunol. Immunop.|Veterinary Immunology and Immunopathology VJ|Vet. J.|Veterinary Journal=The Veterinary Journal VJ1|Virol. J.|Virology Journal VJ2|Vldb J.|Vldb Journal VM|Vasc. Med.|Vascular Medicine VM1|Vet. Microbiol.|Veterinary Microbiology VMS|Vet. Med. Sci.|Veterinary Medicine and Science VN|Vis. Neurosci.=Visual Neurosci.|Visual Neuroscience VO|Vestn. Oftalmol.|Vestnik Oftalmologii VO1|Vet. Ophthalmol.|Veterinary Ophthalmology VP|Vascul. Pharmacol.=Vasc. Pharmacol.|Vascular Pharmacology VP1|Vet. Parasitol.|Veterinary Parasitology VP2|Vet. Pathol.|Veterinary Pathology VQ|Vet. Q.|The Veterinary Quarterly VR|Vet. Rec.|Veterinary Record=The Veterinary Record VR1|Vet. Res.|Veterinary Research VR2|Virtual Real.=Virtual Real. London|Virtual Reality VR3|Virus Res.|Virus Research VR4|Vision Res.|Vision Research VRC|Vet. Res. Commun.|Veterinary Research Communications VRU|Vet. Radiol. Ultrasound=Vet. Radiol. Ultrasoun.|Veterinary Radiology & Ultrasound VS|Vet. Surg.=Vet. Surgery|Veterinary Surgery VS1|Vib. Spectrosc.|Vibrational Spectroscopy VS2|Virol. Sin.|Virologica Sinica VS3|Vox Sang.|Vox Sanguinis VV|Violence Vict.=Violence Victims|Violence and Victims VV1|Vopr. Virusol.|Voprosy Virusologii W|Work|Work-A Journal of Prevention Assessment & Rehabilitation=Work: A Journal of Prevention, Assessment, and Rehabilitation W1|Wounds=Wounds Compend. Clin. Res. Pract.|Wounds: A Compendium of Clinical Research and Practice WAJM|West Afr. J. Med.|West African Journal of Medicine WASET|World Acad. Sci. Eng. Technol.|World Academy of Science, Engineering and Technology WB|Women Birth|Women and Birth=Women and Birth: Journal of the Australian College of Midwives WCMC|Wirel. Commun. Mob. Comput.|Wireless Communications & Mobile Computing WEBN|Worldviews Evid. Based Nurs.=Worldv. Evid. Based Nu.|Worldviews on Evidence-Based Nursing WEM|Wilderness Environ. Med.=Wild. Environ. Med.|Wilderness & Environmental Medicine WER|Water Environ. Res.|Water Environment Research=Water Environment Research: A Research Publication of the Water Environment Federation WH|Women Health|Women & Health WHI|Womens Health Issues=Women Health Iss.|Women's Health Issues WHOSEAJPH|WHO South East Asia J. Public Health|WHO South-East Asia Journal of Public Health WHP|World Health Popul.|World Health & Population WHS|Workplace Health Saf.|Workplace Health & Safety WIRCMS|Wiley Interdiscip. Rev. Comput. Mol. Sci.=Wiley Interdiscip. Rev. Comput.|Wiley Interdisciplinary Reviews. Computational Molecular Science WIRCS|Wiley Interdiscip. Rev. Cogn. Sci.=Wiley Interdiscip. Rev. Cogn. Sc.|Wiley Interdisciplinary Reviews. Cognitive Science WIRCS1|Wiley Interdiscip. Rev. Comput. Stat.|Wiley Interdisciplinary Reviews. Computational Statistics WIRDB|Wiley Interdiscip. Rev. Dev. Biol.=Wiley Interdiscip. Rev. Dev. Bio.|Wiley Interdisciplinary Reviews. Developmental Biology WIRDMKD|Wiley Interdiscip. Rev. Data Min. Knowl. Discov.=Wiley Interdiscip. Rev. Data Mi.|Wiley Interdisciplinary Reviews. Data Mining and Knowledge Discovery WIRNN|Wiley Interdiscip. Rev. Nanomed. Nanobiotechnol.=Wiley Interdiscip. Rev. Nanomed.|Wiley Interdisciplinary Reviews. Nanomedicine and Nanobiotechnology WIRRNA|Wiley Interdiscip. Rev. RNA=Wires RNA|Wiley Interdisciplinary Reviews. RNA WIRSBM|Wiley Interdiscip. Rev. Syst. Biol. Med.=Wiley Interdiscip. Rev. Syst. Bi.|Wiley Interdisciplinary Reviews. Systems Biology and Medicine WJBP|World J. Biol. Psychiatry=World J. Biol. Psychia.|World Journal of Biological Psychiatry=The World Journal of Biological Psychiatry WJEM|West. J. Emerg. Med.|The Western Journal of Emergency Medicine WJES|World J. Emerg. Surg.|World Journal of Emergency Surgery WJG|World J. Gastroenterol.=World J. Gastroentero.|World Journal of Gastroenterology WJMB|World J. Microbiol. Biotechnol.=World J. Microb. Biot.|World Journal of Microbiology & Biotechnology=World Journal of Microbiology and Biotechnology WJNR|West. J. Nurs. Res.=Western J. Nurs. Res.|Western Journal of Nursing Research WJP|World J. Pediatr.|World Journal of Pediatrics WJPCHS|World J. Pediatr. Congenit. Heart Surg.|World Journal for Pediatric & Congenital Heart Surgery WJS|World J. Surg.=World J. Surgery|World Journal of Surgery WJSC|World J. Stem Cells|World Journal of Stem Cells WJSO|World J. Surg. Oncol.|World Journal of Surgical Oncology WJU|World J. Urol.|World Journal of Urology WKW|Wien. Klin. Wochenschr.|Wiener Klinische Wochenschrift WM|Waste Manag.=Waste Manage. Oxford|Waste Management WM1|Wave Motion|Wave Motion WMR|Waste Manag. Res.|Waste Management & Research: The Journal of the International Solid Wastes and Public Cleansing Association, ISWA WMW|Wien. Med. Wochenschr.|Wiener Medizinische Wochenschrift WN|Wirel. Netw.|Wireless Networks WN1|World Neurosurg.|World Neurosurgery WPC|Wirel. Pers. Commun.=Wireless Pers. Commun.|Wireless Personal Communications WPSRJ|Western Pac. Surveill. Response J.|Western Pacific Surveillance and Response Journal WR|Water Res.|Water Research WRCM|Waves Random Complex Media|Waves in Random and Complex Media WRND|World Rev. Nutr. Diet.=World Rev. Nutr. Dietet.|World Review of Nutrition and Dietetics WRR|Wound Repair Regen.|Wound Repair and Regeneration WSB|Wildl. Soc. Bull.=Wildlife Soc. Bull.|Wildlife Society Bulletin WST|Water Sci. Technol.|Water Science and Technology=Water Science and Technology: A Journal of the International Association on Water Pollution Research WT|Windows Time|Windows in Time WWW|World Wide Web|World Wide Web-Internet and Web Information Systems X|Xenobiotica|Xenobiotica: The Fate of Foreign Compounds in Biological Systems X1|Xenotransplantation|Xenotransplantation XS|Xray Spectrom.=X Ray Spectrom.|X-Ray Spectrometry Y|Yeast|Yeast YJBM|Yale J. Biol. Med.|The Yale Journal of Biology and Medicine YMI|Yearb. Med. Inform.|Yearbook of Medical Informatics YMJ|Yonsei Med. J.|Yonsei Medical Journal YZ|Yakugaku Zasshi=Yakugaku Zasshi J. Pharm. Soc. J.|Yakugaku Zasshi: Journal of the Pharmaceutical Society of Japan Z|Zebrafish|Zebrafish Z1|Zootaxa|Zootaxa Z2|Zygote|Zygote: The Biology of Gametes and Early Embryos ZAA|Z. Anal. Anwend.|Zeitschrift fur Analysis und Ihre Anwendungen ZAAC|Z. Anorg. Allg. Chem.|Zeitschrift fur Anorganische und Allgemeine Chemie ZAMP|Z. Angew. Math. Phys.|Zeitschrift fur Angewandte Mathematik und Physik=Zeitschrift Fuer Angewandte Mathematik und Physik ZB|Zoo Biol.|Zoo Biology ZC|Zentralbl. Chir.=Zbl Chir.|Zentralblatt für Chirurgie ZEFQG|Z. Evid. Fortbild. Qual. Gesundhwes|Zeitschrift für Evidenz, Fortbildung und Qualität Im Gesundheitswesen ZFCKZZ|Zhonghua Fu Chan Ke Za Zhi|Zhonghua Fu Chan Ke Za Zhi ZG|Z. Gastroenterol.|Zeitschrift für Gastroenterologie ZGG|Z. Gerontol. Geriatr.=Z. Gerontol. Geriatrie|Zeitschrift für Gerontologie und Geriatrie ZGN|Z. Geburtshilfe Neonatol.=Z. Geburtsh. Neonatologie|Zeitschrift für Geburtshilfe und Neonatologie ZK|Z. Kristallogr.|Zeitschrift fur Kristallograhie ZKCM|Z. Kristallogr. Cryst. Mater.=Z. Krist. Cryst. Mater.|Zeitschrift fur Kristallographie. Crystalline Materials ZKJP|Z. Kinder Jugendpsychiatr. Psychother.=Z. Kinder Jugendpsychiat. Psych.|Zeitschrift für Kinder- und Jugendpsychiatrie und Psychotherapie ZKNCS|Z. Krist. New Cryst. Struct.|Zeitschrift fur Kristallographie-New Crystal Structures ZMP|Z. Med. Phys.|Zeitschrift für Medizinische Physik ZNC|Z. Naturforsch. C|Zeitschrift fur Naturforschung Section C: A Journal of Biosciences=Zeitschrift fur Naturforschung. Teil C: Biochemie, Biophysik, Biologie, Virologie ZNCJB|Z. Naturforsch. C J. Biosci.=Z. Naturforsch. C Biosci.|Zeitschrift fur Naturforschung. C, Journal of Biosciences=Zeitschrift für Naturforschung. C, A Journal of Biosciences ZNKZZ|Zhonghua Nei Ke Za Zhi|Zhonghua Nei Ke Za Zhi ZNSA|Z. Naturforsch. Sect. A|Zeitschrift fur Naturforschung Section A: A Journal of Physical Sciences ZOB|Zh. Obshch. Biol.|Zhurnal Obshchei Biologii ZOU|Z. Orthop. Unfall.=Z. Orthop. Unfallchir.|Zeitschrift für Orthopädie und Unfallchirurgie ZPC|Z. Phys. Chem.|Zeitschrift fur Physikalische Chemie=Zeitschrift fur Physikalische Chemie-International Journal of Research in Physical Chemistry & Chemical Physics ZPH|Zoonoses Public Health=Zoonoses Public Hlth.|Zoonoses and Public Health ZPMP|Z. Psychosom. Med. Psychother.=Z. Psychosom. Med. Psyc.|Zeitschrift für Psychosomatische Medizin und Psychotherapie ZR|Z. Rheumatol.|Zeitschrift für Rheumatologie ZR1|Zool. Res.|Zoological Research ZS|Zool. Sci.|Zoological Science ZSYXYXZZ|Zhongguo Shi Yan Xue Ye Xue Za Zhi|Zhongguo Shi Yan Xue Ye Xue Za Zhi ZVNINNB|Zh. Vopr. Neirokhir. Im. N N Burdenko|Zhurnal Voprosy Neĭrokhirurgii Imeni N. N. Burdenko ZXXGBZZ|Zhonghua Xin Xue Guan Bing Za Zhi|Zhonghua Xin Xue Guan Bing Za Zhi ZYXKXYXB|Zhongguo Yi Xue Ke Xue Yuan Xue Bao|Zhongguo Yi Xue Ke Xue Yuan Xue Bao. Acta Academiae Medicinae Sinicae ZYXZZ|Zhonghua Yi Xue Za Zhi|Zhonghua Yi Xue Za Zhi������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/PaxHeaders/contributed_re.txt�����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016401� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.178766136 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/contributed_re.txt����������������������������������������������������������������0000644�0001750�0000144�00000017531�15104461330�020374� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-------------------------------------- cb2Bib Contributed Regular Expressions -------------------------------------- cb2Bib usefulness increases when having a set of reliable regular expressions. It can therefore be interesting to share one's favorite regexps among cb2Bib users. If you have a working -which does not mean perfect- regexp that could benefit other users, please take a moment and fill out the RegExp Submission Form. These regexp will be included into the cb2Bib distribution, as received, without any additional editing. Interested users could then copy/paste needed cb2Bib regexps into their own regexp file. In this way, no much of anybody's time and effort should be needed. To use any of the following regular expressions: - Launch cb2Bib - Edit your Regular Expressions file, Alt+E - Copy and paste the desired regular expressions - Save the Regular Expressions file ===================================================================================================== NOTES: browser [[pdftotxt]] comments [[Regular expession to extract from PDF articles]] Submitted [[L. A. C. Silva]] ----------------------------------------------------------------------------------------------------- # cb2Bib 0.9.2 Pattern: GJI (Preprint) [Geophysical Journal International] article year journal doi title author abstract keywords ^.+, (\d\d\d\d)<NewLine1><NewLine2>.+<NewLine3><NewLine4>(Geophysical Journal International)<NewLine5><NewLine6>.*<NewLine7><NewLine8>.*<NewLine9><NewLine10>doi: (.+)<NewLine11><NewLine12>(.+)<NewLine13>(.+)<NewLine14>.*<NewLine19><NewLine20>SUMMARY (.+)Key words: (.+)<NewLine21>.*$ # cb2Bib 0.9.2 Pattern: GJI [Geophysical Journal International] article journal year volume pages doi title author abstract keywords ^(.*) .(\d\d\d\d). (\d{1,3}), (\d{1,3}.\d{0,3})<NewLine1><NewLine2>doi: (.+)<NewLine3><NewLine4>(.+)<NewLine5>(.+)<NewLine6>.*SUMMARY (.+)Key words: (.+)<NewLine1.>.*$ # cb2Bib 0.6.0 Pattern: PEPI Old [Physics of The Earth and Planetary Interiors] article journal volume year pages title author abstract keywords ^(.+) (\d{1,3}) .(\d\d\d\d). (\d{1,3}.\d{0,3}).*<NewLine1><NewLine2>(.+)<NewLine3>(.+)<NewLine4>.+<NewLine6>Abstract (.+) . \d\d\d\d Elsevier .+<NewLine7>Keywords: (.+)<NewLine8>.*$ # cb2Bib 0.6.0 Pattern: PEPI New [Physics of The Earth and Planetary Interiors] article journal volume year pages title author abstract keywords ^.*<NewLine1><NewLine2>(.+) (\d{1,3}) .(\d\d\d\d). (\d{1,3}.\d{0,3})<NewLine3><NewLine4>(.+)<NewLine5>(.+)<NewLine6>.*Abstract (.+) . \d\d\d\d Elsevier.+<NewLine11>Keywords: (.+)<NewLine12>.*$ # cb2Bib 0.6.0 Pattern: EPSL [Earth and Planetary Science Letters] article journal volume year pages title author abstract keywords ^.*<NewLine3>(.+) (\d{1,4}) .(\d\d\d\d). (\d{1,3}.\d{0,3}).*<NewLine4><NewLine5>(.+)<NewLine6>(.+)<NewLine7>.*<NewLine13>Abstract (.+) . \d\d\d\d Elsevier Science B.V. All rights reserved.<NewLine..>Keywords: (.+)<NewLine15>.*$ To use any of the following regular expressions: - Launch cb2Bib - Check 'View Tagged Clipboard Data' at the context menu - Go to 'Insert Regular Expressions', Alt+I, at the context menu - Copy the 3 lines of/to the 'Search RegExp Pattern' - Enter 'Search Pattern Name' - 'Add RegExp' - Copy the line 'Test example from cb2Bib clipboard panel' for testing ===================================================================================================== NOTES: browser [[Mozilla]] description [[Physical Review archive - PROLA]] comments [[Bibtex code is available for _new_ Physical Review articles (publish.aps.org) but not for the PROLA archive (prola.aps.org). This is for PROLA...]] Submitted [[martint on a server called phys.au.dk]] ----------------------------------------------------------------------------------------------------- 'Search RegExp Name' Physical Review (PROLA) 'Search RegExp Pattern' article journal volume pages year number title author abstract publisher url doi ^(.+)\s+(\d+),\s*([^\s]+)\s*\((\d\d\d\d)\)\s*<NewLine1>.*Issue\s*(\d+).*<NewLine2>.+<NewLine3>.+<NewLine4>\s*(.+)\s*<NewLine5>\s*(.+)\s*<NewLine6>.*Received.*<NewLine\d+>\s*(.+)\s*<NewLine\d+>\s*.\d\d\d\d\s*(.+)<NewLine\d+>\s*URL.\s*(.+)\s*<NewLine\d+>\s*[Dd][Oo][Ii].\s*([^\s]+)\s*<NewLine\d+>\s*.*$ 'Test example from cb2Bib clipboard panel' Phys. Rev. C 49, R1737–R1741 (1994)<NewLine1>[Issue 4 – April 1994 ]<NewLine2>[ Previous article | Next article | Issue 4 contents ]<NewLine3>Add to article collection View Page Images, PDF (882 kB), or Buy this Article<NewLine4>Excitation energy deposition in central collisions of 40A MeV 40Ar with 232Th<NewLine5> D. Utley, R. Wada, K. Hagel, J. Li, X. Bin, M. Gui, Y. Lou, R. Tezkratt, J. B. Natowitz, and M. Gonin<NewLine6> Cyclotron Institute, Texas A&M University, College Station, Texas 77843<NewLine7>Received 8 December 1993<NewLine8>Excitation energy depositions in the reactions of 40A MeV 40Ar with 232Th have been determined from measurements of neutron multiplicities in coincidence with mass identified heavy reaction products. For the most central collisions the derived excitation energies of 880 MeV are 200–300 MeV above previous estimates and in excellent agreement with momentum transfer systematics. Heavy evaporation residues are observed for these collisions indicating apparent dynamic delays in the fission channel of (1–5)×10-20 s. While a massive-transfer simulation incorporating preequilibrium emission is in generally good agreement with the experimental results evidence is also found for strongly damped collisions.<NewLine9>©1994 The American Physical Society<NewLine10>URL: http://link.aps.org/abstract/PRC/v49/pR1737<NewLine11>DOI: 10.1103/PhysRevC.49.R1737<NewLine12>PACS: 25.70.Jj, 25.70.Lm, 25.85.Ge ===================================================================================================== NOTES: browser [[Konqueror]] description [[Siam Journals Online]] comments [[Thanks for this great tool! I am using it since a year, and it works great. The example above is from http://epubs.siam.org/SISC/volume-24/art_38257.html, and in addition I have the following entry in abbreviations.txt: SISC|SIAM J. Sci. Comp.|SIAM Journal on Scientific Computing]] Submitted [[gb at ithe.rwth]] ----------------------------------------------------------------------------------------------------- 'Search RegExp Name' Siam Journals Online 'Search RegExp Pattern' article journal volume number pages year publisher title author abstract keywords doi ^(.+),\s*Volume\s*(\d+)\s*Issue\s*(\d+)\s*<NewLine1>pages.*([^\s,]+),\s*.\s*(\d\d\d\d)\s+(.+)<NewLine2>\s*(.+)\s*<NewLine3>\s*(.+)\s*<NewLine4>Abstract\.\s*(.+)\s*<NewLine5>Key words\.\s*(.+)\s*<NewLine6>.+<NewLine7>DOI\.\s*(10.[\d\.]+/\S+)$ 'Test example from cb2Bib clipboard panel' SISC, Volume 24 Issue 1<NewLine1>pages 312–334, © 2002 Society for Industrial and Applied Mathematics<NewLine2>An Inverse Free Preconditioned Krylov Subspace Method for Symmetric Generalized Eigenvalue Problems<NewLine3> Gene H. Golub, Qiang Ye <NewLine4>Abstract. In this paper, we present an inverse free Krylov subspace method for finding some extreme eigenvalues of the symmetric definite generalized eigenvalue problem $Ax = \lambda B x$. The basic method takes a form of inner-outer iterations and involves no inversion of B or any shift-and-invert matrix $A-\lambda_0 B$. A convergence analysis is presented that leads to a preconditioning scheme for accelerating convergence through some equivalent transformations of the eigenvalue problem. Numerical examples are given to illustrate the convergence properties and to demonstrate the competitiveness of the method. <NewLine5>Key words. Krylov subspace, preconditioning, eigenvalue problems <NewLine6>AMS Subject Classifications. 65F15 <NewLine7>DOI. 10.1137/S1064827500382579 ===================================================================================================== �����������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/PaxHeaders/lexicon.pos������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015015� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.330764937 30 atime=1762812827.994759702 30 ctime=1762812827.330764937 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/data/lexicon.pos�����������������������������������������������������������������������0000644�0001750�0000144�00002175677�15104461633�017037� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#--------------------------------------------------------------------------- # cb2Bib POS Lexicon File #--------------------------------------------------------------------------- # # Tags: # A adjective # B between # C countable: one, two, ..., i, ii, ... # F from # G verbal noun # I in, on, for # N noun # O plural noun # P preposition # Q as # R adverb # S short word # T to # U union # V verb # # Values for non-regular words had been set according to www.wiktionary.org. #--------------------------------------------------------------------------- 2536 .A.A.A.A.N. .A.A.A.G. .A.A.A.N. .A.A.A.N.N.O. .A.A.A.NV. .A.A.A.NV.NV. .A.A.A.NV.O. .A.A.A.O. .A.A.A.OV. .A.A.AN. .A.A.AN.AN.O. .A.A.AN.G. .A.A.AN.N. .A.A.AN.O. .A.A.ANR. .A.A.ANV. .A.A.ANV.N. .A.A.ANV.NV. .A.A.ANV.NV.G. .A.A.ANV.OV. .A.A.AR.OV. .A.A.AR.OV.O. .A.A.AV.A.NV. .A.A.G.NV. .A.A.G.O. .A.A.G.OV. .A.A.I.A.OV. .A.A.N. .A.A.N.A.G. .A.A.N.A.N. .A.A.N.G. .A.A.N.I.AN.O. .A.A.N.I.N.N. .A.A.N.I.N.NV. .A.A.N.I.NV.N. .A.A.N.N. .A.A.N.N.N. .A.A.N.N.NV. .A.A.N.N.NV.N. .A.A.N.NV. .A.A.N.NV.N. .A.A.N.NV.N.N. .A.A.N.NV.O. .A.A.N.O. .A.A.N.OV. .A.A.N.P.AN.OV. .A.A.N.P.O. .A.A.N.U.AN.N. .A.A.NV. .A.A.NV.I.A.OV. .A.A.NV.N. .A.A.NV.NV. .A.A.NV.O. .A.A.NV.OV. .A.A.O. .A.A.O.I.A.NV. .A.A.O.I.N.O. .A.A.O.I.N.U.N. .A.A.O.N. .A.A.O.U.N.O. .A.A.OV. .A.A.S.O. .A.A.U.A.N. .A.A.U.A.NV. .A.A.U.A.O. .A.AG. .A.AG.N. .A.AN.A.N. .A.AN.A.NV. .A.AN.A.O. .A.AN.A.OV. .A.AN.AN.AN.O. .A.AN.AN.G.N. .A.AN.AN.N. .A.AN.AN.O. .A.AN.AN.O.I.ANV.NV. .A.AN.AN.O.U.O. .A.AN.AN.OV. .A.AN.ANR.A.N. .A.AN.ANV.N. .A.AN.ANV.OV. .A.AN.AR.OV. .A.AN.G.ANRV.O. .A.AN.G.I.AN.O. .A.AN.G.N. .A.AN.G.O. .A.AN.I.A.NV. .A.AN.I.A.O. .A.AN.I.N.OV. .A.AN.N. .A.AN.N.G. .A.AN.N.I.N.N. .A.AN.N.N. .A.AN.N.NV. .A.AN.N.O. .A.AN.N.OV. .A.AN.N.U.O. .A.AN.NV. .A.AN.NV.N. .A.AN.NV.N.I.A.G. .A.AN.NV.NV. .A.AN.NV.O. .A.AN.NV.OV. .A.AN.O. .A.AN.O.I.NV.OV. .A.AN.O.P.AN.O. .A.AN.O.U.O. .A.AN.OV. .A.AN.OV.U.ANV.OV. .A.AN.S.N. .A.AN.S.N.N.O. .A.AN.U.AV.O. .A.AN.U.N. .A.AN.U.NV. .A.ANRV.A.N. .A.ANRV.N.I.N.NV. .A.ANRV.N.N. .A.ANRV.N.NV. .A.ANRV.N.O. .A.ANRV.N.OV. .A.ANRV.NV. .A.ANRV.NV.N. .A.ANRV.NV.NV. .A.ANRV.NV.O. .A.ANV.A.N. .A.ANV.A.N.N. .A.ANV.AN.N. .A.ANV.AN.O. .A.ANV.ANRV.N. .A.ANV.ANV.N. .A.ANV.ANV.NV. .A.ANV.AR.OV. .A.ANV.G.ANV.N. .A.ANV.G.U.N. .A.ANV.I.A.NV. .A.ANV.I.A.OV. .A.ANV.I.AN.O. .A.ANV.I.ANV.N. .A.ANV.I.N.O. .A.ANV.I.N.OV. .A.ANV.I.O. .A.ANV.I.OV. .A.ANV.N. .A.ANV.N.G. .A.ANV.N.N. .A.ANV.N.NV. .A.ANV.N.O. .A.ANV.NV. .A.ANV.NV.AN.O. .A.ANV.NV.G. .A.ANV.NV.N. .A.ANV.O. .A.ANV.OV. .A.ANV.U.N.N. .A.AR.ANV.A.N. .A.AR.OV.N. .A.AR.OV.NV. .A.AR.OV.O. .A.ARV.N.O. .A.AV.A.A.NV. .A.AV.A.NV. .A.AV.G.OV. .A.AV.N.NV. .A.AV.NV.NV. .A.AV.U.AN.O. .A.B.N.N.U.NV. .A.B.NV.U.N.N. .A.C.N. .A.G. .A.G.AN. .A.G.ANRV.N. .A.G.ANRV.O. .A.G.ANV. .A.G.I.A.O. .A.G.I.AN.O. .A.G.I.O. .A.G.N. .A.G.N.N. .A.G.NV. .A.G.NV.O. .A.G.NV.T.NV.G. .A.G.O. .A.G.O.I.N.G. .A.G.OV. .A.G.P.ANV.N.N. .A.G.U.A.O. .A.G.U.G. .A.G.U.N.NV. .A.I.AN.AN.O. .A.I.AN.N.N. .A.I.N.A.N. .A.I.N.N.N. .A.I.N.N.NV. .A.I.N.NV.N. .A.I.N.U.N.OV. .A.I.S.AN.N. .A.N.A.G. .A.N.A.N. .A.N.A.N.N. .A.N.A.NV. .A.N.A.OV. .A.N.AN.N. .A.N.AN.N.N. .A.N.AN.O. .A.N.ANRV.N. .A.N.ANRV.O. .A.N.ANV. .A.N.ANV.N. .A.N.ANV.O. .A.N.B.C.O. .A.N.C. .A.N.C.N. .A.N.C.N.N. .A.N.G. .A.N.G.N. .A.N.G.NV. .A.N.G.NV.N. .A.N.G.NV.O. .A.N.G.O. .A.N.I.A.A.NV.NV. .A.N.I.A.AN.O. .A.N.I.A.G. .A.N.I.A.N. .A.N.I.A.NV. .A.N.I.A.NV.NV. .A.N.I.A.O. .A.N.I.A.O.U.O. .A.N.I.A.OV. .A.N.I.AN.AN.O. .A.N.I.AN.N. .A.N.I.AN.NV. .A.N.I.AN.O. .A.N.I.AN.OV. .A.N.I.ANR.N.NV. .A.N.I.ANV.O. .A.N.I.G.O. .A.N.I.N.N. .A.N.I.N.NV.O. .A.N.I.N.O. .A.N.I.N.OV. .A.N.I.NV.N. .A.N.I.NV.NV. .A.N.I.NV.OV. .A.N.I.O. .A.N.I.O.I.N.NV. .A.N.I.O.U.O. .A.N.I.OV. .A.N.I.R.A.NV. .A.N.N. .A.N.N.ANRV.NV. .A.N.N.ANV.NV. .A.N.N.G. .A.N.N.I.A.O. .A.N.N.I.AN.N. .A.N.N.I.N.N. .A.N.N.I.O. .A.N.N.N. .A.N.N.N.NV. .A.N.N.N.O. .A.N.N.NV. .A.N.N.NV.O. .A.N.N.O. .A.N.N.OV. .A.N.NV. .A.N.NV.ANV.N. .A.N.NV.I.O. .A.N.NV.N. .A.N.NV.N.N. .A.N.NV.NV. .A.N.NV.O. .A.N.NV.OV. .A.N.O. .A.N.O.I.A.G. .A.N.O.I.NV.N.O. .A.N.O.I.NV.O. .A.N.O.I.O. .A.N.O.N. .A.N.O.P.ANV.N.N. .A.N.O.Q.N.O. .A.N.OV. .A.N.P.A.G. .A.N.P.AN.G. .A.N.P.AV.G. .A.N.P.G. .A.N.P.OV. .A.N.S.N. .A.N.S.N.O. .A.N.S.O. .A.N.T.A.G. .A.N.T.A.N.I.OV. .A.N.T.A.NV. .A.N.T.AN.N. .A.N.T.G. .A.N.U.A.N. .A.N.U.A.O. .A.N.U.AN.N. .A.N.U.AN.O. .A.N.U.ANRV.N. .A.N.U.N.N.O. .A.N.U.N.NV.O. .A.N.U.N.O. .A.N.U.N.OV. .A.N.U.O. .A.NV.A.N. .A.NV.A.O. .A.NV.AN. .A.NV.AN.N.OV. .A.NV.ANV. .A.NV.C.OV. .A.NV.G. .A.NV.G.N. .A.NV.G.NV. .A.NV.G.OV. .A.NV.I.A.NV. .A.NV.I.A.U.A.N. .A.NV.I.AN.NV. .A.NV.I.AN.O. .A.NV.I.AN.OV. .A.NV.I.N.I.N. .A.NV.I.N.N. .A.NV.I.N.NV. .A.NV.I.O. .A.NV.I.OV. .A.NV.N. .A.NV.N.G. .A.NV.N.I.A.O. .A.NV.N.I.O. .A.NV.N.N. .A.NV.N.N.OV. .A.NV.N.NV. .A.NV.N.O. .A.NV.N.OV. .A.NV.N.U.AN.O. .A.NV.N.U.O. .A.NV.NV. .A.NV.NV.I.A.O. .A.NV.NV.N. .A.NV.NV.N.O. .A.NV.NV.N.P.A.G. .A.NV.NV.NV. .A.NV.NV.O. .A.NV.NV.OV. .A.NV.O. .A.NV.O.U.NV.OV. .A.NV.O.U.OV. .A.NV.OV. .A.NV.OV.N. .A.NV.P.A.A.A.O. .A.NV.P.A.ANV.O. .A.NV.P.A.N. .A.NV.P.A.O. .A.NV.P.N.O. .A.NV.P.OV. .A.NV.S.O. .A.NV.T.AN.N. .A.NV.U.A.NV. .A.NV.U.A.NV.N. .A.NV.U.ANV.NV. .A.NV.U.G. .A.NV.U.N.NV. .A.NV.U.O. .A.O.ANV. .A.O.G. .A.O.I.A.A.N.N. .A.O.I.A.A.O. .A.O.I.A.G. .A.O.I.A.N. .A.O.I.A.N.NV.N. .A.O.I.A.NV. .A.O.I.A.O. .A.O.I.AN.AN.O. .A.O.I.AN.N.N. .A.O.I.AN.O. .A.O.I.ANR.O. .A.O.I.ANV.O. .A.O.I.G.A.O. .A.O.I.N.N. .A.O.I.N.N.O. .A.O.I.N.NV. .A.O.I.N.NV.OV. .A.O.I.N.O. .A.O.I.N.OV. .A.O.I.N.S.N. .A.O.I.O. .A.O.I.O.U.N. .A.O.I.OV. .A.O.I.OV.U.OV. .A.O.NV. .A.O.NV.N. .A.O.NV.NV. .A.O.NV.OV. .A.O.P.A.O. .A.O.P.O. .A.O.Q.O. .A.O.T.A.N. .A.O.T.N.O. .A.O.U.A.AR.OV. .A.O.U.A.N.O. .A.O.U.A.O. .A.O.U.ANV.N.O. .A.O.U.N.G. .A.O.U.N.O. .A.O.U.O. .A.O.U.O.I.O. .A.O.U.O.N. .A.O.U.OV. .A.OV.A.N.N. .A.OV.I.A.G. .A.OV.I.A.NV. .A.OV.I.A.O. .A.OV.I.AN.G. .A.OV.I.AN.N. .A.OV.I.AN.O. .A.OV.I.N.AN.O. .A.OV.I.N.N. .A.OV.I.O. .A.OV.I.OV. .A.OV.I.R.A.O. .A.OV.N. .A.OV.N.I.N. .A.OV.OV. .A.OV.P.A.ANRV.A.N. .A.OV.P.A.O. .A.OV.P.ANV.NV. .A.OV.P.N.O. .A.OV.T.O. .A.OV.U.A.N. .A.OV.U.A.O. .A.OV.U.N.O. .A.OV.U.NV.OV. .A.OV.U.O. .A.OV.U.OV. .A.P.A.AN.O. .A.P.C.N.O. .A.P.NV.NV.O. .A.R.A.G. .A.R.A.NV. .A.R.A.OV. .A.S.A.N. .A.S.AN.N. .A.S.G. .A.S.N.N. .A.S.N.N.O. .A.S.N.O. .A.S.O. .A.S.S.N. .A.S.U.N.O. .A.U.A.A.NV. .A.U.A.AN.S.N. .A.U.A.G. .A.U.A.G.N. .A.U.A.N. .A.U.A.N.I.N.N. .A.U.A.N.N. .A.U.A.N.N.N.O. .A.U.A.N.N.O. .A.U.A.N.O. .A.U.A.N.OV. .A.U.A.N.S.N. .A.U.A.N.S.N.N. .A.U.A.NV. .A.U.A.NV.OV. .A.U.A.O. .A.U.A.O.I.AN.NV. .A.U.A.O.I.ANV.N. .A.U.A.OV. .A.U.A.OV.I.AN.N. .A.U.A.OV.T.NV.N. .A.U.A.S.AN.N. .A.U.AN.A.N. .A.U.AN.A.N.O. .A.U.AN.G. .A.U.AN.N.NV. .A.U.AN.O. .A.U.AN.OV. .A.U.ANP.O. .A.U.ANR.O. .A.U.ANR.OV. .A.U.ANRV.N.NV. .A.U.ANV.O. .A.U.ANV.OV. .A.U.AR.N. .A.U.AR.N.O. .A.U.AR.O. .A.U.AV.A.NV. .A.U.G.G. .A.U.G.NV. .A.U.G.O. .A.U.G.OV. .A.U.N.G. .A.U.N.N. .A.U.N.N.OV. .A.U.N.NV. .A.U.N.O. .A.U.N.OV. .A.U.NV.OV. .A.U.R.A.N. .A.U.R.G. .AG.A. .AG.ANRV.G. .AG.ANRV.O. .AG.N. .AG.NV. .AG.O. .AG.OV. .AN.A.A.G. .AN.A.A.N. .AN.A.A.NV. .AN.A.A.NV.O. .AN.A.A.O. .AN.A.AN.N. .AN.A.AN.NV. .AN.A.AN.O. .AN.A.AN.OV. .AN.A.G. .AN.A.G.N. .AN.A.G.O. .AN.A.G.OV. .AN.A.N. .AN.A.N.G. .AN.A.N.I.AN.N. .AN.A.N.N. .AN.A.N.N.OV. .AN.A.N.NV. .AN.A.N.NV.O. .AN.A.N.O. .AN.A.N.O.I.N.N. .AN.A.N.OV. .AN.A.NV. .AN.A.NV.N. .AN.A.NV.NV. .AN.A.NV.O. .AN.A.NV.OV. .AN.A.O. .AN.A.OV. .AN.A.U.A.A.NV. .AN.A.U.A.A.O. .AN.A.U.A.O. .AN.AN.A.G. .AN.AN.A.G.N. .AN.AN.A.N. .AN.AN.A.O. .AN.AN.A.OV. .AN.AN.AN. .AN.AN.AN.AN.O. .AN.AN.AN.G. .AN.AN.AN.N. .AN.AN.AN.NV.NV. .AN.AN.AN.NV.OV. .AN.AN.AN.O. .AN.AN.ANV.N. .AN.AN.G.N. .AN.AN.G.NV. .AN.AN.G.OV. .AN.AN.I.N.NV. .AN.AN.N. .AN.AN.N.A.O. .AN.AN.N.AN.N. .AN.AN.N.G.N. .AN.AN.N.I.A.A.N. .AN.AN.N.I.O. .AN.AN.N.N. .AN.AN.N.N.O. .AN.AN.N.NV. .AN.AN.N.NV.NV. .AN.AN.N.O. .AN.AN.N.OV. .AN.AN.NV. .AN.AN.NV.A.O. .AN.AN.NV.N. .AN.AN.NV.NV. .AN.AN.NV.O. .AN.AN.NV.OV. .AN.AN.O. .AN.AN.O.A.N. .AN.AN.O.I.A.O. .AN.AN.O.I.AN.NV. .AN.AN.O.I.ANR.NV. .AN.AN.O.I.ANV.NV. .AN.AN.O.N. .AN.AN.O.NV.N. .AN.AN.O.P.A.NV. .AN.AN.O.P.OV. .AN.AN.O.U.O. .AN.AN.OV. .AN.AN.OV.N. .AN.AN.S.O. .AN.ANR.A.N. .AN.ANR.A.O. .AN.ANR.A.OV. .AN.ANR.NV.NV. .AN.ANRV.G.O. .AN.ANRV.G.OV. .AN.ANRV.N.I.G. .AN.ANRV.N.I.N. .AN.ANRV.O.I.G. .AN.ANRV.O.I.N. .AN.ANRV.U.A.G.N. .AN.ANV.A.N. .AN.ANV.AN.NV. .AN.ANV.ANV.N. .AN.ANV.I.A.NV. .AN.ANV.I.AN.NV. .AN.ANV.I.N.N. .AN.ANV.I.N.O. .AN.ANV.I.N.U.N. .AN.ANV.I.NV.O. .AN.ANV.I.O. .AN.ANV.I.OV. .AN.ANV.N. .AN.ANV.N.I.A.N. .AN.ANV.N.I.A.O. .AN.ANV.N.N. .AN.ANV.NV. .AN.ANV.NV.N. .AN.ANV.NV.O. .AN.ANV.O. .AN.ANV.OV. .AN.AR.AN.NV. .AN.AR.OV.N. .AN.AV.A.N. .AN.AV.NV.N. .AN.C.N.O. .AN.C.O. .AN.G. .AN.G.AN.N. .AN.G.ANRV.O. .AN.G.ANV.NV. .AN.G.I.AN.AN.N. .AN.G.I.AN.O. .AN.G.I.AN.OV. .AN.G.I.ANV.N. .AN.G.I.O. .AN.G.N. .AN.G.N.N. .AN.G.N.NV. .AN.G.NV.N. .AN.G.O. .AN.G.U.G. .AN.G.U.N.N. .AN.I.A.G. .AN.I.A.N. .AN.I.A.NV. .AN.I.A.O. .AN.I.A.OV. .AN.I.AN.N. .AN.I.AN.NV. .AN.I.AN.O. .AN.I.G.N. .AN.I.N.AN.N. .AN.I.N.G. .AN.I.N.N. .AN.I.N.NV. .AN.I.N.O. .AN.I.N.OV. .AN.N.A.N. .AN.N.AN. .AN.N.AN.N. .AN.N.AN.O. .AN.N.AN.OV. .AN.N.ANV. .AN.N.ANV.N. .AN.N.ANV.NV. .AN.N.ANV.O. .AN.N.G. .AN.N.G.N. .AN.N.G.O. .AN.N.G.OV. .AN.N.I.A.G. .AN.N.I.A.G.O. .AN.N.I.A.N. .AN.N.I.A.N.O. .AN.N.I.A.NV. .AN.N.I.A.NV.G. .AN.N.I.A.O. .AN.N.I.A.OV. .AN.N.I.A.U.A.N. .AN.N.I.AN.A.N. .AN.N.I.AN.N. .AN.N.I.AN.NV. .AN.N.I.AN.O. .AN.N.I.ANR.N. .AN.N.I.ANRV.G. .AN.N.I.ANV.N. .AN.N.I.ANV.OV. .AN.N.I.AR.A.O. .AN.N.I.AR.A.O.OV. .AN.N.I.AR.U.A.N. .AN.N.I.G.U.O. .AN.N.I.N.I.O. .AN.N.I.N.I.OV. .AN.N.I.N.N. .AN.N.I.N.NV. .AN.N.I.N.O. .AN.N.I.N.O.U.N. .AN.N.I.N.U.A.N. .AN.N.I.N.U.N.N. .AN.N.I.NV.ANR.NV. .AN.N.I.NV.C.NV. .AN.N.I.NV.G. .AN.N.I.NV.N. .AN.N.I.NV.N.U.N. .AN.N.I.O. .AN.N.I.O.I.N.N. .AN.N.I.O.I.O. .AN.N.I.O.U.N. .AN.N.I.OV. .AN.N.I.OV.U.OV. .AN.N.I.R.A.N. .AN.N.N. .AN.N.N.A.O. .AN.N.N.C. .AN.N.N.G. .AN.N.N.I.A.N. .AN.N.N.I.A.N.O. .AN.N.N.N. .AN.N.N.N.NV. .AN.N.N.N.OV. .AN.N.N.NV. .AN.N.N.O. .AN.N.N.OV. .AN.N.N.P.AN.N. .AN.N.NV. .AN.N.NV.G. .AN.N.NV.N. .AN.N.NV.NV. .AN.N.NV.O. .AN.N.NV.OV. .AN.N.O. .AN.N.O.I.O. .AN.N.OV. .AN.N.P.R.AN.O. .AN.N.S.N. .AN.N.U.A.N. .AN.N.U.A.O. .AN.N.U.AN.N. .AN.N.U.ANR.NV. .AN.N.U.N. .AN.N.U.N.N. .AN.N.U.N.O. .AN.N.U.N.OV. .AN.N.U.NV. .AN.N.U.NV.N. .AN.N.U.O. .AN.NV.A.G. .AN.NV.A.NV. .AN.NV.A.O. .AN.NV.AN. .AN.NV.AN.AN.O. .AN.NV.AN.N. .AN.NV.AN.NV. .AN.NV.AN.O. .AN.NV.AN.OV. .AN.NV.ANRV.G. .AN.NV.B.OV. .AN.NV.C.NV. .AN.NV.G. .AN.NV.G.OV.U.O. .AN.NV.I.A.N. .AN.NV.I.A.NV. .AN.NV.I.AN.N. .AN.NV.I.AN.NV. .AN.NV.I.AV.G. .AN.NV.I.N.N. .AN.NV.I.N.N.U.N. .AN.NV.I.N.NV. .AN.NV.I.N.O. .AN.NV.I.NV.N. .AN.NV.I.O. .AN.NV.N. .AN.NV.N.N. .AN.NV.N.N.NV. .AN.NV.N.NV. .AN.NV.N.O. .AN.NV.N.OV. .AN.NV.NV. .AN.NV.NV.N. .AN.NV.NV.NV. .AN.NV.NV.O. .AN.NV.O. .AN.NV.O.I.A.G. .AN.NV.OV. .AN.NV.OV.I.A.O. .AN.NV.U.A.O. .AN.NV.U.N. .AN.NV.U.NV.N.N. .AN.NV.U.O. .AN.O.G. .AN.O.I.A.A.O. .AN.O.I.A.G. .AN.O.I.A.N.N.NV. .AN.O.I.A.O. .AN.O.I.A.OV. .AN.O.I.AN.N.NV. .AN.O.I.AN.NV. .AN.O.I.ANR.NV. .AN.O.I.ANR.O. .AN.O.I.N.N.N. .AN.O.I.N.NV. .AN.O.I.N.NV.N. .AN.O.I.N.NV.O. .AN.O.I.N.O. .AN.O.I.N.OV. .AN.O.I.N.U.N. .AN.O.I.NV.N. .AN.O.I.NV.OV. .AN.O.N.I.N.G. .AN.O.NV. .AN.O.O. .AN.O.OV. .AN.O.P.A.NV. .AN.O.P.AN.O. .AN.O.P.AN.U.ANV.O. .AN.O.P.G.O. .AN.O.P.N. .AN.O.P.NV. .AN.O.P.O. .AN.O.P.OV. .AN.O.P.R.AN.N. .AN.O.T.N. .AN.O.U.A.O. .AN.O.U.AN.O. .AN.O.U.AN.OV. .AN.O.U.N.O.I.OV. .AN.O.U.O. .AN.O.U.O.I.AN.N. .AN.O.U.OV. .AN.OV.B.NV.O. .AN.OV.I.A.N. .AN.OV.I.AN.N. .AN.OV.I.G.O. .AN.OV.I.N. .AN.OV.I.N.N. .AN.OV.I.N.O. .AN.OV.I.O. .AN.OV.N. .AN.OV.O. .AN.OV.U.G.O. .AN.OV.U.O. .AN.P.ANRV.N. .AN.P.N.NV. .AN.P.N.O. .AN.Q.N. .AN.R.A.AN.O. .AN.R.AN.N. .AN.S.N.N.O. .AN.T.A.N. .AN.T.A.NV. .AN.T.A.O. .AN.T.AN.N. .AN.T.AN.NV. .AN.T.AR.NV. .AN.T.N.N. .AN.T.N.NV. .AN.T.NV.N. .AN.T.NV.NV. .AN.U.A.G. .AN.U.A.N. .AN.U.A.O. .AN.U.A.OV. .AN.U.AN.AN.O. .AN.U.AN.N. .AN.U.AN.NV. .AN.U.AN.O. .AN.U.AN.O.I.O. .AN.U.AN.OV. .AN.U.ANRV.NV. .AN.U.ANV.N. .AN.U.ANV.NV. .AN.U.ANV.O. .AN.U.ANV.OV. .AN.U.AV.G. .AN.U.AV.O. .AN.U.AV.OV. .AN.U.G.O. .AN.U.N.G. .AN.U.N.N.OV. .AN.U.N.O. .AN.U.N.OV. .AN.U.NV.AN.O. .AN.U.NV.O. .AN.U.R.A.AN.O. .ANP.U.A.O. .ANR.A.A.N. .ANR.A.A.NV. .ANR.A.A.NV.NV. .ANR.A.AN.N. .ANR.A.ANV.O. .ANR.A.G.NV. .ANR.A.N.NV. .ANR.A.N.O. .ANR.A.NV.N. .ANR.A.NV.NV. .ANR.A.NV.O. .ANR.AN.N.NV. .ANR.ANV.N. .ANR.G. .ANR.N.A.NV. .ANR.N.AN.NV. .ANR.N.ANV.G. .ANR.N.ANV.O. .ANR.N.G.NV. .ANR.N.N. .ANR.N.N.N. .ANR.N.N.OV. .ANR.N.NV.O. .ANR.N.NV.P.AN.N. .ANR.N.O. .ANR.N.OV.I.AN.N. .ANR.NV.A.AN.O. .ANR.NV.A.N. .ANR.NV.AN. .ANR.NV.AN.A.O. .ANR.NV.AN.O. .ANR.NV.ANV.NV.O. .ANR.NV.G. .ANR.NV.N. .ANR.NV.N.G. .ANR.NV.N.N. .ANR.NV.N.NV. .ANR.NV.NV.O. .ANR.NV.OV. .ANR.O.U.O. .ANR.OV.I.AN.A.N. .ANR.R.ANRV.N.NV. .ANR.S.N.N. .ANR.U.A.O.U.OV. .ANR.U.ANV.N. .ANR.U.ANV.O. .ANR.U.ANV.OV. .ANRV.A.A.N. .ANRV.A.G.O. .ANRV.A.N.N. .ANRV.A.N.N.NV. .ANRV.A.N.NV.O. .ANRV.A.NV.O. .ANRV.AN.NV.NV. .ANRV.AN.O. .ANRV.ANV.N. .ANRV.G. .ANRV.N.A.O. .ANRV.N.AN.N. .ANRV.N.I.AN.AN.ANV.N. .ANRV.N.I.AN.N.N. .ANRV.N.I.O. .ANRV.N.N. .ANRV.N.N.O. .ANRV.N.NV. .ANRV.N.NV.N. .ANRV.N.NV.NV. .ANRV.N.NV.OV. .ANRV.N.O. .ANRV.N.O.I.AN.NV.NV. .ANRV.N.OV. .ANRV.NV.G. .ANRV.NV.N. .ANRV.NV.N.N. .ANRV.NV.NV. .ANRV.NV.O. .ANRV.O.U.O. .ANRV.R.N. .ANRV.S.N. .ANRV.U.A.G. .ANRV.U.A.N. .ANRV.U.ANRV.N. .ANRV.U.AR.O. .ANV.A.ANPR.N.NV. .ANV.A.N. .ANV.A.N.I.N.NV. .ANV.A.N.N. .ANV.A.N.NV. .ANV.A.N.O. .ANV.A.NV.N. .ANV.A.NV.NV. .ANV.A.NV.O. .ANV.A.NV.OV. .ANV.A.O. .ANV.A.O.U.O. .ANV.AG. .ANV.AN.A.N. .ANV.AN.AN.NV. .ANV.AN.AN.O. .ANV.AN.N. .ANV.AN.N.N. .ANV.AN.NV.NV. .ANV.AN.NV.O. .ANV.AN.O. .ANV.ANV.AN.N. .ANV.ANV.N. .ANV.ANV.NV. .ANV.ANV.NV.N. .ANV.ANV.NV.NV. .ANV.ANV.NV.O. .ANV.ANV.O. .ANV.AR.OV.N. .ANV.AR.OV.O. .ANV.AV.A.NV. .ANV.C.N.N. .ANV.C.N.O. .ANV.G. .ANV.G.N. .ANV.G.O. .ANV.G.OV. .ANV.G.U.G. .ANV.G.U.N. .ANV.I.A.A.N. .ANV.I.A.A.N.U.N. .ANV.I.A.A.NV. .ANV.I.A.A.OV. .ANV.I.A.AN.NV. .ANV.I.A.N. .ANV.I.A.N.O. .ANV.I.A.N.U.N. .ANV.I.A.NV. .ANV.I.A.NV.O. .ANV.I.A.O. .ANV.I.A.OV. .ANV.I.A.OV.I.A.G. .ANV.I.AG.NV.O. .ANV.I.AG.O. .ANV.I.AN.A.OV. .ANV.I.AN.AN.N.N. .ANV.I.AN.AN.N.N.O. .ANV.I.AN.AN.O. .ANV.I.AN.N. .ANV.I.AN.N.NV. .ANV.I.AN.N.O. .ANV.I.AN.NV. .ANV.I.AN.NV.O. .ANV.I.AN.O. .ANV.I.AN.O.NV. .ANV.I.AN.OV. .ANV.I.AN.S.N. .ANV.I.ANR.N.G. .ANV.I.ANV.A.O. .ANV.I.ANV.A.O.U.O. .ANV.I.ANV.AN.N. .ANV.I.AP.OV. .ANV.I.AR.A.O. .ANV.I.AV.N. .ANV.I.AV.O. .ANV.I.AV.OV. .ANV.I.G.O. .ANV.I.G.OV. .ANV.I.N.G. .ANV.I.N.N. .ANV.I.N.NV. .ANV.I.N.NV.O. .ANV.I.N.O. .ANV.I.N.OV. .ANV.I.NV.I.ANRV.N. .ANV.I.NV.N. .ANV.I.NV.N.O. .ANV.I.NV.O. .ANV.I.NV.OV. .ANV.I.R.AN.O. .ANV.I.R.AN.OV. .ANV.N.A.O. .ANV.N.AN. .ANV.N.AN.N. .ANV.N.ANV. .ANV.N.AV.O.I.AN.N. .ANV.N.G. .ANV.N.G.NV. .ANV.N.I.A.N. .ANV.N.I.AN.O. .ANV.N.I.N.I.N.NV. .ANV.N.I.N.N. .ANV.N.I.N.NV. .ANV.N.I.N.O. .ANV.N.I.N.OV. .ANV.N.I.NV.NV.OV. .ANV.N.I.O. .ANV.N.I.OV. .ANV.N.N. .ANV.N.N.A.N. .ANV.N.N.N. .ANV.N.N.NV. .ANV.N.N.O. .ANV.N.NV. .ANV.N.NV.N. .ANV.N.NV.N.N. .ANV.N.NV.NV. .ANV.N.O. .ANV.N.OV. .ANV.N.U.N. .ANV.NV.A.AN.O. .ANV.NV.A.NV.O. .ANV.NV.A.O. .ANV.NV.AN.AN.O. .ANV.NV.AN.N. .ANV.NV.AN.O. .ANV.NV.AN.OV. .ANV.NV.B.O. .ANV.NV.G. .ANV.NV.G.N. .ANV.NV.G.O. .ANV.NV.I.A.O. .ANV.NV.I.AN.NV. .ANV.NV.I.AN.O. .ANV.NV.I.N.AN. .ANV.NV.I.N.N. .ANV.NV.I.NV.AN. .ANV.NV.I.NV.NV. .ANV.NV.I.OV. .ANV.NV.N. .ANV.NV.N.AN.O. .ANV.NV.N.N.NV.N. .ANV.NV.N.O. .ANV.NV.NV. .ANV.NV.NV.N. .ANV.NV.NV.O. .ANV.NV.O. .ANV.NV.O.I.AN.AN.O. .ANV.NV.OV. .ANV.NV.U.ANR.A.NV. .ANV.O.AN.AN.O. .ANV.O.I.A.G.O. .ANV.O.I.AN.A.AN.OV. .ANV.O.I.O. .ANV.O.N.NV. .ANV.O.OV. .ANV.O.U.A.NV.N. .ANV.O.U.O. .ANV.OV.I.A.N. .ANV.OV.I.A.N.O. .ANV.OV.I.AN.N. .ANV.OV.I.O. .ANV.OV.U.OV. .ANV.U.A.A.OV. .ANV.U.A.N. .ANV.U.A.O. .ANV.U.A.OV. .ANV.U.AN.A.N. .ANV.U.AN.N. .ANV.U.AN.O. .ANV.U.AN.OV. .ANV.U.ANR.A.OV. .ANV.U.ANRV.O. .ANV.U.ANRV.OV. .ANV.U.ANV.NV. .ANV.U.ANV.OV. .ANV.U.AV.O. .ANV.U.AV.OV. .ANV.U.N.AN.N. .ANV.U.N.AN.O. .ANV.U.N.N. .ANV.U.N.NV. .ANV.U.N.NV.O. .ANV.U.N.O. .ANV.U.N.OV. .ANV.U.NV.G. .ANV.U.NV.N. .ANV.U.NV.N.O. .ANV.U.NV.O. .ANV.U.NV.OV. .APRV.G. .AR.A.AN.O. .AR.A.N. .AR.A.N.NV. .AR.A.NV.N.N. .AR.AN.AN.NV. .AR.AN.I.OV. .AR.AN.I.OV.N. .AR.AN.N.N. .AR.AN.N.OV. .AR.ANV.A.N. .AR.ANV.A.N.I.N.NV. .AR.N.A.NV. .AR.N.I.A.OV. .AR.N.N. .AR.N.N.NV. .AR.O.I.A.OV. .AR.OV.I.N. .AR.OV.N.N. .AR.OV.N.NV. .AR.OV.NV.NV.OV. .AR.R.A.N. .AR.U.A.A.OV. .ARV.A.A.N. .ARV.A.A.N.N. .ARV.A.N.O. .ARV.AN.N.N. .ARV.ANV.I.O. .ARV.N.I.A.N. .ARV.N.NV.O. .ARV.NV.O.I.ANRV.OV. .ARV.O.I.A.O. .ARV.U.A.O. .ARV.U.A.OV. .ARV.U.ANV.O. .AV.A.A.NV. .AV.A.A.NV.NV. .AV.A.ANV.NV. .AV.A.N. .AV.A.N.N. .AV.A.N.O. .AV.A.NV.N. .AV.A.NV.NV. .AV.AN.NV.N.NV. .AV.ANV.A.NV. .AV.ANV.I.A.O. .AV.ANV.I.AN.O. .AV.ANV.I.AN.OV. .AV.ANV.I.O. .AV.ANV.NV.N. .AV.N.A.N.N. .AV.N.ANV.ANV.N. .AV.N.ANV.O. .AV.N.I.AN.N. .AV.N.I.AN.O. .AV.N.I.N.N. .AV.N.I.OV. .AV.N.N.G. .AV.N.N.G.N. .AV.N.NV.N. .AV.N.NV.NV. .AV.N.O. .AV.N.OV. .AV.NV.I.AN.NV. .AV.NV.I.N.NV. .AV.NV.N.N. .AV.NV.NV.O. .AV.NV.O. .AV.U.AN.N. .AV.U.AN.O. .AV.U.AN.OV. .AV.U.AV.N. .AV.U.AV.O. .G.A.A.N.A.G. .G.A.A.N.O. .G.A.AR.OV.O. .G.A.N. .G.A.N.O. .G.A.NV.U.A.A.OV. .G.A.O. .G.A.O.OV. .G.A.O.P.A.N.O. .G.AN.N.I.A.O. .G.ANPR. .G.ANR. .G.ANV. .G.ANV.O.I.ANV.N. .G.B.N.U.N. .G.G. .G.I.A.G. .G.I.A.O. .G.I.AN.N.I.O.N. .G.I.AN.O. .G.I.ANRV.O. .G.I.ANV.OV. .G.I.N.ANV.OV. .G.I.N.N.O. .G.I.N.O. .G.I.N.OV. .G.I.NV.O. .G.I.O.T.N.O. .G.I.OV. .G.N. .G.N.A.OV. .G.N.C. .G.N.G.OV. .G.N.I.A.O. .G.N.N. .G.N.N.N. .G.N.N.NV. .G.N.N.NV.O. .G.N.N.O. .G.N.N.U.O. .G.N.NV. .G.N.NV.O. .G.N.O. .G.N.OV. .G.N.U.AN.N. .G.NV. .G.NV.I.A.O. .G.NV.I.AN.O. .G.NV.I.AN.OV. .G.NV.I.N.NV. .G.NV.I.N.O. .G.NV.N. .G.O. .G.O.I.A.A.O. .G.O.I.A.G. .G.O.I.A.N.G.O. .G.O.I.A.O. .G.O.I.O.I.AN.NV. .G.O.NV. .G.O.U.O. .G.ORV. .G.OV. .G.OV.I.A.G. .G.OV.I.A.N. .G.OV.I.ANV.O. .G.OV.U.G.OV. .G.P.S.O. .G.P.S.OV. .G.Q.N. .G.R.A.G.O. .G.U.G.NV.O. .G.U.G.O. .N.A.A.N. .N.A.A.NV. .N.A.A.O.N. .N.A.A.OV. .N.A.AN. .N.A.AN.N. .N.A.ANRV.N. .N.A.ANRV.NV. .N.A.ANV. .N.A.ANV.NV. .N.A.AR.OV. .N.A.G.I.N.G. .N.A.G.N. .N.A.N. .N.A.N.AN.N.N. .N.A.N.N. .N.A.N.N.O. .N.A.N.NV. .N.A.N.O. .N.A.N.OV. .N.A.N.U.N. .N.A.NV. .N.A.NV.AN.G. .N.A.NV.N. .N.A.NV.NV. .N.A.NV.NV.I.A.O. .N.A.NV.O. .N.A.NV.O.I.A.O. .N.A.NV.OV. .N.A.O. .N.A.O.N. .N.A.OV. .N.A.U.A.OV. .N.AG.N. .N.AG.NV. .N.AG.O. .N.AG.OV. .N.AN.A.N. .N.AN.A.N.O. .N.AN.A.O. .N.AN.A.OV. .N.AN.AN.N. .N.AN.AN.NV. .N.AN.AN.O. .N.AN.AR.NV. .N.AN.AR.OV. .N.AN.AV.N. .N.AN.G. .N.AN.G.N. .N.AN.I.O. .N.AN.N. .N.AN.N.ANV.N. .N.AN.N.I.N.I.O. .N.AN.N.I.N.O. .N.AN.N.N. .N.AN.N.N.N. .N.AN.N.NV. .N.AN.N.O. .N.AN.N.OV. .N.AN.NV. .N.AN.NV.F.AN.N. .N.AN.NV.N. .N.AN.NV.N.O. .N.AN.NV.NV. .N.AN.NV.NV.NV. .N.AN.NV.O. .N.AN.O. .N.AN.O.I.A.G. .N.AN.O.I.N.N. .N.AN.OV. .N.AN.OV.I.A.N. .N.AN.OV.U.OV. .N.ANR.O. .N.ANRV.N. .N.ANRV.N.N. .N.ANRV.N.NV. .N.ANRV.N.O. .N.ANRV.N.OV. .N.ANRV.OV. .N.ANV.A.N. .N.ANV.A.NV. .N.ANV.AN. .N.ANV.AN.O. .N.ANV.C.O. .N.ANV.G. .N.ANV.I.A.N. .N.ANV.I.A.O. .N.ANV.I.N.NV. .N.ANV.I.N.O. .N.ANV.I.OV. .N.ANV.N. .N.ANV.N.N. .N.ANV.N.NV. .N.ANV.N.O. .N.ANV.NV. .N.ANV.NV.G. .N.ANV.NV.N. .N.ANV.NV.NV. .N.ANV.NV.NV.NV.O. .N.ANV.NV.O. .N.ANV.O. .N.ANV.OV. .N.ANV.U.N.N. .N.ANV.U.N.NV. .N.AR.AN.O. .N.AR.OV.O. .N.AV.N.N. .N.B.C.O. .N.B.C.OV. .N.B.N.U.NV. .N.B.NV.U.N. .N.C.AN.NV. .N.C.N. .N.C.N.N. .N.C.N.O. .N.C.O. .N.G. .N.G.A.N. .N.G.AN.N.N.O. .N.G.ANRV.N. .N.G.ANV.OV. .N.G.I.O. .N.G.N. .N.G.N.N. .N.G.N.O. .N.G.N.P.NV.O. .N.G.NV. .N.G.NV.N. .N.G.NV.O. .N.G.O. .N.G.OV. .N.G.P.N.N. .N.G.P.S.O. .N.G.P.S.OV. .N.G.S.O. .N.G.U.A.N. .N.G.U.G. .N.G.U.N.N. .N.G.U.N.NV. .N.G.U.NV.O. .N.I.A.A.A.N. .N.I.A.A.A.O. .N.I.A.A.N. .N.I.A.A.N.N. .N.I.A.A.NV. .N.I.A.A.NV.N. .N.I.A.A.NV.NV. .N.I.A.A.O. .N.I.A.AN.AN.O. .N.I.A.AN.G. .N.I.A.AN.N. .N.I.A.AN.N.G. .N.I.A.AN.NV. .N.I.A.AN.O. .N.I.A.ANV.NV. .N.I.A.ANV.OV. .N.I.A.G.O. .N.I.A.N. .N.I.A.N.I.AN.N. .N.I.A.N.N. .N.I.A.N.NV. .N.I.A.N.O. .N.I.A.N.U.A.N. .N.I.A.N.U.AN.N. .N.I.A.N.U.N. .N.I.A.NV.G. .N.I.A.NV.N. .N.I.A.NV.N.O. .N.I.A.NV.NV. .N.I.A.NV.O. .N.I.A.O. .N.I.A.O.I.N.N. .N.I.A.O.U.N. .N.I.A.O.U.O. .N.I.A.OV. .N.I.A.OV.P.N.N. .N.I.A.OV.P.O. .N.I.A.U.A.N. .N.I.A.U.A.NV. .N.I.A.U.AN.N. .N.I.A.U.AN.NV. .N.I.A.U.AN.O. .N.I.A.U.G.O. .N.I.A.U.N.G. .N.I.A.U.N.O. .N.I.AN.A.G. .N.I.AN.A.O. .N.I.AN.AN.N. .N.I.AN.AN.O. .N.I.AN.N. .N.I.AN.N.N. .N.I.AN.N.NV. .N.I.AN.N.O. .N.I.AN.N.OV. .N.I.AN.N.U.A.N. .N.I.AN.N.U.N. .N.I.AN.NV. .N.I.AN.O. .N.I.AN.O.I.ANR.O. .N.I.AN.OV. .N.I.AN.OV.I.G.O. .N.I.AN.U.A.G. .N.I.AN.U.A.O. .N.I.AN.U.N.G. .N.I.AN.U.O.G. .N.I.ANR.A.NV. .N.I.ANR.A.O. .N.I.ANR.AN.N.NV. .N.I.ANR.N.NV. .N.I.ANR.O. .N.I.ANRV.N.O. .N.I.ANV.AN.O. .N.I.ANV.ANV.N. .N.I.ANV.I.A.N.O. .N.I.ANV.N. .N.I.ANV.NV.N. .N.I.ANV.NV.NV. .N.I.ANV.O. .N.I.ANV.O.T.O. .N.I.ANV.OV. .N.I.ANV.U.AN.O. .N.I.AR.A.O. .N.I.AR.OV.N. .N.I.AV.ANV.NV. .N.I.AV.N. .N.I.AV.NV. .N.I.AV.O. .N.I.AV.OV. .N.I.G.A.G. .N.I.G.A.O. .N.I.G.AN.NV.N. .N.I.G.N.N. .N.I.G.N.NV.U.N. .N.I.G.P.O. .N.I.N.A.G. .N.I.N.A.N. .N.I.N.A.OV. .N.I.N.AN.N. .N.I.N.AN.NV. .N.I.N.AN.O. .N.I.N.AN.OV. .N.I.N.ANRV.N. .N.I.N.ANV.N. .N.I.N.G.N. .N.I.N.G.NV. .N.I.N.G.U.A.N. .N.I.N.I.A.G. .N.I.N.I.A.O. .N.I.N.I.N.OV. .N.I.N.I.O. .N.I.N.I.OV. .N.I.N.N. .N.I.N.N.I.AN.NV. .N.I.N.N.N. .N.I.N.N.N.G. .N.I.N.N.NV. .N.I.N.N.O. .N.I.N.N.U.AN.O. .N.I.N.N.U.G. .N.I.N.N.U.N. .N.I.N.N.U.N.N. .N.I.N.N.U.O.G. .N.I.N.NV. .N.I.N.NV.N. .N.I.N.NV.P.N.N. .N.I.N.NV.U.NV. .N.I.N.NV.U.NV.N. .N.I.N.O. .N.I.N.O.P.N.O. .N.I.N.P.ANV.N.N. .N.I.N.P.N.NV.N. .N.I.N.Q.N. .N.I.N.S.N. .N.I.N.T.N. .N.I.N.T.O. .N.I.N.U.A.G. .N.I.N.U.A.N. .N.I.N.U.AN.G. .N.I.N.U.AN.N. .N.I.N.U.AN.O. .N.I.N.U.N.N. .N.I.N.U.N.O. .N.I.N.U.O.N. .N.I.NV.A.OV. .N.I.NV.AN.O. .N.I.NV.ANR.NV. .N.I.NV.C.NV. .N.I.NV.N. .N.I.NV.N.O. .N.I.NV.N.U.N. .N.I.NV.N.U.NV.N. .N.I.NV.NV.N. .N.I.NV.O. .N.I.NV.OV. .N.I.NV.U.ANV.NV. .N.I.NV.U.N. .N.I.NV.U.NV. .N.I.NV.U.NV.A.N. .N.I.O. .N.I.O.G.U.G.N. .N.I.O.I.A.O. .N.I.O.I.AN.N. .N.I.O.I.G.O. .N.I.O.I.N.N. .N.I.O.I.NV.O. .N.I.O.I.O. .N.I.O.N.U.G. .N.I.O.NV.NV. .N.I.O.T.O. .N.I.O.T.OV. .N.I.O.U.A.O. .N.I.O.U.N.N. .N.I.O.U.O. .N.I.O.U.O.OV. .N.I.OV. .N.I.OV.U.O. .N.I.R.A.N. .N.I.R.A.N.NV. .N.I.R.A.NV. .N.I.R.AN.O. .N.I.R.AN.OV. .N.I.S.A.O. .N.I.S.AN.O. .N.I.S.T.N. .N.N. .N.N.A.G. .N.N.A.N. .N.N.A.NV. .N.N.A.OV. .N.N.AN. .N.N.AN.N. .N.N.AN.N.I.A.N. .N.N.AN.NV. .N.N.ANRV.N. .N.N.ANRV.NV. .N.N.ANV. .N.N.ANV.N. .N.N.ANV.NV. .N.N.ANV.OV. .N.N.APR.G. .N.N.B.O. .N.N.C.N. .N.N.C.N.O. .N.N.C.O. .N.N.G. .N.N.G.ANV. .N.N.G.N. .N.N.G.NV. .N.N.G.O. .N.N.G.OV. .N.N.I.A.A.NV. .N.N.I.A.G. .N.N.I.A.N. .N.N.I.A.N.I.O. .N.N.I.A.N.O. .N.N.I.A.NV. .N.N.I.A.NV.N. .N.N.I.A.NV.OV. .N.N.I.A.O. .N.N.I.AN.N. .N.N.I.AN.N.N. .N.N.I.AN.N.U.N. .N.N.I.AN.NV. .N.N.I.AN.O. .N.N.I.AN.O.U.N. .N.N.I.ANRV.NV. .N.N.I.N.AN.O. .N.N.I.N.ANPR.A.O. .N.N.I.N.N. .N.N.I.N.NV. .N.N.I.N.O. .N.N.I.N.S.N. .N.N.I.N.U.N. .N.N.I.NV.AN.O. .N.N.I.NV.G.O. .N.N.I.NV.N. .N.N.I.O. .N.N.I.O.I.O. .N.N.I.O.Q.N. .N.N.I.O.U.O. .N.N.I.OV. .N.N.N. .N.N.N.ANRV.NV. .N.N.N.ANV. .N.N.N.ANV.N. .N.N.N.C. .N.N.N.G. .N.N.N.I.A.NV. .N.N.N.N. .N.N.N.N.N. .N.N.N.N.NV. .N.N.N.N.O. .N.N.N.NV. .N.N.N.O. .N.N.N.OV. .N.N.NV. .N.N.NV.N. .N.N.NV.NV. .N.N.NV.O. .N.N.NV.OV. .N.N.O. .N.N.O.A.I.N.N. .N.N.O.I.AN.AN.O. .N.N.O.I.N.N. .N.N.O.I.N.U.G. .N.N.O.N. .N.N.O.NV. .N.N.O.OV. .N.N.OV. .N.N.P.N.AN.N. .N.N.P.NV.A.NV. .N.N.S.N.O. .N.N.S.O. .N.N.T.A.N. .N.N.U.A.A.N. .N.N.U.A.A.N.N. .N.N.U.A.G. .N.N.U.A.N. .N.N.U.A.O. .N.N.U.AN.O. .N.N.U.ANV.N. .N.N.U.G. .N.N.U.N. .N.N.U.N.N. .N.N.U.N.N.N. .N.N.U.N.N.O. .N.N.U.N.O. .N.N.U.N.OV. .N.N.U.NV.N. .N.N.U.O. .N.N.U.O.G. .N.NP. .N.NRV. .N.NV. .N.NV.A.N. .N.NV.A.OV. .N.NV.AN. .N.NV.AN.N. .N.NV.ANV. .N.NV.ANV.N. .N.NV.C.N. .N.NV.G. .N.NV.G.N. .N.NV.G.O. .N.NV.I.A.N. .N.NV.I.A.NV. .N.NV.I.AN.N. .N.NV.I.AN.O. .N.NV.I.N.N. .N.NV.I.N.NV. .N.NV.I.N.S.N. .N.NV.I.N.U.AN.N. .N.NV.I.NV.U.N. .N.NV.I.O. .N.NV.I.OV. .N.NV.N. .N.NV.N.G. .N.NV.N.N. .N.NV.N.N.N. .N.NV.N.N.N.ANV.N. .N.NV.N.NV. .N.NV.N.NV.N. .N.NV.N.O. .N.NV.N.OV. .N.NV.N.U.N. .N.NV.NV. .N.NV.NV.I.O. .N.NV.NV.N. .N.NV.NV.N.N. .N.NV.NV.NV. .N.NV.NV.NV.N. .N.NV.NV.O. .N.NV.O. .N.NV.O.I.AN.AN.O. .N.NV.O.I.N.N. .N.NV.O.I.NV.OV. .N.NV.O.I.O. .N.NV.O.P.AN.O. .N.NV.O.U.O. .N.NV.OV. .N.NV.P.AN.N. .N.NV.P.G.N. .N.NV.P.N.N. .N.NV.P.NV.N. .N.NV.P.NV.NV. .N.NV.P.OV. .N.NV.P.R.O.A.NV. .N.NV.Q.N. .N.NV.S.N. .N.NV.T.N.S.N. .N.NV.U.AN.ANV.NV.N. .N.NV.U.AN.N. .N.NV.U.N.G. .N.NV.U.N.N. .N.NV.U.N.NV. .N.NV.U.NV.N. .N.NV.U.NV.NV. .N.O. .N.O.G.AN.N. .N.O.I.A.G. .N.O.I.A.N.O. .N.O.I.A.O. .N.O.I.A.O.U.G. .N.O.I.AN.AN.O. .N.O.I.AN.N.N. .N.O.I.ANV.N.N. .N.O.I.N.ANRV.N. .N.O.I.N.O. .N.O.I.NV.O. .N.O.N. .N.O.NV.N. .N.O.O. .N.O.OV. .N.O.P.A.N.O. .N.O.P.A.O. .N.O.P.N.N. .N.O.P.N.OV. .N.O.P.O. .N.O.Q.A.OV. .N.O.Q.N.O. .N.O.U.A.NV.O. .N.O.U.A.OV. .N.O.U.AN.O. .N.O.U.ANRV.O. .N.O.U.N.O. .N.O.U.N.OV. .N.O.U.NV.N. .N.O.U.O. .N.O.U.OV. .N.OV. .N.OV.I.A.N. .N.OV.I.A.O. .N.OV.I.AN.NV. .N.OV.I.ANV.N. .N.OV.I.N.N. .N.OV.I.N.NV. .N.OV.I.N.O. .N.OV.I.O. .N.OV.I.OV. .N.OV.P.AN.N. .N.OV.P.OV. .N.OV.U.A.O. .N.OV.U.ANV.OV. .N.OV.U.N.N. .N.OV.U.O. .N.P.N.NV.ANV.N. .N.P.N.NV.N.N. .N.Q.N. .N.Q.NV.NV. .N.R.N. .N.S.A.N. .N.S.AN. .N.S.AN.N. .N.S.ANV. .N.S.N. .N.S.N.ANV.O. .N.S.N.N. .N.S.N.N.N. .N.S.N.N.N.N. .N.S.N.O. .N.S.O. .N.S.O.U.N.N. .N.S.S.N. .N.S.U.N.O. .N.S.U.S.O. .N.T.A.A.NV. .N.T.A.A.NV.N. .N.T.A.G.N. .N.T.AN.A.NV. .N.T.AN.AN.O. .N.T.ANR.NV.N. .N.T.ANV.A.O. .N.T.ANV.N.NV. .N.T.ANV.N.O. .N.T.ANV.NV.N. .N.T.G.ANRV.N. .N.T.N.I.OV. .N.T.N.N.U.O. .N.T.N.NV.N. .N.T.NV.AN.A.G. .N.U.A.G.ANRV.N.NV. .N.U.A.N.O. .N.U.AN.N. .N.U.AN.NV. .N.U.ANR.NV.N. .N.U.ANRV.N.N. .N.U.ANRV.N.N.O. .N.U.ANV.AN.O. .N.U.ANV.G. .N.U.ANV.N. .N.U.ANV.O. .N.U.G. .N.U.G.N. .N.U.G.O. .N.U.G.OV. .N.U.N. .N.U.N.A.OV. .N.U.N.AN.N. .N.U.N.ANV.OV. .N.U.N.G. .N.U.N.I.A.A.NV. .N.U.N.I.A.O. .N.U.N.I.AN.O. .N.U.N.I.G.N. .N.U.N.I.N.O. .N.U.N.I.N.OV. .N.U.N.N. .N.U.N.N.N. .N.U.N.N.O. .N.U.N.N.OV. .N.U.N.NV. .N.U.N.NV.N. .N.U.N.NV.O. .N.U.N.NV.OV. .N.U.N.O. .N.U.N.OV. .N.U.N.P.ANV.N. .N.U.NV. .N.U.NV.G. .N.U.NV.N. .N.U.NV.NV. .N.U.NV.O. .N.U.NV.OV. .N.U.O.G. .N.U.O.I.A.N. .N.U.O.N. .NR.NV. .NV.A.A.N.O. .NV.A.AN.O. .NV.A.ANV. .NV.A.ANV.N. .NV.A.ANV.OV.U.OV. .NV.A.I.ANV.N. .NV.A.N. .NV.A.N.N. .NV.A.N.NV. .NV.A.N.NV.O. .NV.A.N.O. .NV.A.NV. .NV.A.NV.N. .NV.A.NV.O. .NV.A.O. .NV.A.O.U.NV.O. .NV.A.OV. .NV.AN.I.ANV.NV. .NV.AN.I.N.G. .NV.AN.I.N.NV. .NV.AN.N. .NV.AN.N.N. .NV.AN.N.NV. .NV.AN.N.OV. .NV.AN.NV. .NV.AN.O. .NV.AN.O.P.R.AN.N. .NV.AN.OV. .NV.ANR.NV.N. .NV.ANV.A.NV. .NV.ANV.ANV.NV. .NV.ANV.G. .NV.ANV.I.A.N. .NV.ANV.N. .NV.ANV.N.N. .NV.ANV.N.OV. .NV.ANV.NV. .NV.ANV.NV.N. .NV.ANV.O. .NV.AOV.U.OV. .NV.B.C.N. .NV.B.C.O. .NV.B.C.OV. .NV.B.N.O. .NV.B.N.U.N. .NV.B.NV.U.NV. .NV.B.S.O. .NV.C.A.N. .NV.C.A.N.N.N. .NV.C.A.N.O. .NV.C.A.O. .NV.C.N. .NV.C.N.N. .NV.C.N.O. .NV.C.NV. .NV.C.NV.NV. .NV.C.O. .NV.C.OV. .NV.G. .NV.G.ANV. .NV.G.I.O. .NV.G.N. .NV.G.O. .NV.G.OV. .NV.G.U.G. .NV.G.U.NV.G. .NV.G.U.O.G. .NV.I.A.A.N. .NV.I.A.A.NV. .NV.I.A.A.O. .NV.I.A.ANR.OV. .NV.I.A.G. .NV.I.A.G.U.N. .NV.I.A.N. .NV.I.A.N.I.N. .NV.I.A.N.NV. .NV.I.A.N.O. .NV.I.A.N.U.G. .NV.I.A.N.U.N. .NV.I.A.N.U.O. .NV.I.A.NV. .NV.I.A.NV.N. .NV.I.A.NV.NV. .NV.I.A.O. .NV.I.A.OPV. .NV.I.A.OV. .NV.I.A.U.A.G. .NV.I.A.U.A.N. .NV.I.A.U.A.O. .NV.I.AG.O. .NV.I.AN.A.N. .NV.I.AN.A.O. .NV.I.AN.AN.N. .NV.I.AN.AN.NV. .NV.I.AN.AN.O. .NV.I.AN.ANR.OV. .NV.I.AN.ANV.OV. .NV.I.AN.N. .NV.I.AN.N.I.N.N. .NV.I.AN.N.N. .NV.I.AN.N.N.OV. .NV.I.AN.N.U.N.O. .NV.I.AN.O. .NV.I.AN.OV. .NV.I.AN.U.A.O. .NV.I.AN.U.AV.O. .NV.I.AN.U.N.N. .NV.I.AN.U.O.G. .NV.I.ANR.N.NV. .NV.I.ANRV.U.A.G. .NV.I.ANV.O. .NV.I.ANV.OV. .NV.I.APRV.AN.N. .NV.I.AV.N. .NV.I.AV.NV. .NV.I.AV.O. .NV.I.C.AN.ANV.O. .NV.I.G.N. .NV.I.G.NV. .NV.I.G.O. .NV.I.G.OPV. .NV.I.G.OV. .NV.I.N.ANRV.N. .NV.I.N.G. .NV.I.N.I.OV.U.OV. .NV.I.N.N. .NV.I.N.N.N. .NV.I.N.N.U.O. .NV.I.N.NV. .NV.I.N.NV.NV. .NV.I.N.O. .NV.I.N.OV. .NV.I.N.S.N. .NV.I.N.U.A.N. .NV.I.N.U.AN.O. .NV.I.N.U.N.O. .NV.I.NV.G. .NV.I.NV.G.NV. .NV.I.NV.N. .NV.I.NV.N.N. .NV.I.NV.NV. .NV.I.NV.O. .NV.I.NV.OV. .NV.I.O.I.NV.A.N. .NV.I.O.N. .NV.I.O.N.U.G. .NV.I.O.NV. .NV.I.O.NV.U.AN.G. .NV.I.O.OV. .NV.I.O.U.O.OV. .NV.I.OV.N. .NV.I.OV.NV. .NV.I.R.A.O. .NV.I.S.N.OV. .NV.N. .NV.N.A.N. .NV.N.A.O. .NV.N.AN. .NV.N.AN.N. .NV.N.AN.NV. .NV.N.ANRV.O. .NV.N.ANV.N. .NV.N.B.NV.U.NV. .NV.N.G. .NV.N.G.N. .NV.N.G.NV. .NV.N.G.O. .NV.N.I.A.G. .NV.N.I.A.NV. .NV.N.I.A.O. .NV.N.I.AN.N. .NV.N.I.AN.NV. .NV.N.I.AN.O. .NV.N.I.C.OV. .NV.N.I.N.N. .NV.N.I.N.O. .NV.N.I.O. .NV.N.N. .NV.N.N.A.N. .NV.N.N.G. .NV.N.N.I.NV. .NV.N.N.N. .NV.N.N.N.NV. .NV.N.N.NV. .NV.N.N.O. .NV.N.N.OV. .NV.N.NV. .NV.N.NV.I.N. .NV.N.NV.N. .NV.N.NV.NV. .NV.N.NV.O. .NV.N.O. .NV.N.O.I.N. .NV.N.OV. .NV.N.P.A.G. .NV.N.P.A.N. .NV.N.P.AN.NV. .NV.N.P.N. .NV.N.P.N.N. .NV.N.P.O. .NV.N.S.N. .NV.N.U.A.N. .NV.N.U.AN.N. .NV.N.U.AN.O. .NV.N.U.N. .NV.N.U.N.N. .NV.N.U.N.NV. .NV.N.U.NV.N. .NV.N.U.NV.N.N. .NV.N.U.O. .NV.NRV. .NV.NV. .NV.NV.A.O. .NV.NV.A.OV. .NV.NV.AG.NV. .NV.NV.AN.AN.O. .NV.NV.AN.O. .NV.NV.AV.G. .NV.NV.AV.O. .NV.NV.B.C.O. .NV.NV.C. .NV.NV.G. .NV.NV.G.I.N. .NV.NV.G.OV. .NV.NV.I.A.O. .NV.NV.I.AN.N. .NV.NV.I.ANV.NV. .NV.NV.I.N.I.O. .NV.NV.I.N.N. .NV.NV.I.N.NV. .NV.NV.I.NV.O. .NV.NV.N. .NV.NV.N.I.A.NV. .NV.NV.N.I.A.NV.NV. .NV.NV.N.I.AN.O. .NV.NV.N.N. .NV.NV.N.N.I.ANV.N. .NV.NV.N.NV. .NV.NV.N.O. .NV.NV.N.OV. .NV.NV.NV. .NV.NV.NV.N. .NV.NV.NV.O. .NV.NV.O. .NV.NV.OV. .NV.NV.U.AV.NV. .NV.NV.U.NV.N. .NV.NV.U.NV.NV. .NV.O. .NV.O.I.A.G. .NV.O.I.A.N. .NV.O.I.A.N.G. .NV.O.I.A.N.U.G. .NV.O.I.A.NV.N. .NV.O.I.A.O. .NV.O.I.AN.A.N.G. .NV.O.I.AN.AN.O. .NV.O.I.AN.N. .NV.O.I.AN.NV. .NV.O.I.ANR.N.NV. .NV.O.I.N.N. .NV.O.I.N.NV. .NV.O.I.N.O. .NV.O.I.N.U.A.O. .NV.O.I.NV.N. .NV.O.I.NV.N.OV. .NV.O.I.NV.U.N. .NV.O.I.NV.U.N.O. .NV.O.I.O. .NV.O.P.AN.N. .NV.O.P.ANRV.G. .NV.O.P.ANRV.G.OV. .NV.O.U.A.N. .NV.O.U.A.O. .NV.O.U.N.O. .NV.O.U.NV.OV. .NV.O.U.O. .NV.O.U.OV. .NV.OV. .NV.OV.I.A.G. .NV.OV.I.A.N.O. .NV.OV.I.A.O. .NV.OV.I.AN.N. .NV.OV.I.AN.OV. .NV.OV.I.AV.A.OV. .NV.OV.I.N.NV. .NV.OV.I.N.U.N. .NV.OV.I.O. .NV.OV.U.N.OV. .NV.OV.U.NV.O. .NV.OV.U.NV.OV. .NV.Q.A.NV. .NV.Q.AN.NV. .NV.Q.ANV.N. .NV.Q.ANV.NV. .NV.Q.N. .NV.Q.N.N. .NV.S.N. .NV.S.N.O. .NV.S.O. .NV.T.A.N. .NV.T.AN.N. .NV.T.AN.NV. .NV.T.AN.O. .NV.T.ANV.A.N. .NV.T.AV.N. .NV.T.AV.O. .NV.T.N. .NV.T.N.N. .NV.T.N.NV. .NV.T.NV.NV. .NV.T.O. .NV.U.A.N. .NV.U.A.NV. .NV.U.A.O. .NV.U.AN.AN.O. .NV.U.AN.G. .NV.U.AN.N. .NV.U.AN.NV. .NV.U.AN.O. .NV.U.AN.OV. .NV.U.ANV.AN.N.N. .NV.U.ANV.N. .NV.U.ANV.NV. .NV.U.ANV.O. .NV.U.ANV.OV. .NV.U.N.G. .NV.U.N.I.N.O. .NV.U.N.I.N.OV. .NV.U.N.I.O. .NV.U.N.I.OV. .NV.U.N.N. .NV.U.N.NV. .NV.U.N.O. .NV.U.N.OV. .NV.U.NV. .NV.U.NV.G. .NV.U.NV.I.N.O. .NV.U.NV.N. .NV.U.NV.NV. .NV.U.NV.O. .NV.U.NV.OV. .NV.U.O. .NV.U.OV. .O.A.AN.N.O. .O.AN.OV. .O.ANPR.A.ANV.OV. .O.ANPR.A.OV. .O.ANPR.N.O. .O.ANPR.N.OV. .O.B.A.OV. .O.B.AN.O. .O.B.C.OV. .O.B.N.U.N. .O.G. .O.G.AN.AN.N.N. .O.G.O. .O.I.A.A.N.N. .O.I.A.A.O. .O.I.A.AN.O. .O.I.A.AN.OV. .O.I.A.AR.OV. .O.I.A.N. .O.I.A.N.NV.N. .O.I.A.N.O. .O.I.A.N.OV. .O.I.A.N.U.N. .O.I.A.N.U.O. .O.I.A.NV.N.O. .O.I.A.O. .O.I.A.O.U.O. .O.I.A.U.A.A.O. .O.I.A.U.A.N.N. .O.I.AN.AN.O. .O.I.AN.G. .O.I.AN.N. .O.I.AN.N.I.NV.G. .O.I.AN.N.I.O. .O.I.AN.N.I.O.N. .O.I.AN.N.N.NV. .O.I.AN.N.NV.O. .O.I.AN.O. .O.I.ANV.A.NV. .O.I.ANV.A.O. .O.I.ANV.AN.N. .O.I.ANV.N. .O.I.ANV.NV.A.AN.O. .O.I.ANV.O. .O.I.AR.OV.O. .O.I.AR.U.A.N. .O.I.AV.ANV.OV. .O.I.G.A.O. .O.I.G.AN.A.O. .O.I.G.N.N. .O.I.G.N.OV. .O.I.G.P.O. .O.I.N.A.N.OV. .O.I.N.A.NV. .O.I.N.AN.N. .O.I.N.G. .O.I.N.I.A.O. .O.I.N.I.ANV.NV. .O.I.N.N. .O.I.N.N.N. .O.I.N.N.N.N. .O.I.N.N.O. .O.I.N.NV.N. .O.I.N.NV.NV. .O.I.N.NV.O. .O.I.N.O. .O.I.N.OV.U.A.O. .O.I.N.S.N. .O.I.N.S.N.N. .O.I.N.S.N.N.N. .O.I.N.U.A.N. .O.I.N.U.A.O. .O.I.N.U.G. .O.I.N.U.N. .O.I.N.U.N.N. .O.I.NV.AN.O. .O.I.NV.N. .O.I.NV.N.U.NV.N. .O.I.NV.NV.O. .O.I.O.G.U.N.N. .O.I.O.I.A.O. .O.I.O.NV.U.N. .O.I.O.NV.U.N.N. .O.I.O.U.O. .O.I.O.U.OV. .O.I.R.A.OV. .O.N. .O.N.N. .O.N.N.N. .O.N.NV. .O.N.O. .O.N.U.G. .O.N.U.N. .O.N.U.N.O. .O.N.U.NV. .O.N.U.NV.N. .O.NPR.N.NV. .O.NPR.N.OV. .O.O. .O.P.A.ANR.O. .O.P.A.G. .O.P.A.N. .O.P.A.N.O. .O.P.A.N.OV. .O.P.A.NV. .O.P.A.O. .O.P.A.OV. .O.P.AN.N.OV. .O.P.AN.NV.OV. .O.P.R.AN.O. .O.P.R.AN.OV. .O.Q.A.O. .O.Q.A.OV. .O.Q.N. .O.Q.N.N.O. .O.Q.NV.S.O. .O.T.A.ANV.I.A.G. .O.T.A.O.U.N.O. .O.T.AN.AN.O. .O.U.A.O. .O.U.A.OV. .O.U.AN.O. .O.U.AN.OV. .O.U.AN.OV.I.AN.N. .O.U.ANV.O. .O.U.ANV.OV. .O.U.N.O. .O.U.N.O.I.OV. .O.U.NV.I.N.G. .O.U.O. .O.U.O.I.A.N. .O.U.O.I.ANRV.G. .O.U.O.I.N.NV.N. .O.U.OV. .ORV.N. .OV.I.A.G. .OV.I.A.N. .OV.I.A.N.G. .OV.I.A.N.G.O. .OV.I.A.N.O. .OV.I.A.NV. .OV.I.A.O. .OV.I.A.OV. .OV.I.AG.N. .OV.I.AN.G. .OV.I.AN.N. .OV.I.AN.N.A.O. .OV.I.AN.N.OV. .OV.I.AN.O. .OV.I.AN.O.I.NV.OV. .OV.I.AN.OV. .OV.I.ANR.ANV.O. .OV.I.N.N. .OV.I.N.N.U.O.G. .OV.I.N.O. .OV.I.N.OV. .OV.I.NV.I.A.A.O. .OV.I.NV.N. .OV.I.NV.NV.U.N. .OV.N. .OV.N.ANV. .OV.O. .OV.P.A.ANRV.A.N. .OV.P.A.N. .OV.P.A.O. .OV.P.A.OV. .OV.P.N.N. .OV.P.N.O. .OV.P.NV.O. .OV.Q.N. .OV.U.ANV.N.I.N.N. .OV.U.O. .OV.U.OV. .R.A.A.A.NV. .R.A.A.A.NV.NV. .R.A.A.N. .R.A.A.NV. .R.A.A.NV.NV. .R.A.A.O. .R.A.A.OV. .R.A.AN.G. .R.A.AN.N.OV. .R.A.AN.NV. .R.A.AN.O. .R.A.AN.OV. .R.A.ANV.O. .R.A.AR.OV. .R.A.AV.N. .R.A.AV.N.NV. .R.A.G.O. .R.A.I.A.OV. .R.A.I.N.O. .R.A.I.N.OV. .R.A.N. .R.A.N.A.N. .R.A.N.ANV.N. .R.A.N.N. .R.A.N.NV. .R.A.N.NV.O. .R.A.N.O. .R.A.N.OV. .R.A.NV.N. .R.A.NV.NV. .R.A.NV.NV.O. .R.A.NV.O. .R.A.NV.OV. .R.A.O. .R.A.O.I.N.OV. .R.A.U.ANRV.N.NV. .R.A.U.R.ANRV.N.NV. .R.AN.A.N. .R.AN.A.NV. .R.AN.A.O. .R.AN.A.OV. .R.AN.AN.NV. .R.AN.AN.O. .R.AN.ANV.NV. .R.AN.N.N. .R.AN.N.NV. .R.AN.N.O. .R.AN.NV.N. .R.AN.NV.OV. .R.AN.O. .R.ANRV.N.NV. .R.ANV.A.NV. .R.ANV.AN.NV. .R.ANV.ANR.OV. .R.ANV.ANV.NV. .R.ANV.N.NV. .R.N.A.A.N.NV. .R.N.N. .R.N.N.NV. .R.O.A.NV. .R.R.A.N. .R.R.A.NV. .R.R.AN.N. .S.A.N.O. .S.AN.N.N. .S.G.N. .S.G.O. .S.N.A.N. .S.N.A.N.N. .S.N.A.N.O. .S.N.A.NV. .S.N.A.NV.N. .S.N.A.NV.O. .S.N.AN.A.O. .S.N.AN.AN.O. .S.N.AN.N. .S.N.N. .S.N.N.AN.O. .S.N.N.I.AN.N.N. .S.N.N.N. .S.N.N.NV. .S.N.N.NV.N. .S.N.N.O. .S.N.NV. .S.N.NV.N. .S.N.S.O. .S.N.U.N.O. .S.U.S.AN.O. .S.U.S.N. .S.U.S.N.O. .S.U.S.O. 13 ANGR bleeding blinding blooming cracking darkling flipping freaking frigging fucking passing raving running spanking 3 ANPRV like part round 9 ANPR inside next opposite outside over ower past through underneath 1 ANPV pace 7 ANP anti ben following given mid minus vice 70 ANRV ajar back backcast bad bare bear best better big blind clean clear counter crisscross damn dead double fast feel fine flat forward free gain half heavy home jolly just last left light long manifold nought okay overnight parallel pat plain plum plumb pretty queer rear retail reverse right room sharp short slack sleek slow smooth still stone super top trim true underground upfront upstage well wholesale wild worst wrong zigzag 133 ANR accelerando accompagnato adagietto adagio addolorato agape agitato allegro almost andante anon backstage batshit beaucoup bimonthly biweekly breech bush cantabile cold contrary crazy daily deep diminuendo diviso downhill downslope downstage downstairs downtown due early east easterly eastward everloving extempore extra far faster feminine forte fortissimo fortississimo fortnightly friendly good grandioso great hard hawse here high hourly ill incog incognito inland instant late latest likely loco main midcalf midgame midmarket midstorm midweek midwinter mighty moderato monthly more most nightly nonstop north northerly northward now orderly outstation overall overhead overside postcareer precious prefeminism prior quarterly quick real saddleback sciolto several sforzando sideway small solid sooner sore south southerly southward staccato straight straightaway stretto stupid sweet tandem tenuto thick unlikely upcountry uphill upright upslope verbatim vigoroso weekly west westerly westward whole wicked wide windward witherward worse yearly 598 ANV abrupt abstract accordion ace acute addle advance affine agglomerate aggregate aggro airmail alert alien alternate antic antique ape arch arm aspirate associate astroturf audible aught autograph average azure baby backhand bald ballpark bandy base batch battle bay beat beef bent beta bigger birth black blag blank blanket blue bluff blunt bodge bogan bombast bone bootleg born boss bottom bound brag brand brave brick brief broadcast bronze brown budget buff buffer bulk bull bully bum bung burlesque bust calm camp canary cant carpetbag case cat center champion chance charcoal charter chelate chicken chill chuff clambake class close cloverleaf clutch colly color commonplace compact complex composite compound concave concrete conditionate confederate conglomerate conscript content coo coordinate copper copycat copyleft corkscrew cosy cotton counterfeit cover cozy crack crank crap crash craven cream credential crimson cripple crisp crook cross crown crump cuckoo cut damask damp dapple deadpan deal dearn debit decrescendo degenerate delipidate dern diamond dink discount disquiet divine dop dope doss downcast draft dread drunk duff dun duplex duplicate dwarf ebb elect empty epoxy equal evergreen excommunicate exempt expatriate export express extravasate fab faint fair fake fallow fancy farewell fat favorite favourite fawn fay fear feint fell fellow filk firm fit flagellate flambe flame flank flannel flash flatter fleet flip flirt flit flush fly fore foreset foster foul frail frank fraught freak freelance french fribble fringe frisk frit frolic front full fun game garden gas gilt gimp ginger goan gorge graduate grave gray grayscale greek green grey greyscale grill grit grizzle gross ground grouse grue gun gut gutter hackney hallow hash head hench het heterodyne hinder hollow hood hurt inboard incarnadine inchoate incuse initial insensate inspiral intermediate interwiki intimate invalid inverse involute iron jade jet joint keen key kit kvetch labrish lag lame land lash lateral laureate lay lead lease leather leer letterbox levant level lighter lime limit limp lit lite lobster loose low lush magic mail mainstream major manifest mank marcel market maroon mass master mean meet mellow mere metric minor mint minute miscast miscome mock model moderate monotone monster moot mordant motive motor multiplex mum murk mushroom mute neap necklace negative net neuter noncuple nucleate null number oblique occult ochre opaque open opiate orange ordinate orphan outsize overcast overweight oyster pale palsy panic pap paper pappyshow patent peach pedal pilot pimp pink pinpoint pirate plane plus pocket polish poll pony pop port precast precedent precipitate premier preorder preseed present primary prime print proctor profane prompt proof proxy puke punk purple putty quack quad quadruplicate quarter quicksilver quiet quintate quintuple quintuplicate radge rainbow rank raspberry raven rebound recce red reflex refuse remainder remote renate reprobate retrofit retrograde ripe roast rodomontade rogue romance rose rouge rough rubbish run rush sage salt sand sandwich sanguine savage scotch scratch scrimp scrub scud secret seed seesaw select separate septimate set sextate sextuplicate shallow sham shank sheen sheer shit shite shoal shot shotgun shy sick sickle signal simple single skill skimp slate slick slight slim slurry smock smoke snub snug sob sole solo sound sour spalt spanish spare spin spiral splay split sport spruce square squat stable starch steam steep sticky stiff stiletto stock stonewall stray subject sublime submarine subordinate suction sulfur sunder superordinate surrogate suspect swank swell swike swish taboo tally tarry tart tartan tender tense tensor test thin thunk tickle tin tinct tinsel token toom total tough trade traitor traunch treble trial trick trip triple truck turnkey twin twoc underline underwater underweight unfavorite upcast uplift upset upskirt upstart vassal veg verbal vintage void wallow wanton waste wax wee weed weekend weird welcome welter wet whiff wick wildcat windup wizard wont wood yellow young 5301 AN abdicant abdominal abducent abecedarian abelian aberdonian aberrant abessive abhesive abirritant abkhasian abkhaz abkhazian ablative ablauting abluent ablutophiliac abnormal abolitionist aboriginal abortifacient abortogenic abram abrasive absolute absolutist absolvent absorbent abstergent abstersive abstinent abstractionist absurd absurdist abyssinian academic acadian acanthopterygian acaricide acatalectic acataleptic accadian acceptant accessary accessorial accessory accidental accusative accused acephalan acerate acescent achaean achaian achean acheulean acheulian acid acmeist acoelomate acoustic acrocentric acrocephalic acrocoracoid acrodont acromegalic acrylic actinoid actinopterygian active actual adamant adamantium addictive additive adelaidean adelaidian adenoid adept adessive adherent adhesive adipose adjaran adjarian adjectival adjective adjoint adjunct adjunctive adjutant adjuvant administrant adnominal adolescent adoptionist adrenal adsorbent adult adulterine adventist adverbial adversative advisory aeginetan aerial aero aerosol aerospace aery aesthetic affected afferent affirmative affluent affluential affricative afghan afghani afghanistani aforementioned african afrotherian ageist agentive agglutinant aggravative agnate agnathan agnostic agoraphobic agrarian agriculturist agrin agrypnotic airborne akkadian alabaman alabamian alabaster alar alate albanian albertan albino albuminoid alcaic alcoholic alepidote aleut aleutian alexipharmic alexiteric algebroid algerian alienans aliped aliphatic aliquant aliquot aliterate alkadienyl alkaline alkenyl alkynyl allative allelochemical allopolyploid allotetraploid alluvial almond almondine alpha alpine alpinist alsatian alterable alterative alternant alternative aluredian alveolar alveolate alwite amacrine amandine amaranthine amateur amber ambient ambisexual ambulatory amenorrheic amenorrhoeic amerasian american ameriginal amerikkkan amethyst amino aminoethoxy aminoethyl aminomethoxy aminomethyl aminopropyl ammonoid amnesic amoeboid amorite amphibian amphidiploid amygdalate amygdaloid amyl amyloid anabolic anacreontic anaesthetic anal analeptic analgesic analog analogue anaphrodisiac anarchist anatolian anchal ancient ancillary andalusian andean andorran android anejo aneroid anesthetic aneuploid angevin angiosperm anglian anglican anglophone angolan anguillan angular anhedral anhidrotic animal anionic annelid anodyne anointed anorectic anorexic anorexigenic anosmic antacid antaphrodisiac antarctican antarthritic antasthmatic antecedent antediluvian antepaenultimate antepenultimate anthelmintic anthro anthropoid antiaircraft antialarmist antiallergenic antiangiogenic antiarrhythmic antiart antiarthritic antiasthmatic antiauthoritarian antibacterial antibiotic antibugging anticapitalist anticar anticatarrhal anticatholic anticestodal anticharm anticholesterol anticholinergic antichristian anticipant anticlerical anticlinal anticoagulant anticoagulation anticollectivist anticommunist anticonsumer anticonsumerist anticonvulsant anticonvulsive anticorrosive antidemocracy antidepressant antidepressive antidesiccant antidiarrheal antidiarrheic antidiarrhoeal antidiarrhoeic antidisestablishmentarian antidiuretic antidivision antiegalitarian antielitist antiemetic antiepileptic antiequalitarian antifascist antifebrile antifeedant antifeminist antifibrinolytic antifibrotic antifield antiflatulent antifolate antifungal antigalactic antigonorrhoeic antiguan antihelminthic antihemorrhagic antiherpetic antihistaminic antiholiday antihyperglycemic antihypertensive antiinfective antiknock antileukaemic antileukemic antiliberal antilibertarian antilithic antillean antiluetic antimalarial antimicrobial antimicrobic antimilitarist antimitotic antimodern antimodernist antimonarchist antimonial antimuscarinic antimycotic antinationalist antinaturalist antineoplastic antinephritic antinicotinic antinoise antinomian antinuke antiochan antiochene antiochian antioxidant antipain antiparallel antiparasitic antiphase antiphlogistic antiphonal antiphonary antipluralist antipodean antipollution antiprotozoal antipsoriatic antipsychotic antipyretic antiquarian antirachitic antiracism antiracist antirad antirepublican antiretroviral antirevolutionary antirheumatic antiromantic antirust antiscience antiscorbutic antisecretory antiseptic antisexist antisnob antispasmatic antispasmodic antispastic antistrange antisyphilitic antiterrorist antithrombotic antitranspirant antitrinitarian antitussive antiunification antiunitary antivaccinationist antivivisectionist antwerpian anxiogenic anxiolytic aorist aostan aotearoan aperient aperitive aphasic aphidian aphrodisiac apiarian apocalyptic apolitical apopemptic apostate apotreptic appellant appellative apposite appositive approbative appurtenant apricot aqua aquaholic aquamarine aquarian arab arabian arachnoid aragonese aramaean aramean araucanian arboreal arcadian archaic archconservative archer ard argent argentine argentinean argentinian arian arietian aristotelian arithmetic arizonan armchair armenian arminian armorial aromatic arsenic arsenical arterial arthritic aruban aryan arytenoid asbestos asbuilt ascendant ascendent ascetic asexual ashcan ashkenazi asian asiatic asper aspergerian asphyxiant aspic aspirant aspirational assessorial assistant assurgent assyrian asthmatic astringent asturian atacaman ataractic atheist atlantan atlantean atlantian atta attendant attic attrahent attributive atypical auburn audio augmentative augustinian aularian aulic auricular ausonian austral australian australopith australopithecine austrian austronesian auteurist authenticist authoritarian autistic autolocking automatic automatist autosexual autumn auvergnese auxiliary avar aventine aversive avian avocado awesomesauce awol awrath axillar azerbaijani azorean azorian aztec azurine babylonian bacchanal bacchanalian bacchant backer backgain backroom backstairs backstreet backup backwoods baconian badass baggy baghdadi baghdadian bahamian bahian bahraini bajan balaamite balinese ballbusting ballotechnic balzacian bamboo banana bandleading bandpass bangladeshi bangy banner bantam baptist barbadian barbarian barbudan barbudian barcelonan barcelonian barny barnyard barren barytone basal bashert bashkir bashkortostani basic basisphenoid basque bass bastard batavian batrachian batteling batty bavarian bayard bayfront bdelloid beachside bearbaiting beasting beavery behabitive behavioralist beige belarusan belarusian belgian belgradian belgravian belizean belizian bellicist belligerent bellywark beloved beltway bendy benedictine benedictive bengali beninese benthamite benzenoid benzo beotian berber bermudan bermudian berserk beryl beserk bessarabian betamimetic betrothed bhutanese biafran biannual biaryl bible bicentennial bichord bicoastal bicolour biconditional bicuspid bicyclic bielorussian biennial biflagellate bifundamental bigeminal bignose bigorexic bijou bilabial bilbaoan bilevel bilingual billable billiard billionth bimetallist bimillenary bimillennial binary binational binomial binominal biochemical biodegradable bioidentical biologic biomedical biomusical biotech bioterrorist birdy birthing bisexual bisque bissextile bistable bitter bittersweet bituminous bivariate blackleg blackpudlian blah blairite bleak blinder blinky blockbuster blond blonde bloquiste blueberry bluffer boeotian boffo bohemian boilerplate boine bolivian bolognese bolshie bolshy bombe bombproof boolean boon borax borderline bosniac bosnian bosom bostonian bostonite botanical botswanan bouffant bougie bourgeois boutique bovine bowtie bozal brabantian braced bracero brachycephalic bracteate bragger brahmin brant brash brass brassy bratislavan braunschweiger bravest bravura braxy brayon brazilian breakable breakaway breakthrough brethren bridal briefer bright brill brilliant brimstone brindle briny brittle broad broadband broadleaf broadloom broadsheet broadway brobdingnagian bronzer broody brookside broon brownite brummie bruneian brunet brunette brusselian brutalist brutalitarian brute bryozoan bubblegum bubbly buccaneering bucharestian buckshee buckskin bucolic budapestian buddhist buggy bughouse bulgarian bulimic bummer bummy bumper bunny bunodont burgeois burgundy buriat burkinabe burkinese burlywood burman burmese burnsian burrata burundian buryat buryatian bushist business bustier butch butlerian butoh butterscotch buttery butthurt bygone byronian bysen byzantine cabindan cablinasian cactus cade caenozoic caesarean caesarian caesarist caitiff cajun calabrian calefactory calgarian calico californian callable callistan callistoan calmative calmer calymmian cambodian cambrian camelback cameloid cameronite cameroonian campbellite camper camun camunian canaanite canadarian canadian canarian canberran cancerian cancroid candid canine canonical cantabrigian cantheist cantonese canuck capacity capital capitalist capitate capitulary capitulationist cappadocian capricornian captive carbenoid carbolic carboniferous carcinostatic cardholding cardinal cardio cardioid careerist caretaker carian caridoid carminative carmine carnation carnivoran carolingian carolinian carotenoid carotid carriable carryable carryon carthusian cartilaginoid cartooney castaway castilian castiron castoff castrato casual catalan catalanophile cataleptic catalonian catarrhine catastrophist catawampus cathartic cathartical catholic catoptric catty caucasian caudatan causal causative caustic cavalier cavicorn cayenne caymanian cebine celadon celestial celibate cellular celsius cenozoic centauroid centenarian centenary centigrade centralist centrist cephalochordate cepheid ceramic ceratopsian ceratopsid ceremonial cerise cerulean cerumenolytic cesarean cestode cestoid cestrian cetacean cfnm chadian chaldean chaldee chalybeate chameleon chamois champagne champaign champian chapel characteristic charismatic charnel chartreuse chattanoogan chattel chaucerian chauvinist cheapass cheapie cheapjack cheapo chechen chelicerate chelonian chemic chemical chemophobic chemopreventive chemoprophylactic chemotherapeutic cherry chestnut chewa chic chicano chickenshit chief childbearing childcaring chilean chiller chinese chinggisid chinky chipotle chipper chippy chirpy chitty chocolate choctaw choice choleretic cholesteric cholinomimetic choplogic choral chordate christadelphian christian christofascist chromo chronic chubby churchgoing churchy chuvash cidery ciliate cimmerian cincinnatian cinderblock cinemagoing cinereous cinnabar cinnamon circassian circular circumbendibus circumflex circumstantial cisuralian citrine citron citrus civilian cladoxylopsid clairvoyant clamshell claret clarion classic classified classist clathrate clatty claustrophobic cleaner cleanup clearer clerical clericalist climacteric closer closing clubgoing clumsy coalescent coalitionist cockney cocktail cocktailian cocky cocoa codependent coed coeliac coelomate coelurosaurian coequal coeval coffee cognate coherentist cohortative coinsured colic coliform collaborative collagist collateral collectable collectible collective collectivist colloid colombian colonial colonialist colonic colophonian coloratura colored colossian coloured columbian comanche combustible comedogenic comedolytic comestible comic comitative commemorative commensal commercial commie commissive committal common commoner communist communitarian commuter comoran comorian compacter comparative compatibilist completer completist component compostable comprehensive compulsive compulsory concessionary concomitant concubinary condemned conditional conductant confectionary confederationist confessional conformist confucian congolese congratulant congregationalist conic conjunct connectionist connective connexive consequent consequentialist conservative conservatory consistent consonant conspecific constabulary constant constituent constitutional constitutionalist constructionist constructivist consumable consumerist consumptive contemplative contemporary contextualist continent continental contingent continuative contraband contraceptive contradictory convalescent conventionalist conventual convergent convertible convulsant cooler cooperative cooty copenhagener coprophiliac coptic copyrightable coracoid coral coralline cordial cordovan corfiot corinthian cormorant cornflower cornish cornsilk coronal coronary corporal corporate corporatist corrective correlative correspondent corrigent corroborative corrosive corsican cosignatory cosmetic cosmopolitan cotemporary coterminal counterfactual counterfeminist counterrevolutionary counterterrorist country countrypolitan county courtesy couth covert crackajack crackerjack crackpot cracky cracovian crapola crapper creative creek creekside crematory crenate crescent cretacean cretan crickety cricoid criminal crinoid crisper crispy croat croatian cromwellian crosser crowleyan crude crummy crunk crusty cryogenian cryptic crypto cryptofascist cuban cubic cubist cuboid cubozoan cult culturist cuneiform cunning cupreous curacaoan curbside curly curmurring current cursive curtal cush custom customary cutaway cutover cutthroat cuttie cyan cyberfeminist cyberian cybertopian cyberutopian cycloid cygnine cymric cynic cyprinid cyprinoid cypriot cytoprotective cytostatic czech czechoslovak czechoslovakian dacian dactylic dadaist daffodil dagestani dahomeyan daimonic dainty dairy dalmatian damnedest damocloid damper damson dandelion dandy danish danophone danubian daredevil dark darling darnedest darwinian dastard dative daytime dba deadbeat deader deadeye deadweight deaf dear dearest decadent decanal decapod deceased decemberist decembrist decennial decillionth decimal decisionist declensionist deconstructionist deconstructivist decorative decrescent decretal decubitis decycling deductible deerskin defeatist defective defensive definitive deictic deist delawarean delectable delhian delicate delinquent deliverable delivery delphinine deltoid deltoideus democrat demographic demoniac demonstrative demotic demulcent denarian denialist denominative deodorant departed dependent depilatory deponent depositary depressant depressive derelict derivative derogatory descendant descriptive descriptivist desi desiccant designer desirable deskside desktop desmoid detergent determinable determinate determinist deterrent detraque developmental deviant devonian devotional dexter diabetic diablo diacaustic diacritic diagnostic diagonal dialup diamante diaphoretic diatomic dickensian dickey dicky dicty didacticist didactyl diehard dielectric different differential diffusionist digastric digestive digitigrade diglot dihedral dilambdodont dilatant dilettante dilly diluent diminutive dimmer dinocephalian dinosaurian dioptric diploid directional directive directoire dirigible dirigist disabled discordian discriminant disestablishmentarian disinfectant disney dispensationalist disphenoid disposable dissentient dissident dissociative dissolvent distaff disyllabic diterpenoid dithyrambic diuretic diurnal docent docetist doctrinaire documentary dodecyl doeskin doggerel doggy dolichocephalic dolichoderine dolomite domestic domiciliary dominant dominican doner doomsday doper doppio dorian doughnut downbeat downgoing downline downstyle dozenal drab dreadful drier drinkable dropdown dropside drudgey drudgy druggy drukpa druze dryer drystone dual dualist ducky duffer dumbshit dundonian duodecillionth duodecimal duoplural duotrigintillionth durable durative dusky dutch dynamic dyslectic dyslexic dyspeptic dyspraxic dysthymic eager earnest earthian earthican eatable ebon ebony ecbolic eccentric ecclesiastic eclectic eclecticist economy ecru ecstatic ectasian ecuadorean ecuadorian ecumenist ecumenopolitan edentate ediacaran edible editorial edmontonian educational effluent egalitarian eggshell egocentric egressive egyptian eighteenth eighth eightieth ejectile elapid elastic elder elected elective electric electrical elegiac elemental eleutheromaniac elevenish eleventh eligible eliminativist elite elitist ellipsoid elliptical embonpoint embryoid emerald emergency emergent emeritus emetic emirati emo emollient emphatic empiric emplastic empyrean emulgent emunctory enantiornithine enate endemic endocrine endohedral enemy english engrailed enlightened enlisted ensuite entire enzootic eoarchean eobiotic eocene ephemeral ephesian epic epical epicene epicurean epidemic epidural epileptic epinician epipaleolithic episcopal episcopalian epispastic epizootic equalitarian equative equestrian equilateral equine equinoctial equipotential equivalent equivalve equivocal erasmian erewhonian ergative eristic eritrean erratic errhine ersatz ersatzist erse eruptive escapist escharotic esculent eskimo eskimoan esperantist essential essentialist essive estonian etesian ethical ethiopian ethmoid ethnic ethnobotanical ethoxy etruscan euboean eugeroic euphoriant euploid eurasian europan european eurosceptic euroskeptic eutectic eutectoid eutherian eutrophic eutychian evangelical eventualist everliving everyday evidentialist evil ewe excess excitant exclusionist exclusive executable executive exercitive exessive exhibitionist exhortative existentialist exoduster exotic expansionist expat expedient expendable experient expert expletive explosive exponential expressionist expressivist exquisite exterior externalist extinguishant extractive extracurricular extraterrestrial extremaduran extremal extreme extremist extrusive fabian facial fader fae faeroese fairyland fairytale faithful fakie fallback fallen falsificationist familiar family fanatic fancier fantom farmaceutical faroese fascist fashionable fastigiate fattist fatty faultfinding fauvist fav fave febricitant febrifacient fed federal federalist federation feldspathoid feline female feminist feminoid fencible feodatory feral ferroelectric festival fetid feudalist feudatory fictionalist fiducial fiduciary fifteenth fifth fiftieth fijian filipina filipino fils final finest finnic firstborn firstling fiscal fisheye fishy fissiped fitter fixative flamboyant flamingo flammable flatbed flatiron flatscreen flavian fledgling flexible flexitarian flimsy flippy floaty flocculent floppy floral florentine floridian fluid fluorescent fluoroaromatic flyaway flyspeck focusing foldout foldover folk folkie fond footlong forgotten formal formalist formative former formosan forprofit fortean forthgoing forthputting fortieth fouler foursquare fourteenth fourth fracking fractal fractile fractional franciscan francophile francophone franker franquist freebooting freer freezable fremd frequentative frequenter fresh fresher freshling freshwater freudian fricative frisian friulian frizzy froggy frontal frontier frontline frontpage fuchsia fucoid fuegian fugitive fuller functional fundamental funeral fungoid funicular funny furongian furrier furry futilitarian future futurist gabonese gagauz gainsboro gala galenical galician galilean gallant galliform gallophone galwegian gambian gamboge gamer gamine gammy gamomaniac gandharan gangsta ganymedean garnet gascon gastrokinetic gaudy gay gayer gazillionth geminian genderqueer general generic genethliac genevan genital genitive genoan gentile gentilic geodesic geordie georgian geranium gergovian geriatric german germane germanophone germinant geru getaway gewgaw ghanaian ghanan ghetto ghosty giant gibberish gibraltarian giganto gimcrack ginge girlie girly glagolitic glaswegian glenoid global globalist globoid globular glomalean glossy glottal glutton gneissoid gnostic gobby goblinoid goidelic gold goldenrod gombeen gooder goofball googlish googly googolplexth googolth goony gorgon gorgonian gossamer goth gothic gourmet govvy gradable gradual graecian graminoid grand granny grape graphic graver grecian grecophone greeny greige gridelin grizzly grotesque groundbreaking grownup guadalupian guadeloupean guadeloupian guamanian guatemalan guerrilla guilty guinean gules gummy gurkha guttural guyanese gymnic gypsy habiline hadean haggard hagueite hairline hairpin hairshirt haitian hakka halcyon haler halfpenny halfwidth haligonian hallucinogenic hamate hamiltonian hamitic hammy handheld handwaving hangdog hanoian hanoverian haplodiploid haploid hardback hardball hardcore hardcover harder hardline harlequin hartlepudlian hatstand hawaiian hawt hayekian haywire hazel hbd headful hearing heartbreaking heartcut hearthside heathen heather heathery heavyweight hebrean hebrephrenic hebrew hebridean hegemonist helicoid heliotrope hellenic hellenophile hellion helminthic helsinkian helvetian hematic hematinic hemichordate hemipteran hemiterpenoid hendecasyllabic henna hepatic hepatotoxicant heptapeptide herbal hereditarian hereditary hermaphrodite herzegovinian hesperian hessian heteroaromatic heteroclite heteroclitic heterocyclic heterodont heterometal heteropod heterosexual heterospecific hetty heuristic hexactine hexadecimal hexaploid hexapod hibernian hibernophile hickory hieratic hieroglyphic highbrow highland highpass himalayan hind hindoo hindu hip hippie hippy hircine hirundine hispanian hispanic hispano hissy historicist hitlerite hittite hoar hobartian hobohemian hoisanese hokie holo holocene homarine homebrewed homeful homespun homey hominid homo homophile homosexual honduran honey honeydew honorific hookup hooky hopeful horary horizontal horrible horsey horsy hortative hortatory hostile hotshot household houseless human humanist humanitarian humanoid humbler humean humeian humian humpy hundredth hungarian hunky hurrian husky hyaline hybrid hydro hydrocholeretic hydroid hylic hymeneal hymenopteran hymnal hyoid hyperborean hyperepidemic hypergeometric hyperreal hypertensive hypnotic hypnotizable hypochondriac hypocoristic hypodermic hypoglycemic hypomanic hypothecary hypothenar hypothetical hyracoid hysteric hysteroid iambic iberian icebox ichthyoid ickle ideal identical identikit idumean idyllic ignostic iguanian ilk illative illegal illinoisan illiterate ilocano ilokano immeasurable immigrant immortal immovable immune immunoabsorbent immunological immunosuppressant immunosuppressive immunotherapeutic immutable impaired imparisyllabic imped imperative imperfect imperfective imperforate imperial imperialist implex implosive imponderable imponent impossible impromptu inanimate inaugural inbred incandescent incendiary inchoactive incident incidental incipient incombustible incoming incommensurable incompetent incomplete incorrigible incumbent incurable independent indeterminant indexical indian indicative indigent indigo indiscernible indispensable individual indolic indonesian indubitable industrial indwelling inebriant inedible inegalitarian inequivalve inert inessential inessive inevitable infective inferentialist inferior infinitesimal infinitive inflatable influent influential infralittoral infrared ingrate ingressive ingush inhalant initiative injectable injectible inner innocent inorganic insectoid insomniac inspissant instakill institutionalist instructional instructive instrumental insured insurgent inswing intangible integral integrant intellectual intended intensive intensivist intent interarrival intercity intercostal interdune interester interglacial interhalogen interim interior interlayer interlinear interlocutory intermediary intermeshing intermetallic intermonsoon intermorph internalist international internationalist interphase interrogative interrogatory intersex intersexual intershell interstadial interstate interstitial intervarsity intervenient intestine intoxicant intramural intrant intrastate intravenous intrusive intuitive invariant invasionist invasive invective invertebrate invincible inviso invitational invitatory inworking ionian iqalungmiut irani iranian iraqi irish ironclad irony irrational irreconcilable irredentist irreducible irregular irresponsible irritant islamist islamite islamofascist isolationist isometric isopycnic isostatic isothermal israeli istrian italian italic italophone ithacan itinerant ivoirian ivorian ivory jackanape jackleg jacksonian jacobean jacobian jacquard jain jakartan jake jamaican jamerican jammy jannock jansenist jap japanese japonica jaspe jasperoid javanese jazeraint jean jeffersonian jerkwater jerky jerusalemite jesuit jibberish jihadi jihadist jimcrack jingoist jordanian jovian judaean judahite judaica judicatory judicial jugal jugoslavian jugular jumbo jungian junior junky jussive juvenal juvenile kabulese kaki kalmyk kalua kamboh kamboj kamchatkan kampuchean kantean kantian kareli karelian kashmiri katangese katzenjammer kazakh kazakhstani keener kenyan keresan keynesian khaki khurrite kia kiasu kiddie kiddy kidskin kievan killer kin kind kindred kiribatian kitsch kittitian kittsian kiwi kneejerk knockabout knockdown knockout known koepanger korean kosovan kosovar krunk kurdistani kutcha kuwaiti kyivan kymric kyrgyz lab labial labiate labradorian labyrinthodont lacedaemonian lacedemonian lacertilian lachrymatory lacteal lactoovovegetarian lactovegetarian lacunar laestrygonian laggard lagrangian laic lakefront lakeside lamarckian lamed lamellicorn lameo lamer languedoc lao laodicean laotian lapidarian lapidary laplacian lapp lapsarian lardy largemouth larghetto larghissimo laryngeal lastborn latchkey latex latin latino latitudinarian latvian laurentian lavaliere lavender lax laxative laxer lazarist leavening lebanese led leet leftist leftmost leftover leftpondian legacy legal legion legionary legislative lego lemnian lemon lemurian lemuroid leninist lenitive lenticular leonian lepetodrilid lepidopteran lesbian lesbigay lesser lesvonian lethal leveler leviathan levirate lewesian liberal liberian libertarian liberticide libertine libran librul libyan lied liege lieutenant lifesaving lightning lightweight ligurian lilac liliopsid lilliputian lily limey limper lingual lipoid lippy liquid lisboner lissamphibian literal literate lithuanian litoral littoral liveaboard livelong liver liverpudlian livornian ljubljanan llandovery lobstery local localist locative lockean locomotive loden logaoedic logistic londonian lonesome longhair longicorn longsuffering looksist loony lopingian louisianan louisianian lovat lovely lowbrow lowdown lowercase lowpass loxodont lucinid lumbering lumbricine luminal lumpsum lunate lunatic lupine lusatian lusk lusophone lutheran luxembourgian luxury lycian lydian lymphatic lyric maastrichtian macaronic macedonian machiavellian macho macro macrorealist madagascan madagascarian madcap madder madecassee madeiran madrilenian madrileno maduran magdeburgian magenta magistral maglev magnesian magnolia magnoliopsid maharashtrian maiden maigre mainstage makeshift malabarian malachite maladroit malagan malagasy malaitan malaprop malawian malay malayali malayan malaysian malcontent maldivian male malfeasant malglico malian mallorcan mallorquin malted maltese mammaliaform mammalian mammary mammillary mammoth manchu manchurian mancunian mandarin mandibulate mangaian mangalorean manhattanite manichaean manichaeist manichean manichee manila maniot manipulative manitoban mannerist mansard mantinean mantuan manual manuscript manx manzonian maoist maori mapuche marcionite marcosian marginal mariachi mariavite marinara marine marist marlovian marquesan married marshallese marsupial martian martinican martiniquais martiniquan marxist mascarene masculinist masculist maslin masovian massy masticatory mastoid masurian material matey matrimonial matrist matronymic matte mattoid maurician mauritanian mauritian mauve maverick maxi maxillary maximal maximalist maximum maxonian maxwellian mayan mazandarani mazanderani mazarine mccarthyite meagre measurable meccan medean medial median medical medician medieval medinan medium medusoid megadollar megalopolitan megapixel megapod megapode megapolitan megarian megrelian melancholic melancholy melburnian melic meliorist melon melungeon memorial memphite mende mendicant menial mensan mentalist mercantilist mercenary mercurial mercurian meridian meridional meristemoid meristic meseraic meshuggener mesocephalic mesolithic mesopotamian mesoscale mestee metacarpal metacentric metallic metalorganic metamict metamorphic metaphysic metapodial metatarsal metatherian metazoan methodist metonymic metropolitan mexica mexican mezzanine mezzobrow michigander mick mickle micro microcephalic microelectronic microlaser microphase microsurgery midair midconcert middle middlebrow midi midland midlife midmeal midrise midroll midseason midship midsong midsummer midtempo midterm mignon mignonette migrant mild militant militarian military millenarian millennial millikelvin millionth milquetoast mimantean mimetic mimsy minaean mineral miniature minimalist minion minoan minorcan minuscule miscellanist mischiefmaking miscreant misere misocapnist misotheist mississippian missy miwokan mixoploid miz miztec mnemonic mobile moccasin mocha mockney modal modern modernist modified molar molariform moldavian moldovan moldovian molossian monacan monastic monegasque monetarist moneymaking mongolian monitory mono monoaromatic monochrome monoclonal monocular monofractal monogenic monoglot monomaniac monomial monophysite monoploid monosyllabic monoterpenoid monotreme monrovian montanan montane montenegrin montessorian montserratian moony moped moral moravian mordovian mordvinian moribund mormon moroccan mortal mortuary mosaic moslem motel motley mountainslope mountaintop mousseux mouthbreathing movable moveable mozambican mucolytic mudejar mulberry multialgorithm multicable multicast multicellular multichine multicomplex multiculturalist multicuspid multidisciplinarian multiduplex multienzyme multiethnic multifamily multiferroic multiform multifractal multilateralist multimedia multinational multinomial multipath multiplane multiplay multiple multiplicative multiport multiquark multiracial multiring multiskyrmion multistorey multistory multistreaming multitheist multiton multitouch multituberculate multivalve multivariate multivitamin mumbaikar mumsy mundane municipal murcian muscatian muscid muscovian muscovite musculotropic museumgoing musical muslim mustard mutant mutton mutual myanmarese mycenaean mydriatic myelosuppressive myopic myriad mystic nabatean nacroleptic nahua naif naija namibian nanofluid nanophase nanoscale nappy narcoleptic narcotic narnian narrative narrower nasal nassuvian nasty naticoid national nationalist native natriuretic natufian natural nauruan navarran navarrese navicular navy nazarene nazi neanderthal neapolitan neat nebraskan necessitarian negotiable negro negroid nelly nematic neocolonialist neofascist neoliberal neon neopagan neopythagorean neorealist neosocialist neoteric neotraditionalist nepalese nepali nephritic neptunian nerdcore nescient nestorian netherlandish neurochemical neuroleptic neuroprotectant neurotic neutral neutralist neutrophil newborn newcome newfie newlywed newsgathering newsmaking newsy newtonian ngoni nibbly nicaraguan nicosian nietzschean nigerian nigerien niggard nihilarian nil nilotic nimby nineteenth ninetieth ninth nippy nisibene nitrenoid nitro nitroaromatic nitroaryl nitrous niuean noachian noble noetic noggen noir noisette nominal nominative nonacademic nonacid nonadolescent nonadult nonaffected nonafrican nonagenarian nonagreement nonalcohol nonalcoholic nonanesthetic nonanimal nonantique nonanxiety nonaromatic nonassociation nonasthmatic nonbank nonbelligerent nonbilaterian nonbiodegradable nonbisexual nonblack nonblonde nonbusiness noncancellation noncaring nonce nonceramic noncharismatic nonchemical nonclass noncognate noncola noncompete noncomplying noncompound nonconformist noncountry noncrime noncriminal noncrystal nondaily nondance nondepressive nondescript nondesigner nondiabetic nondiscipline nondissident nondrama nondrug nondurable nondyslexic nonedible noneffective nonegalitarian nonelitist nonemergency nonemployment nonepileptic nonequal nonequalitarian nonequestrian nonessential nonevangelical nonevergreen nonevidence nonexecutive nonexempt nonextremist nonfamily nonfeature nonfeeling nonfeline nonfemale nonfiring nonflammable nonfriable nonfugitive nongame nongay nongoal nongroup nonheterosexual nonhistone nonhomosexual nonhorse nonhuman nonhybrid nonillionth nonindigent nonindividual noninjury noninnocent noninteger nonintellectual noninterview noninvestment nonjuvenile nonkilling nonlabial nonlending nonlesbian nonliberal nonlibertarian nonlife nonlistening nonliterate nonlocal nonmale nonmarried nonmarxist nonmilitant nonmineral nonminor nonmixing nonmonetarist nonmortal nonmusical nonmutant nonmystic nonnarcotic nonnative nonnegotiable nonneurotic nonnovel nonobjective nonobservable nonofficial nonpagan nonparanoid nonparticipant nonpartisan nonparty nonpathology nonperennial nonperishable nonphobic nonpolicy nonpollen nonpolynomial nonprimitive nonprofessional nonprofit nonproperty nonprotectionist nonprotein nonpsychic nonpsychotic nonradical nonreading nonrecognition nonrecombinant nonrecyclable nonrelationship nonrelative nonrenewable nonreporting nonrepublic nonresident nonresistor nonretirement nonreturnable nonrevisionist nonrevolutionary nonrival nonroyal nonroyalty nonruminant nonscalar nonschizophrenic nonschool nonsecret nonsectarian nonsedative nonsenior nonserial nonsolvent nonspecialist nonsquare nonstandard nonstaple nonstate nonstative nonstudent nonsuicide nonsurvival nonsympathizer nonsystem nontangible nontargeting nontaxation nonterminal nonthinking nontime nontranssexual nontrinitarian nonunity nonuniversity nonvariant nonvirus nonvisionary nonvitamin nonwar nonwestern nonwhite nonwoven nonzero nordic normal norman normotensive northeast northwest norwegian nostalgic notable noteworthy notoungulate novgorodian novocastrian nth nubile nuchal nude nudist nueir nullifidian numidian nuptial nutbar nutrient nutzoid nuyorican nymphomaniac nymphomanic oak oatmeal objective objectivist oblate oblatum oblomovist oblong obround obscurant obscurer observable obsessive obsidian obverse obviative occidental occipital occlusive occurrent oceanfront oceanian oceanview ocker octal octic octillionth octogenarian octonary octoploid octuple ocular oddball odontalgic odorant oecumenical oecumenist ofay offbeat offensive official offside okinawan old ole olive omani omnibus omnilingual omnitheist omphaloskeptic oncoming oneirocritic onyx ooid oolitic oorie opaline operant operative operculate ophidian opioid oppidan optative optic optimum oral orangey orchid ordinal ordinary ordophone oregonian organic organobromine organochlorine organofluorine organohalogen organoid organoiodine organomercurial organometallic organonitrogen organosilicon oriental original ormolu ornamental orthorexic orthotic osakan oscan osloite ossete ossetian ossetic osteoid ostian ostrobothnian otalgic ottawan ottoman oulipian outboard outer outland outpatient ouvrierist oval overage overharvesting overweening ovibovine oviedan ovine ovoid oxblood oxfordian oxyacetylene oxytocic oxytone pachycaul padanian paedo paedophiliac pagan pahari painstaking paintery paisley paki pakistani palaeoconservative palaeographical palaeolithic palamite palatal palatinate palatine palauan paleocene paleoconservative paleolithic palestinian palliative pally palmate palmetto pamplonan panamanian pandeist pandemic panjabi pannonian pansexual pansy pantheist pantywaist paperback paphian papionine papish pappy paprika papuan paquebot para parabolic paracelsian parachordal paraguayan paralympian paralysant paralytic paramilitary paranoiac paranoid paranuchal paraphilic paraplegic paraprofessional parasitic parasomniac parastatal parasympatholytic parasympathomimetic parathyroid paratyphoid parental parenthetical parietal parisian parmesan parol parotid paroxytone parthian partial participial particular particulate partisan partitive parvenu pascha passe passerine passional passionate passive pastafarian pastoral pasty patagonian patavine paternalist patient patientive patina patrician patronymic paulian pavonine pawnee payable peaker pearly pectinate pectoral pedestrian pedigree pedophiliac pedosexual peekaboo peerie pejorative pelasgian pendent penetrant penitent penitentiary pennsylvanian pensionary pentadecimal pentecostal pentecostalist pentimal penultimate pequiste perciform percipient peregrine perennial perfecter perfective performant performative period periodical peripatetic peripheral perishable periwinkle perlative permanent permeant peronist perpendicular perrisodactyl perse persian personal perspective perthian peruvian petrochemical petunia pewter phanariot phantom pharmaceutical phasianid phenolic philipino philippian philistine phobic phocine phoenician phonetic phoney phony phosphorescent photorealist phrygian phthisic physical phytochemical phytopharmaceutical piano picard picaresque pichileminian picky pictorial pictorialist piedmont piezoelectric piggy pincer pinchbeck pindaric pineal pinky pinniped pinto piscean pisiform pissant pitcairner pitmatic pituitary placeable placental placoid plaid plainclothes planer plantigrade plastic plathelminth platinoid platinum platy playboy player plebeian plebian plenary plenipotentiary plosive plumiped plumper pluperfect plural plush plutonian pluvial pneumatic pneumoniac pococurante poddy pogonophoran pohnpeian poikilotherm pointillist pokey poky polemic polemical political polonaise poltroon poly polyacoustic polyacrylic polyaromatic polybromide polychloride polychord polycyclic polycystid polycystine polyester polyfluoro polyglot polymorphonuclear polymorphonucleate polynemid polynemoid polynesian polynoid polynomial polyodont polypharmaceutical polyphenolic polypiarian polyplacophoran polyplacophore polyploid polypod polyschematist polyseme polysilicon polysomic polysyllabic polytechnic polytene polyterpenoid polyunsaturate polyzoan polyzoic pomeranian pommie pommy pomosexual pompeian pompeiian ponent pontifical pooer poopie poopy poor poppy populist populous porky porn pornograph portable portmanteau portside portuguese posho positive possessive possible postadolescent postcanine postcapillary postcommunist posterior postern postfeminist postgame postgrad postgraduate posthuman postimpressionist postintegration postmodernist postnoun postop postpositive postseason postsectarian poststructuralist potager potential potty povvo pracademic practical praetorian praguian prasine prat preacclimation preadolescent preadult preantepenultimate prebendary precancer precapitalist precative precipitant precision precognitive preconscious prediabetic prediagnosis predicable predicant predicative predominant preferred preflight pregame prehuman prehypertensive preinflation prekindergarten prelim preliminary preliterate premarket premium preop prepollent prepositional prepositive preppy preprofessional preraphaelite prerequisite prerogative presbyterian preschool prescription prescriptivist preservative presphenoid prestart prestimulation prestudy preteen preterite preterm pretrial pretrigger preventative preventive previous primatal primigravid primitive primitivist primo primrose principal priority private privative privy proabort probiotic problematic procathedral procedural processional processionary procoagulant prodigal profaner professional proficient profligate prog prognostic progressive prohibitive proinflammatory projectile proletarian promethean prompter propaedeutic propagandist proparoxytone propellant propellent properispomenon prophylactic prosimian prosthetic prostyle prosumer protectionist protective proteid proteinomimetic protoctist protoctistan protohominid protohuman protostomian prototherian protozoan protreptic proturan proverbial provincial provisional provocative proximate prussian pseudo pseudocoelomate pseudoprime pseudovirgin psittacine psittacosaurid psychedelic psychic psycho psychoneurotic psychostimulant psychotic psychotomimetic psychotropic ptarmic pteropine pteropod pteropodine public puce pueblan puebloan pulmonate punjabi punky purebred purgative purgatoric purist puritan purpure pushbutton pussy pygmalion pygmoid pygmy pyramidal pyrectic pyro pyroelectric pyromantic pyrotic pyrrhic qallunaaq qatari quadragenarian quadral quadrate quadratic quadratojugal quadrilateral quadriliteral quadrillionth quadringentenary quadrinomial quadrumane quadruplex qualitative quality quant quantifiable quantum quartan quartic quartodeciman quasquicentennial querulent quickset quieter quiltmaking quinarian quinate quincentenary quinoid quinquagenarian quinquennial quintic quintillionth quorate quotidian racegoing racist rad radial radiant radical radiochemical radioprotective raelian raglan rah random randy rangoonese ranid rapid rapier rash rasher rastafarian rational ratshit rattletrap reactionary reactionist readymade realis reassortant recalcitrant receivable rechargeable reciprocal recitative recluse recombinant reconcilable reconstructivist recreant rectosigmoid recumbent recusant recyclable redeye redistributable reductionist reductivist redwood reentrant reflexive reformatory reformist refractory reginan regional regionalist regular regulation reichian rejectionist relative reliabilist reliable relict religious remarried remiped remulakian renaissance renewable rental renunciant renunciate repellant repellent replicant reprehensible representative reproductive reptilian republican requisite resale reseda resident residentiary residual resistant resolvent responsorial restorative resultant retardant retinal retinoid retributivist retro retrospective returnable reunionese revanchist reverend reversionary revisionist revivalist revolutionary rexist rhaetian rhenish rheumatic rhinestone rhodesian rhodian rhomboid ribald ricegrowing ridgeside rigan righteous rightmost rightpondian riojan ristretto ritual riverside roadside roan roborant robosexual rococo rollercoaster romaean roman romanian romantic rookie rosicrucian rosy rotary rote rothbardian roughspun roumanian roundabout rounder roundhead rousseauian routine rowdy royal ruby ruddy ruderal rulemaking rum rumdum ruminant rundown rung runtime ruritanian russet russian russki russophone rustic rusyn rwandan rwandese sabaean sabbatian sabbatical sabean sabellian sable sacramentarian sacroiliac saddamist safe saffron sagittarian sahrawi salesian salient salientian saline sallow salmon salmonid salmonoid saltwater saluretic salutatory salvadoran salvadorean salvadorian salvationist salvatorian samaritan samian sammarinese samoan samogitian sandbelt sandgrounder sandy sanitarian sapphire sapphirine saragossan sarajevan sarcoid sardinian sarmentose sartrean sasanian sasanid sassanian sassanid satin saturnian saucier saudi saurian saurischian savonian savory sawney sawtooth saxonian scabious scalar scandinavian scant scaphoid scapular scapulocoracoid scarlet scenic schematic schemey schemie schismatic schizoid schizophasic schizophreniac schizophrenic schizosexual scholastic schooly scombrid scopophiliac scoptophiliac scorpion scorpionate scouse screwball screwtop scurvy scythian seafaring seashell seaside secessionist secondary sectarian sectional sedative seedling segovian segregant selenodont selenoid selenomethionyl seljuk seljuq seltzer semelfactive semese semiautomatic semicentennial semiclassic semidocumentary semifluid semiliquid semipro semiprofessional semivegetarian senegalese senior sensationalist sensitive sentient seoulite separatist sepia sepiolid septic septillionth septothecal septuagenarian sequent serb serbian serbophile sere serene serial serialist seriatum serotine serpentine serpentry servian sesamoid sesquicentennial sesquipedalian sesquiquadrate sesquiterpenoid sessional sesterterpenoid settleable seventh seventieth sevillan sevillian sexagenarian sexagenary sexagesimal sexcentenary sexennial sexist sextile sextillionth sextuple seychellois shakedown shakespearean shan shanghainese shanty shareholding sharper shavian sheeny sheepy shiite shimerian shitfuck shithouse shitter shoddy shojo shorter shortfin shorthorn shortie shortwave siamese siberian sibilant siboglinid sicanian sich sicilian sienese sienna sigmoid signature signified sikh silent silesian silly silver simian similar simoniac simplex sindhi singalong singaporean singsong singular singulative sinhalese sinophone sinusoid siren sirian situationist sixth sixtieth skinnerian skinny skookum skopjan slappy slapstickery sleepy slicker slimmer slinky slipover slovak slovene slovenian slower smartass smectic smiley smoggy smoothbore smoother snell snotnose social socialist socinian sociopathic sofian softcover sogdian solipsist solitaire solitary solute solvent somali somatroph somesuch somnifacient somnolytic sooky sophomore soporific sorrel sorry sortal sounder sourdine sourdough southeast souther southwest sovereign soviet spacefaring spagiric sparky sparoid spastic speccy special specialist specieist speciesist speciest specific specky spectacular spectralist spendthrift spenserian sphenoid spheroidal sphingid spiffy spinny spinoidal spinozist spiritual spiritualist splitist splitsville splittist spoony spotty spouting springfieldian squaloid squiggly stainless stakhanovite stale stalinist stalwart stammel standard standout standover starfucking starvation static statist statistic steamboating stereo sterling stern sternocleidomastoid sternutative sternutatory stiddy stigmatic stimulant stirrup stockholmer stoic stopgap storybook stour stout straightedge straighter stranger straussian straw strawberry streetcorner strikebreaking strippy structuralist stubby stuckist stunod stupefacient sturdy styptic suave subadult subaltern subarctic subconscious subfilter subfossil subfusc subgrid subharmonic subhuman subjectivist subjunctive subliterate submachine submersible submissive submonolayer subprime subregional subsalt subsidiary substantive subsurface subteen subtonic subtropical subversive subwavelength succulent sudanese sudorific sudovian suede suffragan suicidal sulky sulphoaluminate sumatran sumerian summary sundry sunflower sunrise sunshine superciliary superconservative superficial superfluid supergene superheavy superheavyweight superhuman superinvariant superior superlative superluxury supermajor supermax supernatant supernatural supernumerary superplastic superpremium superrich supersessionist superspecial superspeed superstar supertall superwide supine supplemental suppliant supplicant supralittoral supramembrane suprasegmental suprematist surform surinamese surplus surrealist susceptible suspensory suzerain swati swift swiss syllabic sylvan symbiotic sympathizer sympatholytic sympathomimetic synchromesh synthetic syphilitic syracusan syriac syrian syrphian syrphid tabanid tabby tabletop tabloid tactic tadzhik tagalog tahitian taishanese taiwanese tajik tajikistani takeaway takeout tallinner tanganyikan tangent tangerine tangible tanzanian taoist tardigrade tardy tarentine tarragonan tarrier tarsal tartessian tasmanian tatarian tatterdemalion tattletale tatty taupe taurean taurine tawny taxable tchaikovskian teak teal technic technical technicolor technosexual technoutopian tectiform teenage teiid teleost telephoto telltale tellurian temporal temporary tench tenderer tennessean tenochca tenochcan tenor tentative tenth tephritid teratogenic teratoid tercentenary termagant terminal terminative ternary terpsichorean terracotta terran terrestrial territorial terrorist tertian tertiary tetanuran tetradecimal tetraplicate tetraploid tetrapod tetraterpenoid teucrian textbook textile thai thatcherite theatregoing theatrical theban thematic theocratical therian thermal thermoplastic thespian thessalian thessalonian thessalonican thinner thirteenth thirtieth thirtysomething thomist thoroughbred thousandth thumby thyasirid tibetan ticky tidier timewasting timonian timonist tinclad tinhorn tipulid tiranan titanian titian titular tocharian tocolytic togolese toisanese tokelauan tomfool tongan tonian tonic topaz topgallant topiary topical topside torontarian torontonian tort tortoiseshell tory totalitarian toxicant toxophilite traditionary traducian transactinide transcaucasian transdermal transformist transgender transgenic transhuman transient transitionist transjordanian translative transmembrane transnational transnistrian transorbital transpondian transsexual transvaalian transversal transylvanian trendy tribal tribrid tributary tricenarian tricentennial tricolor tricolpate tricorn tricuspid tridentine triennial trifluvian trifluvien trifluvienne triggery trilingual triliteral trillionth trimillennial trimmer trimonthly trimotor trinary trine trinidadian trinomial triplex tripolitanian triquetral trisexual triskaidekaphobic tristate trisyllabic trite triterpenoid triumphalist trochoid troglophile trojan tropic tropical truant trumpery trunk trusty tsarist tubby tudor tufty tumbleweed tungusic tunicate tunisian turbellarian turbinal turbinate turkmen turkoman turkophone turquoise tusky tutelar tutelary tutorial tuvaluan tuvan twentieth twilight twissell twisty twp tyrolean ubersexual udmurt udmurtian ugandan uggo ugly ukie ukrainian ulster ultimate ultra ultraconservative ultracrepidarian ultrafundamentalist ultraliberal ultralight ultramarine ultramontane ultranationalist ultraportable ultrarevolutionary ultrashort ultraviolet umber umbilical umbrian unaccusative unaffected unary uncial unciform unconscious unconventional uncopyrightable uncountable undead undecided undecillionth undefeatable underage underarm undercover undergraduate underinsured underprivileged undersigned understage undesirable unemployed unergative unfamiliar unforgiven unfortunate ungulate unicellular unicity unicursal unicuspid unificationist uniform uniformitarian uniglot uninjured uninsured unionist unit unitarian unitary univalve univariate universal universalist universist univocalic unknowable unknown unlockable unloved unmarried unpredictable unprintable unpronounceable unquantifiable unreachable unsalable unthrift untouchable ununderstanding unwearable upbeat upland upline uplink upper uppercase upstyle uranian urartean urartian urticant uruguayan usanian usonian usp usufructuary uterotonic utile utilitarian utmost utopian uttermost uzbek valedictory valencian valetudinarian vallecular valuable vandal vanilla vanuatuan variable variant varietal varioloid varsovian vasopressor vasorelaxant vast vaunting vegan vegetable vegetarian veggie veggo vegliot vegliote velar velopharyngeal vendible venetian venezuelan venitive venizelist venti venusian verbile verdictive vermeil vermifuge vermilion vermillion vernacular versant vert vertebrate vertical vesicant vesicatory vesicomyid vespid vestal vestiary veteran veterinary vetitive vicenarian victorian viennese vietnamese vigintillionth vincentian vinyl violet virago viral virgate virgin virginal virgoan virid viridian virostatic virtual virtuoso visayan visionary visitant visual vitalist vitreous viverrine vivid vocable vocal vocative volitive voluntary vomitive vomitory vorticist votive voyeurist vulcanoid vulnerary wabbit wack wackadoo wacko wagnerian walachian wallachian walloon walnut wantaway ware warmer warsovian washingtonian watercolor waterside wayside weakling wealthy wearable weeny welterweight wesleyan wessexian western westphalian wetter whacko wheat wheaten whirlwind whist white whitewall whitsun whity whovian wiccan widescreen wight wikipedian windian windowfront windy winky wireless wittgensteinian wobbly wollof wolof woodland woodwind woody wool woolen wooly wordsworthian workaholic workday worsted worthy wounded woven wraparound wrath wrinkly writ wussy wykehamist wyomingite xanthian xaverian xenobiotic xenophobic xerophytic xian xiphioid xiphosuran yachty yeller yemeni yeniseian yerevanian yew yiddish yogi yogist youngling yugoslav yugoslavian yuwaaliyaay zagrebian zairean zalambdodont zambezian zambian zamoran zanzibari zapodid zapotec zapotecan zaragozan zarathustrian zebrine zebroid zen zetetic zilch zillionth zimbabwean zionist ziphioid zoantharian zoophytic zoroastrian zulu zuni zwinglian zygenid zygodactyl zygodactyle 1 AORV inbounds 11 AOV bats butters dis fish gis honors lies loads nuts pants singles 20 AO bananas billions crackers divers emerita gangbusters insurgents inuit jokes langers lds mates millions nongames postgames presales quebecois scots taters trillions 3 AGP concerning pending wanting 3 AGR according effing sidling 467 AG abiding aborning abounding absorbing accepting accommodating accusing aching addicting adjoining admiring adoring affecting affixing agonizing alarming alternating amazing amusing anastomosing annoying antisymmetrizing appalling appealing appetising appetizing appreciating approaching approving astonishing astounding attacking backstabbing baffling balding barnstorming bathing beaming begrudging bellying betting bewildering bitching blazing blinking blistering blithering bordering borning bouncing brachiating bridging bristling budding bursting busting calculating caring challenging charming chilling chording chuffing chugging circulating classifying cliffhanging clinching cloying coaxing coevolving collimating comforting competing compromising condescending conducing confiding conflicting conforming confusing confuzzling conniving consenting conserving consuming contracting contrasting controlling converging convincing coordinating copropagating corking corotating corroborating counterflowing countermoving coying cricketing crippling damaging damning daunting deafening dealkylating dearomatizing debilitating debranching decalcifying dechlorinating declogging decohering deglycosylating degrading dehydrogenating delimiting demanding demeaning demoralising demoralizing departing deprecating depreciating depressing despairing desynchronizing deubiquitylating devastating developing disappointing disbelieving discerning discomposing discouraging discriminating disgusting disheartening disparaging dispiriting displeasing disquieting disspiriting distinguishing distorting distressing disturbing dividing dizzying doddering domineering doting drifting drywalling dwindling edifying effecting electrifying emerging enchanting encircling encouraging encroaching endearing engaging engrossing enravishing ensuing entertaining enticing entrancing ethylating exacting exasperating exciting exhausting exhilarating expecting expiring explaining extenuating exulting fascinating fearing feminising feminizing fetching firming flaking flaming flaunting fleeting floating flustering flying fooking forbearing forbidding forboding forgiving freeping frightening frustrating fulfilling fulminating fuming fuzzifying galling gaping glancing glaring glittering glouting grasping gripping gushing halting harrowing heartening hectoring honeymooning horrifying humiliating immunizing impending imposing incapacitating incriminating incurving inducing infuriating ingratiating ingressing inspiring inspiriting insulting interacting interconverting interlocking interpenetrating interplaying intimidating intoxicating intriguing invigorating inviting iodinating ionising ionizing irritating isomerizing jumping kissing kleptoparasiting knowing lancinating languishing lateralizing latrating lippening lubricating luteinizing maddening marauding masing mating mattifying menacing metabolizing metering methylating misconceiving misdeeming misfunctioning misleading missing mitigating mortifying motivating mutating myelinating mystifying nagging necrotizing neighboring neighbouring nictitating nitrating nodulating normalizing nucleating obliging offstanding operating opposing opsonizing optimizing orientating oscillating osculating overarching overmastering overpowering overtopping overwhelming owing oxidising parching patronizing penetrating perishing perplexing petrifying phosphorylating photodisintegrating photosensitising photosensitizing piddling piffling pinching pitching plodding polarizing polluting polymerizing practicing prancing preceding presiding prevailing projecting punishing raging raking ravishing reacidifying rearomatizing reassuring reciprocating reclining recurring reducing reeking reigning relaxing rending repeating reproving restricting retaining retiring retrotransposing revealing rewarding ridiculing ripping riveting roaring rocking rollicking rotating rousing roving saddening scandalizing scathing scheming scintillating scorching screaming sensitising sensitizing shining shocking shrinking sickening silylating sinuating skinning slamming slavering slighting slimming sloping slumbering sobering sodding soothing sopping sparing sparkling sparsifying spiffing sporting sporulating sprawling staggering startling stifling stimulating stinging stinking stomping stonking stooping striking stunning submarining succeeding sweltering syllabificating tantalizing taunting taxing tempting terminating terrifying threatening thrilling thundering tickling titillating tolerizing tottering touching touring towering trailing transactivating trending trimethylating troubling trying unbending unclinging underperforming undreaming undulating unifying unowning unpausing unrecognizing unruffling unsanctifying unsettling unspeaking unthinking upgoing upstanding vacillating vernalizing vibrating virializing vulgarising wading waking wasting watching wavering welcoming whacking whopping winning withering witting worrying zigzagging 1 APRV near 10 APR abeam after apropos around doon forby inbetween less nearhand regardless 2 APV absent granted 6 AP aged gone imbetween nearer nearest sans 18 ARV bloody darn direct dirty durn even further headlong live mad offshore onshore outright piggyback plump slambang stark unlike 468 AR ablaze ablush abox adoze adrift agog aground akimbo alfresco alike alone aloof aloud alow anticlockwise antisunward aplenty archwise asea askance askant askew aslant aslope asquat asquint astern atilt away awful awry backward backwards badly bally bannerlike barefoot barefooted barehanded bareheaded barelegged batlike behindhand behovely bidaily bigtime bihourly billionfold birdlike biyearly blasted blimming blueward bluewards bluggy bodily boustrophedon bowled breadthwise brotherly bulllike bytewise careerlong castewise chainwise checkerwise chequerwise chickenlike chiefly chockablock chordwise christianly churchwide circumambient cityward classwide cleanly clockward clockwise coastward coastwise communitywide communitywise consarned continentwide contraclockwise counterclockwise courtside cowardly crabwise crosswise cuckoldly cussed dadgum damned darned daylong deadly dearer deathly deathward departmentwide devilish districtwide diverse doglike doubtless dovelike downcanyon downdip downmarket downrange downriver downstream downtempo downward ducklike earlier earliest earthside earthward eastbound eastwardly eath eeny eighteenfold eightfold eightyfold elevenfold else endly enough enuf equatorward ever exgratia fanwise farmward farther farthest featly fele fewfold fiberwise fifteenfold fiftyfold filmwise fing fireward fivefold fleetwide foremost forestward fortyfold fourfold fourteenfold freckly fricking froglike frontward frontwards fuguelike furst gainwise gardenless geet gentlemanly gert ghastly gingerly goalward godward goldang goldurn googolfold gradely gratis graveward grazioso grimly groundly headfirst heah heavenward heightwise hella helluv higgledypiggledy hillward homeward horsely hourwise hundredfold incommunicado infinityfold innerly inshore inward kindly kingly kitchenward knightly laggardly lakeward lateish later least leftward leisurely lengthways lengthwise lento liever listwise little lizardlike longer longest lordlier lordliest lordly loud lowly lubberly mair maist manward manyfold marketwide masterly matronly midfloor midmatch midmovie midround midscene midsequence midsession midtour midverse mightly millionfold mondayish monkeylike moonward motherfucking mouselike much museumwide nearby negatory nextdoor nice niggardly nightlong ninefold ninetyfold none northbound northeastward northeastwards northwesterly northwestward northwestwards oceanward oceanwards octillionfold offhand offline offscreen offstage onboard online only onsite onstage onward orful orse otherwise outward overarm overboard overhand overhanded oversea overseas pagewise pairwise parallelwise parcelwise piecemeal planetside planetward planetwide plotwise ploughwise poleward polewards pondward poolside poorly pooty postconception postinfection postprison postsurgery princely pure pursuant quadrillionfold queenly quicksmart quintillionfold randomwise rascally rathe ratlike rearward rearwards recitational redward redwards reet reight rife rightward ringwise riverward rotten sabbathly scarce schoolward schoolwise seaward secondhand seemly selfly semimonthly sentencewise septillionfold sevenfold seventeenfold seventyfold severalfold sextillionfold sharpish shoreward sideling sidelong sideward sidewards sideways sisterly sitewide sixfold sixteenfold sixtyfold slantwise slapdash sly smartish smegging snuggly societywide sometime somewheres soon soonest soothfast southbound southeasterly southeastward southeastwards southernly southwesterly southwestward southwestwards spiralwise spokewise sprightly spritely squarewise squirrellike stairwise starward stately stateside stepwise sternward stewardly stilly storewide straightforward streetward stripewise stripwise strong subjectwise sudden sunward superfast surlier surliest swanlike swith tandemwise teethly tenfold theretoward thicker thickest thirdhand thirteenfold thirtyfold thousandfold threefold tight together tolerable toothly townward trebly trillionfold truthward twentyfold twofold uber uncleanly uncomely underfoot underhand unmanly unobserved upbound upmarket uppermost upstairs upstate upstream uptempo upwind utg valleyward vanward very virginly wallward warpwise weakly weasellike weekdaily weftwise westbound westwardly whilom widthways widthwise wis wordwise worldly worldwide yearlong yeomanlike yeomanly yon yond yonder 418 AV abbreviate abdicated abrase absolutised absolutized accelerate accrete accumulate acerbate acuate acuminate adapt adulterate aestivated affectionate agglutinate alienate alight alphabetised alphabetized amind anastomose angulate animate apocopate apply appropriate approximate arched articulate asperate attenuate attrite auspicate averse awake awakened backlit bankrupt based bearproof beheld bespoke bifurcate blear blither bold brachiate brazen broke built bulletproof busy caughten cellulate characterised chid childproof clung combated combatted combust complete complicate concorporate congenerate conglobate congregate consummate convolute cool copresent copywritten correct corrival corrupt creaseproof crocked cruel cumulate customised cyber dampproof dang deadstick deafferent decerebrate decussate defunct deliberate depauperate designate desolate diffuse dilatate dilute dim dimidiate disaggregate disbound discalceate disincarnate disjoint disproportionate disproven dizzy downscale draughtproof dressed dry dull dumb edged effuse elaborate elate elongate emancipate emasculate enervate engraft eradiate erect exact exalt excarnate federate fireproof flabaghast flameproof flemish floodproof flung foliate fordone foretold fornicate founded foveate freezeproof frequent frustrate fucken fuckin fungiproof fungusproof furcate futureproof geminate gentle glad got greaseproof groomed gyrate hamstrung handfast handsome harsh heatproof hilited homodyne hot humble hung hypercorrect idealised idealized idle imbricate importunate inable inbound incarnate incurvate indurate infirm ingeminate inlaid inline innate inorder installed integrated interoffice interplant intricate invected irradiate italianate kidnaped kittle knowed kosher laced laevigate lank lapped lavish lean learnt legitimate loike lost louche lower macgyvered maculate mainline maledict malign mastered mature medaled mediate meek misset misspent mizzled moistureproof monodisperse monospace mopy mosied mothproof mozy muddy multipartition myelinate narrow nested newfashion numb numerate nutmegged obligate obnubilate obscure obsolete offski olden outdate outen overbuilt overshot overwater overwound own paired palpate patinate pent peregrinate perfect perforate perspirate pert petrified photowritten plicate plim plowed polarized pollicate pollinate pollute porrect predominate predose predy prepaid prepense preset pressed pressurised prim proportionate prorupt prostrate punctulate pustulate quadruple quits radiate radicate rainproof raisinate rare ready reanimate rebrobate redial reduplicate reekin reiterate remarked remediate reparate replete repressed restruck restrung reticulate revolute rewrought rid roleplayed rotproof rounded rustproof said satiate savvy scandalised scrubbed scuff secure sedate segregate septuple sequestrate seriate serrate shiten shockproof shod shrill sinuate situate skew skim slayed smart snowproof sober sodden solubilised soundproof spatulate spent spilt spoilt sprung stank staunch steady stipulate striate strode strongarm stuck sulphured supple supreme suss swart tame taughten terminate tidy tore transcendent trifurcate truncate twilit typeset typewrote ulcerate unbent unbid unbound uncloaked underly undershot undersold understood undry undulate unfit unground unknotted unlaid unlatched unlearnt unmade unright unsaddled unsaid unset unsteady unwad upscale used utter variegate variolate vermiculate vesiculate wainscoted warm waterproof weary weatherproof wedged welsh went widdle wilder windproof winterproof wise withheld wizen wrought wry xxx yar zhoosh 16685 A aad aalenian abaxile abbevillian abbreviatory abderian abdominocardiac abeyant abgeschmackt abhorrent abhorrible abient abitibian abject abjecter abjectest abjuratory ableist abler ablest ablow ablutionary aboil abolitionary abominationly aboveboard abovedeck aboveground abovesaid abranchiate abrim abristle abrupter abruptest abs absinthian absolut absoluter absolutest absolutory absolvatory absonant absorbifacient absorpt abstersory abstractest abstruse abstruser abstrusest absurder absurdest abubble abundant abustle abuzz acalephoid acalycine acalymmate acanthine acardiac acarine acaroid acaudate acaulescent acauline acaulose acceleratory accendible accessible accipitrine acclamatory accordant accrescent accretionary accumbent accurate accurst accusatory acerata acerb acerber acerbest acerose acervate acervose acervuline acetabuliform acetose achelate achier achiest achillean achlamydate achordate achy aciculate aciculiform acidfree acidproof acidy aciform acinaciform acinetiform aciniform acinose acipenserine acquiescent acquisitory acrawl acrid acrider acridest acro acrocephaline acromiocoracoid acropolitan acrostichoid actorish actorly actressy aculeate aculeiform aculeolate acuminose acuter acutest acutifoliate adamantanoid adamantean adamantine adamesque adangle addible adding additionary additory adducent adducible adeciduate adeniform adenomatoid adenose adepescent adequate adherently adjacent adjudicatory adjuratory admissible admonitory adnate adorabubble adorant adrip adroit adroiter adroitest adsorbant adstringent adulatory aduncate adust advenient adventuresome adverse adverser adversest adversifoliate advertent advisatory advocatory aefauld aegean aeolian aeonian aerian aerier aeriest aeriform aerose aeschylean aesculapian aesopian aetat afebrile afire aflame aflutter aforegoing aforesaid aforethought afraid afrikaans afrindian afroth aftercoming afterfest aftermost afterschool afterseen aftershow aftersun aftertax afterwise aftmost agast agaze agelong aggerose aggri aggry aghast agile agiler agilest aglare agleam aglimmer aglint aglitter aglow agro aguish aidant ailurophiliac aimworthy ainu airblown airbreathing airier airiest airish airmobile airproof airsick airside airtight airwise airworthier airworthiest airworthy airy akan akin alary alaskan alaudine albescent albigensian albinoid alcalescent aldine aleatory alete alexandrian algherese algid algoid algonquian alible alienesque aliform alimentary alkalescent alkaliproof alkalizate alkylmercury allantoid allegiant alleviatory allocrine alloimmune allover almighty almondy alonest alongshore alopecoid alosid alpen alphabetiform alreet alright altarwise alternifoliate althusserian altmanesque aluminian amanitoid amateurish amatory amazonian ambery ambident ambisense ambisinister ambulant ameban amebean amebiform ameboid amendatory amensh amethystine amish amiss amissing ammino ammonian amoeban amoebean amort ampery amphiprostyle ample amplectant ampler amplest amplexicaul amplexiform ampulliform amygdaliform anabranching anacolpate anadromus analept anaphylactoid anaporate anatine anatreme anaxagorean ancienter ancientest anconad andamanese anellarioid angiocarpian angioid angrier angriest angry angstier angstiest angsty anguiform anguilliform anguine anguinine angulaperturate angustifoliate angustimurate anile animalish animesque animose aniseedy anjouan annamese annectant annelidan annulate annunciatory anny anoda anomotreme anopheline anorakish anorchid anovulatory anseriform anserine antaircraft antebellum antefebrile antegrade antelucan antemeridian antemortem antemundane antennary antenniform antepartum anterior anterograde anteroposterior anthelmint antiabortion antiabuse antiacne antiaddiction antiadministration antiadvertising antiageing antiaggregant antiaggregatory antiaging antiair antiairport antialcohol antialgae antialien antiallergy antiambush antiamnesty antianaemia antianemia antianxiety antiapartheid antiapoptosis antiaristocracy antiarmor antiarmour antiarthritis antiasthma antiauteurist antiauthority antiavian antiavoidance antibacklash antiban antibanking antibattery antibeauty antibias antibillboard antiblack antiblast antibleeding antiblue antibonus antiboss antibound antibourgeois antiboycott antibranding antibribery antibritish antibrowning antibudget antibug antibullfighting antibullying antibundling antibureaucracy antiburglary antibusiness antibusing antibussing anticaking anticancer anticandida anticarcinoma anticardiolipin anticaries anticasino anticaste anticavity anticelebrity anticelibacy anticellulite anticensorship antichange antichav antichild antichinese antichip antichoice antichromatin antichurch anticigarette anticipatory anticircumcision anticircus anticity anticling anticloning anticlot anticlotting anticlutter anticoalition anticold anticollege anticollision anticollusion anticommerce anticommission anticommuting anticomputer anticonquest anticontagion anticontra anticopying anticopyright anticorporate anticorrosion anticorruption anticough anticrack anticrash anticrime anticrisis anticruelty anticult anticure antidamping antidandruff antidarkening antidazzle antidebt antideer antidefamation antidefendant antideficit antidepression antidesertification antidetonation antidevelopment antidiabetes antidiarrhea antidiarrhoea antidictatorship antidilution antidisco antidiscrimination antidisestablishment antidoctor antidog antidoping antidraft antidrilling antidrink antidrinking antidrought antidrug antidrugs antidumping antiearthquake antieducation antielite antiepilepsy antiespionage antiestablishment antievolution antiexpansion antiexploitation antiexport antiexpressionist antiextremist antifactory antifade antifamily antifarm antifarmer antifarming antifat antifatigue antifemale antifeminine antifertility antifever antifighting antifilibuster antifish antifishing antiflea antiflicker antiflood antiflooding antiflu antifluoridation antifluoride antifoaming antifog antifogging antifood antifootball antiforeclosure antiforeign antiforeigner antiformalist antifoul antifouling antifraud antifriction antifrost antifungus antifur antigag antigambling antigaming antigang antigangster antigay antigender antigenocide antigiardiasis antigirl antiglare antiglaucoma antiglobalism antigogglin antigoglin antigold antigovernment antigraffiti antigraft antigreen antigrowth antiguerrilla antigun antigypsy antihacker antihacking antihalation antihandgun antihanging antiharassment antihate antiheadache antihelicopter antihelminth antihepatoma antiherbivore antiherpes antiherpesvirus antihierarchy antihighway antihijack antihijacking antihippie antiholdup antihorse antihuman antihumanist antihunting antiimmigrant antiimmigration antiimport antiincinerator antiindependence antiinfection antiinflammation antiinflammatory antiinsect antiintrusion antiitch antijam antijamming antijapanese antijewish antijunta antikick antikickback antikidnap antikidnapping antiklan antilabor antilatent antilaundering antileak antileakage antilearning antileft antileishmania antileprosy antilife antiliteracy antiliterate antilitter antilittering antilock antilogging antiloitering antilopine antilove antilynching antimachine antimacho antimajoritarian antimalaria antimale antimalware antimammalian antiman antimanagement antimanufacturing antimargarine antimarijuana antimarket antimarriage antimarxism antimasturbation antimeat antimedicalization antimedicine antimen antimercenary antimerger antimetastasis antimicrotubule antimigraine antimilitant antimilitary antimilk antimine antimissile antimisting antimonatian antimoney antimonian antimonoan antimonogamy antimonopoly antimosquito antimotility antimouse antimurder antimuseum antimyeloma antinarcotics antinausea antinegro antinematode antinepotism antineutrophil antinucleating antinudity antiobesity antiobscenity antioccupation antioppression antioquenian antioxygen antipaedophile antipaparazzi antiparasite antipatent antipatico antipatronage antipeace antipeddling antipedophile antipeople antiperformance antipersistent antipersonnel antipest antipesticide antipet antiphishing antipig antipigeon antipilling antipiracy antipirate antiplague antiplaintiff antiplane antiplaque antiplatelet antipleasure antipoaching antipoisoning antipolice antipoor antipop antiporn antipornography antipot antipoverty antipredator antipregnancy antipress antiprevention antiprivacy antiprofiteering antiprogress antiprostitution antiprotectionist antiprotest antiprotestant antipsoriasis antipsychiatry antipsychology antiquake antiqueen antiqueer antiquest antiquey antirabbit antirabies antiracing antiracketeering antiradio antirail antirailroad antirailway antirally antirape antirat antirecession antirecoil antirecycling antireferendum antireflection antireform antiregulatory antirejection antirelaxation antireligion antiresearch antiresonant antiretaliation antireunification antirich antiriot antiripening antiroad antirobbery antirobot antirock antirocket antiroll antirotating antirussian antirusting antisag antisagging antisalt antisanctions antisarcoma antisatellite antiscalping antischolarship antischool antiscuff antisecession antisecrecy antisegregation antiseizure antisex antisexism antishake antishark antiship antishock antishoplifting antishopping antisink antisiphon antiskid antislave antislavery antisleep antislip antislippage antismog antismoke antismoking antismuggler antismuggling antismut antisodomy antisoil antisoiling antisoviet antispam antispamming antispanking antispasticity antispatter antispeculation antispending antisphexish antispill antispoilage antispoof antispoofing antisport antisprawl antispyware antistab antistate antistatus antisteroid antistick antistigma antistimulus antistress antistrike antistudent antisub antisubmarine antisubsidy antisubversion antisuicide antisupermarket antisurface antisurfing antisurgery antisurveillance antisway antitakeover antitamper antitampering antitank antitarnish antitax antitaxation antitechnology antitelevision antiterror antitesting antitetanus antithalian antitheft antitherapy antithyroid antitipping antitobacco antitoll antitorque antitorture antitotalitarian antitracking antitrafficking antitrain antitransglutaminase antitrend antitrespass antitruancy antitrust antituberculosis antitumor antitumour antityphoid antiulcer antiunion antiuniversity antiurban antivaccination antivaccine antivampire antivandalism antivegetarian antivibration antivice antivictim antiviolence antivivisection antiwarfare antiwaste antiwelfare antiwhaling antiwhite antiwildlife antiwoman antiwomen antiwork antiwrinkle antiyellow antiyellowing antiyuppie antizoo antoecian antonine antproof antrorse antsier antsiest antsy antwacky anty anucleate aok apennine aperturate apeshit aphrodisian apian apicomplexan apiculate apish apo apocrine apollonian apophian aporose appalachian apparent appeasatory appellate appendant appendiculate appetible appley applicatory appreciatory apprehensible approbatory apricotty apricoty aprilly apt apter aptest aquabis aquiform aquiline aquinian aquiver aracanese arachnoidian arakanese araneiform arawak arbit arbitrary arborescent arboriform arc arcane archaean archconservatism archdiocesan archest archimedean arciform arcuate ardent arean areawide arenose areolate argentian argentophil argmax argmin argute arid arider aridest arielian ariose arisen aristate aristophanean arizen armillarioid armillary armlong arnamagnaean arrabbiata arrant arranter arrantest arretine arrogant arrowy arsenatian arsenian arsenitian arsenoan arsey artemidean artemisian artesian artgoing arthropodan arthropodean arthurian articulatory artier artiest artinian artsier artsiest artsy arty arylating asbestiform ascient asconoid asectarian aseptate asetate ashake ashen ashier ashiest ashine ashmolean ashy asimovian asinine askey asleep asnarl asperulate aspiny aspiratory asprawl assamese assident assimilatory assinine assonant asterid asterostromelloid astir astronomicodiluvian astute astuter astutest aswarm atacamenan aterian athabascan athabaskan athenian athetoid athirst atingle atomate atrabilarian atremble attery atticky attitudey attry atumble atwinkle atwitter atwoodian audenesque audient audile auditory augaean augean augustan auguster augustest augusty aukstaitian aulate auntlier auntliest aureate aurian auriculate auriform auriphrygiate auscultatory aussie austenesque austere austerer austerest australasian australoid authorly autocrine autoethnography autofluorescent autofluorescing autohidden autoigniting autoimmune autoinhibitory autoploid autopolyploid autoregulatory autumny avellane aveniform avernian avertible avesta avestan avid avogadrian avoidant awanting aware awarer awarest awash aweary aweigh awesome awesomer awesomest awestricken awestruck awfulest awfuller awfullest awheel awhirl awkward awkwarder awkwardest awkweird awny awoken awsome axile axillary azatricyclo azeotroping azerty azo azooxanthellate aztecan azurn babelish babish baboonish babyish babylonish babyproof baccate bacciform bacillary bacilliary bacilliform backassward backasswards backbitten backbreaking backest backflowing backmost backreacting backslidden backstabby backstair backswept backwaterish backwood backwoodsy bacony bacterioid baculiform badder baddest baddish badoglian baggier baggiest baion bairnly bakgat bakhtinian balder baldest baldish balinesian balkan balkier balkiest balky ballardian balletgoing balloony ballsier ballsiest ballsy balmier balmiest balmy balsamy bammy banaler banalest bananery bandsawn bandstop bangier bangiest bangsian bankerish bankerly banksian banty banzai barbary barbellate bareboat barebones barebow barehand barer barest barfy barian barkier barkiest barky barmier barmiest barmy barocline baroque baroquey barrener barrenest barside basalmost baseborn baser basest bashy basinwide basipterygoid bassackward bassackwards bassalian bassy bastarding bastardly bataillean batavophone batesian bathukolpian bathykolpian batrachomyomachian battier battiest battish battlesome battleworthy baudelairean baudelairian baulkier baulkiest baulky bawdier bawdiest bawdy bayesian bayside bbc beachbound beachcast beachfront beachier beachiest beachy beadier beadiest beady beakier beakiest beaky beamier beamiest beamish beamy beardier beardiest beardy bearish bearly beastish beastlier beastliest beastly beatemest beaten beatlesque beatley beautifulest beautifullest beckettian beclad bedbound bedfast bedrel bedridden bedroomy bedworthy beechen beechier beechiest beefcakey beefier beefiest beefish beefy beeg beeproof beerbohmian beerier beeriest beerish beery beethovenian beetrooty beey befallen beggarlier beggarliest beggarly begone begotten begun behad behemothian beholden behung beigy belain belchy belieffulness beliven bellairsian bellicose belluine belonoid belorussian beloving belowground beluine bendier bendiest bendsome benedictory beneficent benign benignant benigner benignest benzylating beowulfian berberophone beresque bergamask bergmanian bernankean bernese berryish berylline berzelian beseen besetten bespoken bestest bestolen bestrewn bestridden bestselling besung betaken betjemanesque betjemanian betther bewitching bewritten biauriculate biblethumping bibovine bicarinate bicaudate bichrome biciliate bicolligate bicomponent biconcave biconjugate biconvex bicornuate bicrenate bicyclo bidden bidentate bidisperse bifid bifold bifoliate bifoliolate biforate biform bifront bigender bigfin biggest biggish biggity bigleaf bigleague bihamiltonian bijugate bilabiate bilateran bilgier bilgiest bilgy biliary bilinguis billowier billowiest billowy bilobate biloculine bimaculate bimboesque bindaas bindup binetian binucleate bioaccessible bioaccumulatory bioaffluent biocompatible biodeficient biodiverse biofriendly bioinert bioluminescent bioregulatory bioremediating biosensory bipalmate biparting bipartisan bipartite bipeltate bipennate bipenniform bipinnate bipotent biquinary biradiate biradicaloid biraphid birchen birdish birdly birdproof birdseye birefringent birostrate birotate bisaryl biscuity biscutate bisectarian biserrate bismarckian bismuthatian bismuthian bismuthoan bisonant bisontine bistate bistratose bisulcate bitchen bitchier bitchiest bitchin bitchinest bitchy biternate bitey bitier bitiest bitsy bitten bitterer bitterest bitterish bittier bittiest bitty bitwise biuncinate biunique bivariant bivittate bivoltine bizarre bizarrer bizarrest bizarro blabbier blabbiest blabby blacker blackest blackish blacklip blahdy blameworthy blancmangey bland blander blandest blandiloquent blanker blankest blankety blase blastproof blastworthy blatant blate blavatskian blavatskyan bleaker bleakest blearier bleariest bleary bleaty blebby blechy bleen bleepier bleepiest bleepy bleh blesseder blessedest bliddy blimpish blindest blingier blingiest blingy blippy blistery blithe blithesome blithest blizzarding blobbier blobbiest blobby blockbustery blockier blockiest blockish blocklong blockwise blockworthy blocky bloggy blogish blokeish blokey blonder blondest blondish bloodcurdling bloodier bloodiest bloodshot bloodsucking bloodthirstier bloodthirstiest bloodthirsty bloomier bloomiest bloomy blossomest blossomy blotchier blotchiest blotchy blottesque blottier blottiest blotto blotty blousier blousiest blousy blowier blowiest blown blownup blowsier blowsiest blowsy blowy blowzier blowziest blowzy blubbery bluechip bluegrassy blueish bluer bluesier bluesiest bluest bluesy bluetail bluewater bluey bluffest bluish blunter bluntest blurrier blurriest blurry blushy blustery blytonesque blytonian bobbly boccaccian bodleian bodywide bodyworn boggier boggiest bogglesome boggy bogus bohmian boingy bok bolder boldest bolognian bolshier bolshiest boltzmannian bombycine bonafide boncer bonedry boney boneyer boneyest bonier boniest bonkbusting bonkers bonnie bonnier bonniest bonny bonser bony bonza bonzer boobish boofier boofiest boofy bookier bookiest bookish bookishly bookly booksy bookwormish bookwormy booky boomier boomiest boomy boorish boosterish boostglide boozier booziest boozy boppier boppiest boppish boppy boratian boratoan boresome borgesian borgian borian borky borne bornean boroughwide boskier boskiest bosky bosomy bossier bossiest bossy bostin botchier botchiest bothersome botticellian bottomfeeding bottommost bottomy bottony botuliform bouffanty bouldery boulle bouncier bounciest bouncy bounden bounderish bourgie boutiquey bowbent bowery boxier boxiest boxy boyish boysy brachyuran brackish bracteolate bracteose braggest braggier braggiest braggy bragworthy braille braindead brainier brainiest brainy braky bramblier brambliest brambly branchiate branchier branchiest branchy brasher brashest brashier brashiest brassier brassiest brattier brattiest brattish bratty braver brawlier brawliest brawnier brawniest brawny breaden breadier breadiest bready breakbulk breakneck breakproof breaky breasty breathier breathiest breathtaking breathy brechtian breechloading breezier breeziest breezy bressonian breton breughelian breviloquent brevipennate brevirostrate brezhnevian briary brickier brickiest brickle brickwise bricky briefest briery brigandish brighter brightest brightish brinier briniest brisant brisbanian brisk brisker briskest bristlier bristliest bristly british brittish brittler brittlest broadacre broader broadest broadscale broadspectrum brockle brokeback brokedown broken broking bromatian bromian bronchodilatory bronchopulmonary brontean bronzen bronzey bronzier bronziest bronzy broodier broodiest broomier broomiest broomy brosey brosy brothier brothiest brothy browbeaten brownean browner brownest brownian brownier browniest brownish browny bruegelian brueghelian brummagem brung brunswikian brushier brushiest brushy brusk brusker bruskest brusque brusquer brusquest brutish brutist bryalean bubblier bubbliest budgetary buffest buffoonish buffy bugfree buggier buggiest bugproof buildingwide bulbiform bulgier bulgiest bulgy bulkier bulkiest bulksome bulky bullate bulliform bullish bullshittiest bullshitty bummest bumpier bumpiest bumpy bunchier bunchiest bunchy bungfu buoyance buoyant burblier burbliest burbly burdensome burglarproof burgundian burlier burliest burly bursiform bursten burstier burstiest bursty bushian bushier bushiest bushy busier busiest businesswide businessworthy businessy bustiest busty butchy butterier butteriest buttermilky butterscotchy buttondown buxom buxomer buxomest buzzier buzziest buzzworthy buzzy byblian byronesque byzantinesque caballine cabbagey cabbagy cabellian cabre cacatory cacciatore cackly cactusy caddish caddoan caddywompus cadent cadgy cadmian caducicorn caerulean caesian cagey cagier cagiest cagy cairene cakey cakier cakiest caky calcariform calceiform calcian calciform calculary calculatory calculiform caledonian calescent calfbound caliciform calliopean callipygean callipygian callistonian callow callower callowest calmest cameline campaniform campanulate campest campier campiest campodeiform campuswide campy camusian canaliculate canaliform canalside cancriform cancrine candent candescent candlelit canescent caniniform cannier canniest canny cantabrian cantaloupey cantatory cantorian canty canvassy capabler capablest capacitary capeverdean capilliform capillose capitatim capoid caprid capriform caprine capsian capsulate capsuliform caraboid carbonatian carbonian carbonmonoxy cardboardy cardiac cardiopulmonary cardiorespiratory carefree carelessest caretaken careworn carfree cariban caribbean caricaturesque caricaturish carinate carnivalesque carnose caroline carpathian carpellary carpellate carrollian carroty carsick cartesian carthaginian cartoonish cartoony carven casebound casewise cashflow caspian cassubian catalanophone catarrhy catchier catchiest catchy catechetick catenulate catharist cathodoluminescent catilinian catproof cattellian cattier cattiest cattish cattycorner cattywampus caucasoid cauchy caudate caudiform caudine caulescent cauliform cauline cautionary cavitary caycean cebuano cedarn cedary celebratory celiac cellary celliform cellularizing censitary centralian centremost centum centuple centuriate cephaloid cephalopagus cerambycoid ceratoid cerebriform cererian cerian ceroan certain cerule cerulescent cervicorn cervine cesarian cesian cessile chaffy chagallian chainwide chairbound chairfast chalkier chalkiest chalky chamorro chancier chanciest chancriform chancy chandleresque chandlerish chapfallen chaplinesque charcoaly charcotian charier chariest charmest charminger charmingest charonian charrier charriest charry chary chaste chaster chastest chatoyant chattery chattier chattiest chatty chavish chavvier chavviest chavvish chavvy cheap cheaper cheapest cheapish cheatier cheatiest cheaty cheddary cheekier cheekiest cheeky cheerfuller cheerfullest cheerier cheeriest cheerleaderish cheery cheesecakey cheesefare cheeseparing cheesier cheesiest cheesy chekhovian chelating cheliform chemiluminescent chemoluminescent chemorefractory chemoresistant chemosensitizing chemosensory chemosterilant chequy cher cherty chestier chestiest chestnutty chesty chewier chewiest chewy chicer chicest chichi chickeny chidden chiefest childfree childish childly childsafe chillier chilliest chilly chinesey chingisid chinglish chinnier chinny chintzier chintziest chintzy chipperly chirpier chirpiest chirrupy chlamydate chloralkaline chloratian chlorian chloriney chloroid choate chocker chockers chocolatey chocolaty choicer choicest chomskian chomskyan choosey choosier choosiest choosy chopfallen choppier choppiest choppy chosen christing christmassier christmassiest christmassy christmasy chromaffin chromatian chromian chryselephantine chrysippan chthonian chubbier chubbiest chukchi chummier chummiest chummy chumpier chumpiest chumpy chunkier chunkiest chunky chur churchillian churchlier churchliest churchly churlish churrigueresque chutzpadik ciceronian ciconine ciliary cilician ciliform cinerary cingulate cinnamony circadian circean circinate circlewise circulatory circumadjacent circumbinary circumburst circumcinct circumfluent circumjacent circumlocutionary circumlocutory circummeridian circummultiple circumnavigatory circumplanetary circumprimary circumscissile circumscript circumsecondary circumspect circumsporozoite circumvolant circussy circusy cirrate cirrhose cirrigrade cirrose cis cisacting cisalpine cisgender cismarine cismasculine cismontane cisoid cisplanckian cispontine citatory citigrade citizenish citizenly citrusy citybound citywide civil civilish claggier claggiest claggy clairaudient clairsentient clamant clammier clammiest clammy clandescent clandestine clane clangier clangiest clangy clankier clankiest clanky clannish clarificatory clarkean classier classiest classificatory classwise classy clattery clattier clattiest clausewitzian clavate clavicorn claviform clayey clayier clayiest clayish claytons cleanest cleanish cleanshaven clearcut clearest clement clerkish clever cleverer cleverest cleverish clickier clickiest clicky clientside cliffy clifty climatory clingier clingiest clingy clinkery clinky clinoid clinquant clintonesque clintonian cliquey cliquish cliquy clithridiate clockworky cloddish cloddy cloggy clompy clopen closest closish clost clothbound clothy clottish cloudcapt cloudier cloudiest cloudy cloven clownish cloysome clubbier clubbiest clubby clucky cluey clumpier clumpiest clumpy clumsier clumsiest clunkier clunkiest clunky cluttery coadjacent coadjoint coadunate coalier coaliest coalitionary coaly coarctate coarse coarser coarsest cobaltian cobaltoan cobbly cobby cobordant cobwebbier cobwebbiest cobwebby cochannel cochleariform cochleiform cockamamie cockamamy cockier cockiest cockroachy cocksure cocompact coconutty codgerly codicillary codominant coelacanthine coercible coercionary coevolutionary coexistent cofinite cogent cogitabund cogitant cognisant cognizant cogongrass cogredient coherent cohesible coincident coindicant cointegrating coky colder coldest coldish coldproof coleopteroid coleridegy coleridgean coleridgian colicky collaboratory collagey collapsible collegebound collegewide collegey collegiate colliest collinsian colorblind colorfast colourblind colourfast colpate coltish colubriform colubrine columbiform columelliform columniform comatose combinatory comcaac comelier comeliest comely cometary comfier comfiest comfy commanding commandwide commemoratory commendatory commensurate comminatory commonest commonish commonsense communicatory comorbid compactest compactible companionate companywide comparing compassionate compatible compelling compensatory competent compilatory complacent complaisant compleatest complementary completest compliant complicit complimentary compony composerly compossible composty comprehendible comprehensible compressible compulsatory computerate computeresque computery concentrating concertgoing concessible conchiform conciliant conciliary conciliatory concise conciser concisest conclamant conclusory concolorate concordant concordatory concrescent concrescible concretionary concupiscent concupiscible concurrent condemnatory condign condolatory conductible conductorly conductory conduplicate condyloid confabulatory confarreate confessory confident confirmatory confiscatory conflagrant conflagratory conflictory confluent conformant confronte confusible congestant congestible conglutinant congratulatory congruent coniform conjectory conjoint connate connectible connivant conoid conradian conrotatory consanguine consecratory considerate consignificant consilient consolatory consolute conspiratory constantinian constat constructible consummatory contemptible contestible contone contortionate contourne contractible contractile contractionary contragredient contraindicatory contraplex contrarotating contrasty contrasuggestible contraterrene contravariant contributory contrite controvertible convenient conversant convex cooingly coolest coolio coolish copernican coppery coprime copulatory coquettish coraciiform coralliform coralloid corally corbusian corbusierian cordate cordiform corkier corkiest corkscrewy corky cornellian corniculate cornier corniest corniform cornuate corny corolliform coronoid corporatewide corporationwide correcter correctest corrigible corroboratory corrodible corrosible corruptest corruptible corticate corticopontine coruscant corvine corymbiform coryneform cos cos2 cosegregating cosier cosiest cosmogonically costiform costimulatory costlier costliest costly costumey cotswold cottagey cottony cotyledonary cotyliform cotylosaurian couchant couchbound counterair counterattracting counterbattery countercorruption counterdrawn counterdrug counterflory counterguerilla counterguerrilla counterpropagating countersniper counterstreaming countersung countersunk countertrafficking countryish countrymade countrywide countywide coupley couply courtlier courtliest courtly cousinly covariant cowardesque cowardian cowardy cowboyish cowiest cowperian cowy coy coyer coyest cozier coziest crabbier crabbiest crabbit crabby cracid crackback crackier crackiest cracklier crackliest crackly crackproof craftier craftiest craftsy crafty cragfast craggier craggiest craggy crampy cranker crankest crankier crankiest cranky crappest crappier crappiest crappy crapy crashier crashiest crashworthy crashy crass crasser crassest crassulacean crawly crazier craziest creakier creakiest creaky creamier creamiest creamy creationary creaturely credible creditworthy creepier creepiest creepy crenulate crepey crepier crepiest crepitant crepy cressy crestfallen cretinoid cribriform cribrose crimean crimefree crimeridden cringemaking cringeworthy cringy crinkly crinky crispate crispest crispier crispiest cristate criticproof croaky cronenbergian crossbench crossborder crossclass crosscourt crossest crossfield crossgender crossparty crossrange crosstown crostinis crotchetier crotchetiest crotchety croupy crowdier crowdiest crowdy cruciate cruciform cruddier cruddiest cruddy cruder crudest crueler cruelest crueller cruellest cruftier cruftiest crufty cruisey cruisier cruisiest cruisy crumbier crumbiest crumblier crumbliest crumbly crumby crummier crummiest crumply crunchier crunchiest crunchy crunker crunkest crushproof crustier crustiest crustose crypticity cryptocrystalline crystalline cteniform ctenoid cthulhu cubiform cubomedusan cuckoldy cuculine cucullate cuddlesome cuddlier cuddliest cuddly culinary cultish culty cumaean cumbersome cumbrian cumhungry cummingsesque cummy cumthirsty cumuliform cunctatory cuneate cunninger cunningest cuntier cuntiest cunting cuntish cunty cupboardy cupidinian cuppy cuprian cuproan cupulate curetonian curiouser curlier curliest curmudgeonlier curmudgeonliest curmudgeonly currenter currentest currish cursedest cursory curt curtate curter curtest curule curvier curviest curvy cushdie cushdy cushier cushiest cushiony cushite cushty cushy cuspidate cuspier cuspiest cuspy custardy cute cuter cutesie cutesier cutesiest cutest cutesy cutglass cutty cvd cyanophycean cyanose cyberpunkish cybersavvy cycadean cyclopean cyclopropenoid cyllenean cyllenian cymose cyprine cysteinyl cytherean cytocompatible cyzicene czarian czarish dacent daddyish daedalian daffier daffiest daffy daft dafter daftest daggier daggiest daggy dagnasty dahlian daintier daintiest dakotan daliesque daltonian damfool damnatory damnfool dampest dampish dancegoing dancerly dancette dancey dancy dandier dandiest dandruffy dangly dank danker dankest dankish dantean dantesque dapper darker darkest darkhorse darkish darksome darlingest darwinulid dastardlier dastardliest dastardly dat daughterly davidian dawkinsian daydreamy dazy deacyl deadborn deadest deadlier deadliest deadset deafblind deafer deafest dealate deathworthy debonair decadelong decadeslong decapartite decatenatory decemberish decembery decent decentish declamatory declaratory declasse declassee decoherent decollete decolletee deconfining deconjugating decorrelating decreasing decrepit decretory decumbent decuple decurrent decurtate dedicatory deducible deedy deeper deepest deepfelt deepish deepwater def defamatory defaulty defeasible defectible defensible deferent deffer deffest defiant deficient definite deflagrant deflationary deflex deflorate deft defter deftest deglucosyl degravitating dehiscent dehydroamino deletionist deleuzean deleuzian delible delightsome deliquescent delish delitescent delphine delusionary delusory deluxe dementing demibold demilune democritean demure denary dense denser densest dentate denticulate dentiform dentproof denunciatory deoxy depascent depletant deprecatory depreciatory depressible depressionary deregulatory derisively derisory dermatoid dermoid dernier derridean descendent descendible deserty designatory designerly designy deskbound desmethyl desmostylian desolatory desperate despondent destitute destructible desultory detectible detractory deubiquitinating deubiquitinylating devanagari developmentary devoid devolutionary devout devouter devoutest dewier dewiest dewy dexterwise dextrorotatory diacranterian dialectally diaperish diasporan diazido diazo diblock dicey diciest dickian dickier dickiest dickinsonian dickish dicy diddier diddiest diddy didelphine dideoxy diderotian didine didonian diel dietary diety difficult diffident diffusible difluent digestible digitaloid digitate digitiform dihydroxy diisopropyl dilatory dilettantish diligent diluvian dimissory dimmest dimmish dimplier dimpliest dimply dingier dingiest dingy dinkier dinkiest dinkum dinky dinosaurish dinq diocesan diogenean dioicus dionean dionysiac dionysian diophantine dipeptidyl diphtheroid dippy diradicaloid dire directer direr direst dirgy dirigiste dirtier dirtiest dirtproof dirtyish discarnate discernible disciform disciplinary disclamatory discoid discompassionate disconcerting disconfirming disconsolate discordant discorporate discreet discreeter discreetest discrepant discrete discretionary discriminatory discussible disequalising disequalizing dishier dishiest dishonest dishwatery dishy disinflationary disinhibitory disintermediary dismissible disobedient disorderly disparate dispassionate dispersible displaying disrotatory dissatisfactory dissectible dissimilatory dissoluble dissolute dissonant distant distensible distinct distingue distortionary distractible distrait distraught disulfur disuniform disuniformly ditchy dithery ditsier ditsiest ditsy ditzier ditziest ditzy divaish divergent diversionary divey divinatory divinest divisible dizzier dizziest djiboutian doabler docile doctorish doddery dodgier dodgiest dodgy dodwellian doggier doggiest doggish doggone dogproof doldrum dolefuler dolefulest dollopy dolorose doltish dominating donnish doodly doolally doomier doomiest doomwatch doomy dopest dopey dopier dopiest dopy doris dorkier dorkiest dorkish dorky dormant dormie dorty dotier dotiest dottier dottiest dotty doty doubtworthy douce douchey doughier doughiest doughtier doughtiest doughty doughy dour dourer dourest doveish dovish dowdier dowdiest dowdy downbent downblouse downcoming downcore downest downfallen downfield downflowing downgone downhole downier downiest downlevel downsloping downstair downtrodden downy doylean dozier doziest dozy drabber drabbest drabbier drabbiest drabby draconian draconine draftsmanly drafty draggier draggiest draggy dragonish drapey draughtier draughtiest draughtsmanly draughty drawish drawly drawn dreambound dreamier dreamiest dreamwrapt dreamy drearier dreariest drearsome dreary dreich dressier dressiest dressy dribbly driest driftier driftiest drifty drillproof drinkworthy drippier drippiest drippy dritten driven driverside drizzlier drizzliest drizzly droll droller drollest droney dronish drony droogish drooly droopier droopiest droopy drossier drossy droughtproof droughty drowsier drowsiest drowsy drugfree druggier druggiest drunken drunker drunkest drusy druzy drydenesque drydenian dryest dryish dryopithecine drywipe dubby duchampian duchessy ductible ductile dudely dulcet duller dullest dullish dumasian dumber dumbest dumbish dumbstruck dumpier dumpiest dumplingy dumptier dumptiest dumpty dumpy duncey dungeonesque dungier dungiest dungy dunnish dunsanian dunzo duobinary duodecuple duodenary duple durkheimian duskier duskiest dustfree dustier dustiest dustproof dusty dutchier dutchiest dutchophone dutchy dutybound dutyfree dvorak dwarfish dwarven dwarvish dweebier dweebiest dweebish dweeby dworkinian dykey dylanesque dym dysprosian dystectoid dystopian dyun earlyish earsplitting earthborn earthbound earthen earthier earthiest earthlit earthmoving earthshaking earthshattering earthwards earthy earwiggy easier easiest eastern easternmost eastery eastmost easy easygoing easyish eaten eatworthy ebber ebbest ebracteate ebracteolate ebullating ebullient eburnean eburnine ecaudate ecchi eccrine echinulate echoey echonian echt ecky eco ecofriendly economywide ecostate ecotopian edematose edgier edgiest edgy edificatory educible edwardian eelfare eeliest eely eensy eentsy eerie eerier eeriest eerisome eery eeyorish effectible effectory effeminate efferent effervescent effete efficient efflorescent effluviant effulgent eggbound eggier eggiest eggy egobese eighteenish eighteenpenny eightpenny eightyish einsteinian ejaculatory elapine elastocapillary elderly eldritch electrocapillary electrochemiluminescent electrochemogene electrogene electroluminescent electrophosphorescent electrosensory electrospun electrostrong electroweak electrowon eleemosynary elegant elementary elephantiac elephantine elephantoid eleusinian elevenpenny eleventeenth elfin elfish eliminatory eliotian elizabethan elizabethian elmy elocutionary eloquent elpidian elucidatory elusory elven elvisesque elvish elvisy elysian elysium emanant emancipatory emarginate emberizine embracingly emersonian eminent emirian empsonian emptier emptiest emptyish enantiocontrolling enantiodiscriminating enantiopure enantiornitine enceinte enceladan enceladean endian ending endmost endocavitary endoeuropean endometrioid endometroid endoreversible engirt englishy enneastyle ennuye enrapt ensiform enteroendocrine enterprisewide enterprisey enterprising entomoid entrywise enturbulant enuff envirofriendly eny eolian eonian eotvos ephemeride epidermoid epifluorescent epigene epileptiform epistemologically epistolary epitheliod epithelioid epithelizing epulary equidistant equifrequency equifrequent equiluminant equinecessary equipotent equisonant equitant equivariant erbian erectile ericksonian ericoid eridian eriksonian erodible erose errant errorfree erstwhile eruciform erudite erumpent erythroid escheresque espanish esquamulose estuarine esurient etaprime etchi ethmosphenoid ethnosectarian euahlayi euchelicerate euclidean euclidian eulerian eumenine eunuchoid eupsychian eurabian euripidean euronesian europian europoan euryhaline euthyroid evacuant evadible evanescent evasible evener evenest everbearing everblooming everchanging everfalling everflowing evergoing evergrowing everlasting everlearning evermoving everrunning evershifting eversible everwhat evident evidentiary eviler evilest eviller evillest evolutionary exaggeratory exanimate exarate exascale excandescent excaudate excitatory exclamatory exclusionary exclusory excretory excruciating exculpatory excurrent excusatory executory exemplary exhalatory exhaustible exhortatory exigent exigible exilian existent existing exocrine exoplanetary exorbitant exoterrene exotrojan exp expansible expansile expansionary expectant expeditionary expertest expiatory expiratory explanate explanatory explicatory explicit explodey exploratory explosible expositionary expository expostulatory expressible expurgatory exsanguine exstipellate exstipulate exsufflicate extant extemporary extendible extense extensible extensile exterminatory extinct extortionary extortionate extrabellum extrabodily extracardiac extractivist extralarge extraliterary extralong extramedullary extramundane extraordinaire extraordinary extrapair extraparliamentary extraplanetary extrapulmonary extrasensory extrastatutory extrastriate extrauterine extravagant extremotolerant extropian extrorse extry exuberant exultant exurban exxy exy eyecatching eyeopening eyewatering fabbest fabbier fabby fabiform faboo facesaving facety facile faciliatory facilitatory faclempt factorywise facty faddier faddiest faddish faddy fadeproof fadest fadish faggier faggiest faggoty faggy faginesque fahrenheit failproof failsafe failureproof fainter faintest faintish fairer fairest fairish fairtrade fairweather fakest fakey faklempt falcate falciform falconine fallaway fallible fallopian false falser falsest falstaffian fanboyish fanciest fandabidozi fanfold fangy fanmade fannish faraway farby farinose farkakteh farnesoid farouche farrant farreaching farseeing farspoken farthermost fashiony fastest fastgrowing fatherly fatiloquent fattening fatter fattest fattier fattiest fattish faulknerian faultier faultiest faulty faustian faustiest fausty faux favonian favoritest favourablest favouritest favy fawce fearfuller fearfullest fearsome feasible featherier featheriest featherlight feathery febrile fecund fecundist feeble feebler feeblest feelbad feelgood feely feepaying feer feetlong feistier feistiest feisty fellest felliniesque felty femmer fenceline fenestrate fennoscandian fenny ferine ferior ferklempt ferny ferrety ferrian ferroan ferrocenyl ferromagnesian ferryl fertile fervent fervid fescennine festy feuillemorte feverish few fewer fewest fewscore fey feyest fibery fibriform fibrillary fibrillatory fibroblastoid fickle fictile fictiveness fiddlier fiddliest fiddly fidgetier fidgetiest fidgety fiendish fiendly fierce fiercer fiercest fierier fieriest fiery fifteenish fifteenpenny fiftyish figgy fightingest figulate figurate filamentary filamentoid filamentose filemot filetail filiform filmier filmiest filmworthy filmy filthier filthiest filthy fimbriate finer finespun fingery finickety finickier finickiest finicking finickity finicky finikin finitary finite finito finnier finniest finnish finnophone finny fireballing firelit fireworky firmer firmest firmish firmwide first firstest firsthand firstmost fishier fishiest fishish fissile fittest fivepenny fizzier fizziest fizzy flabbier flabbiest flabby flabellate flabelliform flaccid flagelliform flagrant flain flakey flakier flakiest flaky flamethrowing flamier flamiest flammant flamy flannelly flapperesque flappier flappiest flappy flashier flashiest flashy flatleaf flattest flattish flatwater flavescent flavid flavorsome flavoursome flaxen fleaborne flearidden fleecier fleeciest fleecy fleeter fleetest fleshier fleshiest fleshly fleshy flexile flickery flickier flickiest flicky fliest flightier flightiest flightworthy flighty flimsier flimsiest flinchy flintier flintiest flintstonian flinty flippant flippest flippier flippiest flirtier flirtiest flitten flitty floatier floatiest flobby floccose floodlit flooey floppier floppiest flopsy florescent florid flory flossier flossiest flossy flouncier flounciest flouncy flourier flouriest floury flowerier floweriest flowery flowier flowiest flown flowy floydian fluctuant fluent fluffier fluffiest fluffy flukey flukier flukiest flukish fluky fluorian flushest flutey flutier flutiest fluttery fluty fluviatile flyblown flycatching flyproof foamier foamiest foamy foetid fogbound fogeyish foggier foggiest foggy fogyish foine foldaway foldup foliose folkier folkiest folkish folklorish folksier folksiest folkstyle folksy folky fonder fondest foodborne foody foofier foofiest foofy foolhardier foolhardiest foolhardy foolish foolisher foolproof foorth footballing footloose footsore foppish forbidden forborne forcasten forcene forcible fordrunken foredone foregone foreign foreknown foresaid foreseen foresty forgettil forgettle forgitty forgiven forgone forky forlorn forlorner forlornest formfitting formican formicarian formicine fornicatory forold forridden forsaken forsworn forthcoming forthpushing forthright fortis fortunate fortyish fortypenny forwardmost forworn fossulate fossy fou foucaldian foucauldian foucaultian foudroyant foulest foundherentist fourche fourierite fourpartite fourpenny fourteenish fourteenpenny fousty foxier foxiest foxy fragile fragmentary fragrant fraidier fraidiest fraidy frailer frailest frammit francoesque francoist franconian frangible frankensteinian frankensteinish frankest frankish fraudproof freakier freakiest freakish freaky freash frecklier freckliest freeborn freeform freehand freemium freest freestanding fregean frekel frem fremder fremdest frequentest freshest fretty fricken friendish friendlier friendliest friendworthy friggin frightsome frigid frillier frilliest frilly frim fringey fringier fringiest fringy friskier friskiest frisky frizzier frizziest frizzlier frizzliest frizzly froggish frolicsome frommian frondescent frondose fronter frontest frontmost frontside froofy froren frory frostbitten frostier frostiest frostproof frosty frothier frothiest frothy froward frownier frowniest frowny frowsier frowsiest frowsty frowsy frowzier frowziest frowzy frozen frugiferent fruitier fruitiest fruity frum frumentary frumpier frumpiest frumpish frumpy frutescent fruticose fubby fubsier fubsiest fubsy fuckish fudgier fudgiest fudgy fugazi fugient fuglier fugliest fugly fulgent fulgid fulgurant fulicine fuliguline fullcourt fullest fullish fullmade fullscale fullwidth fulminant fulsome fumatory fumid fumiest fumy fundiform fundu funerary funest fungible fungiform funkier funkiest funky funloving funnelform funner funnest funnier funniest funnish furanoid furder furibund furriest furrin furshlugginer furtherest furthermost furthest furzy fusible fusiform fusimotor fusionesque fusoid fussier fussiest fussocky fussy fustier fustiest fusty futhermost futile fuzzier fuzziest fuzzy gabbier gabbiest gabby gadgety gadiform gadoid gadolinian gaga gagworthy gainly gainsome galaxian galaxywide galeate galeiform galeproof galerinoid gallian galline gallus galore gamesome gamest gamey gamier gamiest gaminesque gamy ganglier gangliest gangliform gangling ganglioform gangly gangsterish ganymedian gappier gappiest gappy garagey garbagey garbagy garboesque gardnerian gargantuan garish garlicky garrisonian garveyan gashly gasiform gaslit gaspier gaspy gassier gassiest gassy gastight gatesian gatvol gauche gauchest gaudier gaudiest gaulish gaunt gaunter gauntest gaussian gauzier gauziest gauzy gawkier gawkiest gawky gayest gayish gdynian geekier geekiest geekish geekly geeky geezerly geezery gelatinoid gelid gemmary gemutlich generich geniculate geniohyoid genitourinary genomewide genovese genteel gentlemanish gentler gentlest genuine geopolitically geostationary geraldine germanatian germanian germanoid germfree germier germiest germproof germy gesticulatory gewd ghastlier ghastliest ghentish ghey ghostlier ghostliest ghostly ghostwritten ghoulish gibsonian giddier giddiest giddy gifty gigajillion gigantesque gigglesome gigglier giggliest gigglish giggly gilaki gilbertian gilliamesque gimlety gimmicky gimpier gimpiest gimpy ginchiest ginchy gingerish gingery ginny ginsbergian giocoso giottesque gipsyish giraffine girlfriendly girlier girliest girlish girthier girthiest girthy glabrescent glace glacimarine glaciolacustrine glaciomarine gladder gladdest gladsome glaiky glaky glammy glandiform glassier glassiest glassy glatt glazen glazy gleamier gleamiest gleamy glib glibber glibbest glimmery glinty glitchier glitchiest glitchy glitterier glitteriest glittery glitzier glitziest glitzy globose glomeromycotan gloomier gloomiest gloomish gloomy gloopier gloopiest gloopy gloppier gloppiest gloppy glossier glossiest glossopalatine glost glowy gluey gluggy gluier gluiest glum glummer glummest glurgy glutaryl glutenfree gluttonish glycoprocessing glycosylating gnarley gnarlier gnarliest gnarly gnashy gnatty gnawn gneissose gnomish goalbound goatier goatiest goatish goatly goatproof goaty gobbier gobbiest gobsmacking goddamn goddang godfatherly godfearing godforsaken godlier godliest godly godmotherly godsent godwinian goebbelsian goethean gogetting goggly gogolian goldarn golden goldeny goldiest goldlip goldtail goldy gollumish gompertzian goncharovian gonzo goodest goodish goodo goodwife gooey goofier goofiest goofy googlier googliest gooier gooiest gooky goopier goopiest goopy goosebumpy goosey goosy gopping gorbachevian gordian goreyesque gorier goriest gorillian gormenghastian gormy gorsy gory goshdarn goshdurn gospelly gossipier gossipiest gossipy gothically gothicky gothy gotten gouty governessy governmentwide goyish grabbier grabbiest grabby gracile gradelier gradeliest gradewide gradgrindian grainier grainiest grainy grande grander grandest grandfatherly grandiloquent grandiose grandmotherly graney grapefruity grapey grapier grapiest grasscourt grassier grassiest grassroots grassy gravelly graven gravesian gravest gravid gravogyro grayer grayest grayish greasier greasiest greasy greater greatest greedier greediest greedy greeker greekest greekish greenean greener greenest greengagey greenish greenside gregorian grenadian greyer greyest greyish gricean griesly grievousest grim grimier grimiest grimlier grimliest grimmer grimmest grimy grippier grippiest grippy grislier grisliest grisly gristlier gristliest gristly grittier grittiest gritty grizzlier grizzliest groanworthy grodier grodiest grody groggier groggiest groggy groovesome groovier grooviest groovy grosser grossest grottier grottiest grotty grouchier grouchiest grouchy groundward groundwards grouty grovy growlier growliest growly grown growne grubbier grubbiest grubby grudging grueling gruelling gruesome gruesomer gruesomest gruff gruffer gruffest gruffish grum grumblier grumbliest grumbly grummer grummest grumpier grumpiest grumpy grungier grungiest grungy guardant gud guestfriendly guffmanesque guidebookish guiltfree guiltier guiltiest guiltridden guitary gujarati gulfy gullah gullible gulliverian gullwing gummier gummiest gungey gungier gungiest gungy gunkier gunkiest gunky gunshy gunslinging gurgly gushier gushiest gushy gustatory gustier gustiest gusty gutenbergian gutsier gutsiest gutsy guttate guttiest guttiform gutty gutwrenching guyish gypsyish gyratory gyrosynchrotron habile hackerish hackerproof hackier hackiest hackish hackly hackproof hacky hadronizing haedine haemagglutinating hafnian haggish hagrid hagridden haimish haircurling hairier hairiest hairraising hairy haken hakkanese halesome halest halfawake haline hallmarkish hallmarky halloweeny hallucinatory hammier hammiest hamose hamulate hamulose handblown handbuilt handier handiest handly handmade handsewn handsfree handsomest handspun handsy handwavey handwavy handwoven handwritten handy hangoverish hangry haphazard haplodeficient haploinsufficient haplophyte happeningest happier happiest happy haraam haram harborside hardbitten hardbound hardest hardier hardiest hardish hardscrabble hardshell hardwearing hardwon hardworking hardy hardyan hardyesque harlequinesque harpyish harsher harshest hasslefree hastate hastier hastiest hasty hateworthy hattier hattiest hatty haughtier haughtiest haughty hauptmannian haurient hausdorff hautest hawkish hawky hawthornean hawthornian hawthorny hazardproof hazelly hazelnutty hazier haziest hazy headachy headier headiest headish headmasterly headmost headrushing headstrong heady healsome healthier healthiest healthy heapier heapiest heapy hearn hearsome heartachey heartachy heartbroken heartfelt heartier heartiest heartrending heartsick heartsore heartstopping heartwhole heartwrenching hearty heathenish heathier heathiest heathy heavenlier heavenliest heavenly heavenwards heavier heaviest heavyish heavyset hebbian hecka heckuva heegaard hefnerian heftier heftiest hefty hegelian heideggerian heightist heinleinian heliborne hellbent hellbound hellish helluva hellzapoppin helmholtzian helminthoid hemagglutinating hemilabile hemingwayesque hemolymphoid hempen hep hepatobiliary hepburnian heptastyle herbose herby herculaean herculean herdwide herile hermian hermitian herodotean herpetiform herschelian hertzian hesitant heteroaryl heterodisperse heterodox heterofriendly heteroousian heterophase heterophile heteroploid heteroresistant heterosexually hevery hewn hexacoordinate hexacore hexastyle hiccupy hidden hidebound hifalutin highborn highbush highcut higher highest highfalooting highfalutin highfaluting highflying highish highprofile highresolution highrisk hiligaynon hillier hilliest hilly hindermost hindi hindustani hinkier hinkiest hinky hintermost hintikkian hiphugger hipper hippest hippieish hippier hippiest hippocrepiform hippoid hippopotomonstrosesquipedalian hippotigrine hippyish hipshot hipsterish hircose hirquine hirrient hirsute hispanophone hissier hissiest hitchcockian hitlerian hitlerish hitmaking hmong hoarier hoariest hoarse hoarser hoarsest hoary hobbesian hobbity hobbly hobbsian hocclevean hocclevian hochwohlgeboren hodiern hofstadterian hoggish hoggy hognose hokey hokier hokiest hoky holaspid holey holier holiest hollower hollowest hollywoodesque hollywoodian hollywoodish holmesian holmian holy homeborn homebound homegrown homelier homeliest homely homemade homeowning homerian homesick homestyle homewards homier homiest homodiploid homodont homoiousian homoousian homoresistant honest honestest honeyish honorary honourary hookier hookiest hooty hopperesque hoppier hoppiest hopposite hoppy horatian hornier horniest horny horowitzian horrid horrider horridest horrisonant horrorstricken horrorstruck horsedrawn horsier horsiest hotcha hotelwide hott hotter hottest hottish houdiniesque hourlong hourslong housebound housebroken housemade housewide housewifely housewifey housewifish hoyden hoydenish hubbardian hucksterish huffingly huffy huge huger hugest huggermugger huggier huggiest huggy hughesian huipil hulking hulky humane humaniform humanmade humblest humbucking humdrum humid hummin hummocky humongoid humpier humpiest humusy hungover hungrier hungriest hungry hunkier hunkiest hunkish hunseemly hurtier hurtiest hurty husbandly huskier huskiest husserlian hyacinthine hyalescent hyaloid hyblean hydatidiform hydatoid hydrido hydrogenian hydronian hydrosaline hydrosanitary hydroskimming hydrosoluble hydrostationary hydroxy hydroxylian hygrophoroid hylobatine hymeniform hyper hyperaccreting hyperacid hyperacute hyperalert hyperarid hyperarticulate hyperaware hypercapitalist hyperclean hypercompact hypercomplex hyperconfident hyperconsumerist hyperdiploid hyperefficient hypereutectoid hyperextensible hyperfast hyperfeminine hyperfine hyperfinite hyperforeign hyperhygienist hyperinflationary hyperintelligent hyperintense hyperionian hyperkahler hyperlegible hyperlight hyperliterate hyperluxe hypermasculine hypermobile hypermodern hyperpartisan hypersaline hyperscaling hypersoft hypersomniac hypersusceptible hypertense hyperthyroid hypervigilant hypervisible hypervivid hyphy hypnoid hypogean hypogene hypohamiltonian hypomethylating hypostyle hypothyroid hypsodont hystricine hystricomorph ianthine iapetian iberomaurusian ibizan ibsenesque ibsenian icebound icebreaking icelandish icey ichthyosiform icier iciest ickier ickiest icklest icky icterine icteroid icy idean idem idempotent identarian ideomotor idiotproof idlest iffier iffiest iffy ignescent ignoble ignorant ignorantest iid ikey ileac iliac ilka illegible illegitimate iller illest illicit illinois illiquid illish illlit illocutionary illuminatory illusionary illusory illuster illyrian imaginary imido immaculate immanent immarcescible immature immeasurably immediate immense immersible imminent immiscible immiserizing immobile immoderate immodest immotile immund immunocompatible immunocompetent immunodeficient immunodominant immunoelectron immunoenhancing immunofluorescent immunogene immunomodulating immunomodulatory immunoprecipitating immunoregulating immunoregulatory immunostimulating immunostimulatory immunotolerant imparipinnate impassible impassionate impatient impenitent imperceptible impercipient imperiality impermanent impermeant impermissible impertinent impish implausible implicit impolite impotent impraescriptible imprecatory imprecise impressible improper improvident improvisatory imprudent impudent impunctate impune impure impurer impurest inaccessible inaccurate inacquiescent inadept inadequate inadmissible inadvertent inamyloid inane inaniloquent inapparent inapposite inapprehensible inappropriate inapt inarticulate inaudible inauguratory inavertible inband inborn inbroken inbuilt incalcitrant incalescent incan incantatory incessant inchlong inchwide incivil inclement includible inclusible inclusionary inclusionist incognizant incoherent incoincident incommensurate incompatible incompossible incomprehensible incompressible incomunicado incondign incondite incongruent inconsiderate inconsistent inconsolate inconsonant inconstant incontestible incontinent incontrovertible inconvenient inconvertible incony incorrect incorrupt incorruptible increasing increate incredible incriminatory incruent inculpatory incult incurrent incut indecent indef indefeasible indefectible indefensible indefinite indehiscent indeliberate indelible indelicate indescript indestructible indeterminate indianan indicatory indicible indifferent indigestible indignant indigoid indirect indiscreet indiscrete indiscriminate indiscriminating indiscussible indissoluble indistinct indivisible indoaryan indochinese indocile indoeuropean indoor indrawn inducible indulgent industrywide industrywise inefficient inelegant ineligible ineloquent ineludible inept inerrant inevident inexact inexhaustible inexistent inexpedient inexpert inexplicit inexpressible inextendible inextensible infallible infalling infantile infantine infeasible infecund infeft infertile infinitary infinite infirmer infirmest inflammatory inflationary inflexible inflight inflorescent inflowing informatory infradian infrangible infrequent infrequently infuckingcredible infundibulate infundibuliform infusible infy ingenuine ingestible ingoing ingrowing ingrown inherent inhibitory inhouse inhuman inhumane initiatory inkier inkiest inky inlying inmost innercity innermost innerspring innocenter innominate innovatory innumerate inoperant inopportune inordinate inplane inquisiturient inquorate inrushing insane insanitary insatiate insatiaty inscient insectan insectile insectproof insecty insecure inseducible insensible insentient insequent insiderish insidery insignificant insincere insipid insipient insistent insober insoluble insolvent insouciant inspiratory institutionwide instore insubordinate insufficient insurrectionary insusceptible inswinging inswung intact intaken integrating integumentary intelligent intelligible intemerate intemperate intense intenser intensest interagency interamerican interarm interatom interband interbank interbasin interbeat interbinary interborough interbranch interbuilding interburst intercalary intercamp intercarrier intercaste intercave intercavitary intercessory interchain interchannel interchromatin interchurch intercloud interclub intercluster intercollege intercollegiate intercollision intercommunity intercommuting intercompany intercompartment intercomponent intercomprehensible interconference interconvertible intercorporate intercountry intercrater intercrystalline intercurrent intercycle interday interdealer interdendrimer interdependent interdictory interdimer interdisciplinary interdistrict interdomain interdot interelectrode interelectron interesting intereuropean interevent interfaction interfaith interfamily interfemale interfilament interfleet interfluent interforce interform interfulgent interfullerene intergender intergrain intergroup intergrown interhelix interhuman interisland interjacent interjudge interkinetochore interlaboratory interlacustrine interladder interleaflet interleague interleukine interlevel interlibrary interline interlinking intermale intermaxillary intermembrane interminate interminiband intermittent intermodel intermonomer intermountain internecine internucleon internucleoside internucleotide interobserver interorgan interpair interparent interparticle interparty interpatient interpeak interpeptide interphotoreceptor interphylum interplane interplanetary interplate interplayer interploidy interprocess interprocessor interproject interprotein interprotocol interprotomer interpulmonary interpulse interpupillary interquark interquartile interqubit interrater interreducible interresidue interridge interruptible intersample interscale interschool intersectarian intersegment interservice interset intersheet intersite intersong interspecies interspike interstack interstage interstep interstereocilia interstimulus interstrain interstrand interstring interstroke intersubband intersubject intersubunit intersurface intersurvey intersymbol intersystem intertaxon interthread intertrack intertrimer intertube interunion interuniversity interurban interuser intervalence intervalley intervehicle intervein intervenose intervillage intervortex interword interwoven interzoo intestate intimidatory intolerant intraband intrabank intrabinary intrabuilding intraburst intracardiac intracarotid intracase intracavitary intracavity intracell intrachain intracity intraclade intracloud intraclub intracluster intracompany intracomponent intraconference intracoronary intracrater intracrine intracycle intraday intradimer intradistrict intradivision intradot intraexon intrafamily intragrain intragroup intrahost intralayer intraleague intramembrane intramode intramonthly intranight intransient intransigeant intransigent intraoffice intrapair intraparticle intrapartum intraparty intrapathway intrapatient intraphase intrapipette intraplate intrapolaron intrapore intrapulmonary intrapulse intraresidue intraschool intrasite intraspecies intrasquad intrasubband intrasubunit intrateam intratumor intraunion intraurban intrauterine intravalley intrepid introducible introductory intromittent introrse intruse intumescent invasible invasionary inverecund invertible investible investigatory inveterate invex inviolate inviscid invisible involatile involuntary inwrought iodatian iodian iowan iracund irascible irate irater iratest iridescent iridian irksome ironshot iroquoian irradiant irrealis irredundant irrefrangible irrelevant irremissible irreparate irreprehensible irrepressible irreproducible irresistible irresoluble irresolute irreverend irreverent irreversible irruent irvingian isiac isidian islamicate islamitish islandwide islandy isocapacitary isocrystalline isodisperse isodispersion isoenergy isofemale isofrequency isosceles israelite issuant isthmian itchier itchiest itchy iterant ith itsier itsiest itsy itty ivorine jabberwocky jabbery jabby jacksonesque jacobethan jaden jaggeder jaggedest jaggedy jaggier jaggiest jaggy jailbroken jamesian jammier jammiest janglier jangliest jangly janian janiform janitory jankier jankiest janky janner japanesey japetian japhetite jargony jas jasest jasminy jaspery jaspidean jatvingian jauntier jauntiest jaunty javan jawdropping jaynesian jazzier jazziest jazzy jeevesian jejune jellyish jerkier jerkiest jerkish jerksome jerran jerrybuilt jesusian jesusy jetset jewish jhatka jigglier jiggliest jiggly jiggy jigsawn jillionth jimp jimper jimpest jinglier jingliest jingly jingoish jinkier jinkiest jinky jitterier jitteriest jittery jivey jobsian jockish jocky jocose jocund johannine johnsonian jokesome jokey jokier jokiest joky jollier jolliest joltier joltiest joltproof jolty jominian jongian jonsonesque jonsonian jouncy jowlier jowliest jowly joycean joycian joyridden jrm jubilant judean judenrein jugate juicier juiciest juicy julian jumpier jumpiest jumpout jumpy junglier jungliest jungly juniorest junkier junkiest junoesque junonian juster justest justificatory justinian juvenescent juvey juxtamembrane kaalgat kabuli kafkaesque kaflooey kagyu kalian kamboji kambuja kanny kansan kapampangan kapingamarangi kaput kaputt karabakhi kartu kartvelian kashubian katywampus kawaii keatsian keenest keirseyan kelantanese kemalist kempt kempty kennedyesque kenspeckle keplerian keratinoid keratose kerflewie kerflewy kerflooey kerouacian ketchuppy kewl kewler kewlest khinalug kickass kickier kickiest kicky kiddish kidhood kidhoods kierkegaardian kiganda kimilsungist kinder kindest kindlier kindliest kingian kinglier kingliest kingsize kinkier kinkiest kinky kinociliary kinseyan kiplingesque kiplingian kirlian kissiest kissingerian kissy kitscher kitschest kitschier kitschiest kitschy kittenish kittler kittlest kittycorner kittywampus kleinian klezmerish klimtian kludgy klutzier klutziest klutzy knaggier knaggiest knaggy knaveproof knavish kneedeep knobbier knobbiest knobblier knobbliest knobbly knobby knockproof knottier knottiest knotty knownst knuckly knurlier knurliest knurly kolmogorov kookier kookiest kookish kooky kool kordofanian koreshian kroeberian kruegeresque kubrickian kuhnian kurdish kvetchier kvetchiest kvetchy kwaai labelloid labent labile laborsaving laborsome laboursome labyrinthian labyrinthine laccate lacertian lacertine lacey lachrymary lachrymose lacier laciest laciniate lackluster lacklustre lactescent lacunary lacunose lacustrine lacy laddish laden ladyish ladykilling laevorotatory lageniform laggier laggiest laggy laidback lain laingian lairy lakewide lakoffian lakovian laky lambdoid lambent lamby lamellate lamelliform lamest lanate lancastrian lanceolate landbound landladyish landowning landside landward languedocian languid lanker lankest lankier lankiest lanky lanose lanthanian lappish laqueary lardier lardiest large largeish largeleaf largenose larger largest largish larkinesque larkinian larky lasting latent latescent lathery latian latinate latish latrorse latter latterday laudatory laughsome laughworthy lauryl laveyan lavy lawrentian lawyerly laxest layerwise lazier laziest lazuline lazy lazyish leaden leading leadoff leafbearing leafen leafier leafiest leafy leaguewide leakier leakiest leakproof leaky lealer lealest leaner leanest leastest leatherbound leatherier leatheriest leathern leathery leavy lechy lecythiform leerier leeriest leery leesome leetle leeward leftfield lefthand leftish leftwing legatine legendaire legendary leggier leggiest leggy legible legit leibnizian lekker lemony lengthier lengthiest lengthly lengthy lenient leninian lenis lenns lenten lentiform leonese leonine lepiotoid leporine leptokurtosis lesbianish lethean letten lettish lettucey lettucy levantine levelest levorotatory lewd lewder lewdest lewer lewest liberalish liberatory librarianly libre licey licit lickle licky liefer liefest liefsome lifechanging lifedraining lifegiving lifelong lifesize liftin lightest lightfast lightfoot lightish lightproof lightsome lightstruck ligulate likelier likeliest likest likish lil limacine limbate limber limerent limicoline limiest limitary limoniform limpest limpid limpish limy lincoln lincolnesque lincolnian lindberghian lineny linguiform linguisticky lingulate linian linking linky linnaean linnean linsey lintfree linty lionish lipoamino liposoluble lippier lippiest lipschitz lipsticky liquescent liquidly liquidy liquoricey lirate lispy lissom lissome listy lisztian literary lithe lither lithesome lithest lithian litho lithoid littler littlest livebearing liveborn livelier liveliest lively liverish livid lizardly lizardy ln loamier loamiest loamy loath loathest loathiest loathlier loathliest loathly loathsome lobachevskian lobate lobopodian lobsterish locellate lochside locomotor locomotory locrian loegrian loftier loftiest lofty log logamediate logier logiest logy lojban londonesque londonish lone lonelier loneliest lonely longheld longiloquent longish longlasting longnose longrunning longshore longstanding longterm longtime longward longwave lookist looney loonier looniest loopier loopiest looptail loopwise loopy looseleaf looser loosest lophodont lophophorate loricate lorra loserish losingest lossmaking lossy loth lother lothest lotsa louder loudest loudish loungey loungier loungiest loungy loury louseborne lousier lousiest lousy loutish louty lovecraftian lovelier loveliest lovelorn loverly lovesick lovesome lovestruck loveworthy lowborn lowbush lowcost lowcut lowermost lowery lowest lowgrade lowish lowlier lowliest lown lucasian lucent lucid lucilian luckier luckiest lucky lucretian lucullan ludibund ludlovian ludlow lukasiewiczian luke lukewarm lulzier lulziest lulzworthy lulzy lumicrine luminant luminescent luminiscente lumpen lumpier lumpiest lumpish lumpy lunkish lunky lurid lurvely lusher lushest lusitanian lustier lustiest lusty lutecian luteinising luvverly luxembourgish luxuriant lyard lyart lymphoblastoid lymphoid lyncean lynchian lyonnaise lyotardian lyrate lyriform lysyl lytdybr macabre macanese macaronesian macbethian maccabean machiolate macneicean macrobian macrocephalus macrocrystalline macrodont macroevolutionary macropine macropodine macrospin maculatory maculose maddest maddish madid madreporiform madurese magdala maggiore maggotish maggoty maghrebi maghrebin maglemosian magnetocoriolis magnetocrystalline magnetoresistant magnicaudate magnificent magniloquent magrittean mahoran maidenly maileresque mailorder maily maimonidean mainest majorcan majoritarian makah makeout makhani makhonee making malabarese malapropos maledicent maleficent malestream malignant malleiform malshapen maltesian malthusian maltier maltiest malty mamillary mammate mammery mammiform mammilloid mammonish mammose mancalline mancipatory mancude mancunide mandatory mandibuliform mandibulohyoid manganian manganoan mangier mangiest mangy manhattanese manicky maniform mankier mankiest manky manlier manliest manly manmade mannerly mannish manque manques manslaughtering mantegnesque manualiter manubiary manueline manurey manycore mapley maply maraging marathi marbly marcescent marchy mardier mardiest mardy marfanoid margariney marginate marian marioesque maritime markan markovian markworthy marlier marliest marly marmaladey marmalady maroonish marrowish marshier marshiest marshmallowy marshside marshy martellato martuthunira martyrish martyrly marv marvy marxian masaman masculine mashy masqueradish massaman masseterine massier massiest masturbatory matchlit matchwinning matchy materterine matin matt mattery matthean matty maturer maturest maturish maudlin maughamesque maughamian maumish mauretanian mausolean mauvest mauvish mawkish mawky max maxillipedary mayberry mayonnaisey mazier maziest mazy mccarthyesque meadowy meady meager meagerer meagerest meagrer meagrest mealier mealiest mealy meandry meaner meanest meanish measlier measliest measly meatier meatiest meaty mechanosensory meddlesome mediad mediating mediatory mediocre mediterranean mediumwave medullary medullate meeker meekest mega megachiropteran megacool megarich megascale megaselling megavariate megavitamin megawealthy meh meiji melanesian meline melkite mellifluent mellower mellowest melony melpomenean melpomenish meltaway meltier meltiest meltproof melty membraniform memoirish memorylessness menckenian mendelian mennish menschier menschy mensuralist meowy mephistophelean meraspid mercantile merchantile mercuroan merest meringuey merocrine merodiploid merrier merriest merry merulioid meseraick meshuga meshugah meshugga meshuggah meshugge mesoamerican mesoarchean mesocrystalline mesokurtosis messier messiest messy meta metabelian metalating metalbearing metalpoor metasedimentary metatectoid metidian mettlesome miaphysite michelangelesque microblade microcirculatory microcrystalline microdiverse microevolutionary microfine micrometazoan micronesian micropapillary micropolitan micropower microreversible microscanning microsize microsoftian microstock microtine micturient midadolescent midaltitude midblock midbrow midbudget midcall midcampaign midcap midcareer midcentury midchapter midcoast midconstruction midcontinent midcourse midcycle middlemost middling midengine midflight midfoot midfrequency midfuck midgey midgrade midheight midlevel midlist midmarriage midmonth midmost midmountain midpark midperiod midprice midquarter midranking midscale midsentence midsex midshow midsize midstrength midtier midweekly midweight midwestern miffy mighter mightest mightier mightiest migratory milanese milch milder mildest mildewy mildish milelong milewide miliary milkier milkiest milkwhite milky millean millenary millenne millerian millian milligrade milquetoasty miltonian milvine mimantian min minatory mindbending mindblowing mindboggling minerally mingent mingier mingiest minging mingy miniscule minkowskian minneapolitan minnesotan minorish mintier mintiest minty minuter minuteslong minutest minxish miny miocene mirandan mirandian mirier miriest mirky mirrory miry misbegotten misborn miscible miscut misdone miserly misfortunate misgiven misgone misgotten mishuga misproduce misseeming misseen misshapen missileproof missish mistaken misthrown mistier mistiest misty miswritten mitigatory mitosing mixeder mixolydian moany mobbish modalist modelesque modelly modest modish modishest modulatory moist moister moistest moisty molassine moldier moldiest moldy molieresque molluscan molluskan molten molybdian momentary monaxonid monetary monetesque moneygrubbing moneyspinning mongoloid mongrelly moniliform monkeyish monkish monocrystalline monodentate monogyne mononucleate monopartite monopeptidyl monophyte monorchid monosulcate monotectoid monstrose montagovian monthlong monthslong moodier moodiest moody moonier mooniest moonish moonlit moonstruck moorish moory moosey mopey mopier mopiest mopish moppy moratory morbid morbilliform mordvin moreish moreso moresque moriform morish mornay morose morphophonologically mosquitoey mossier mossiest mossy mostest mothbally motherfuckin motherish motherloving motherly mothier mothiest mothy motile motorik mouldier mouldiest mouldy mountainy mouseproof mousey mousier mousiest mousy mouthier mouthiest mouthwatering mouthy moviegoing moving mown mozartian mucho muckier muckiest mucky mucociliary mucoid mucousy mucronate muddier muddiest mudproof muggier muggiest muggletonian muggy muhammadan mulcible muley mulish multiaccess multiacre multiact multiaddress multiage multiagency multiagent multiamplifier multiangle multiantenna multiapplication multiarchitecture multiarea multiarray multiatom multiauthor multiball multiband multibank multibarrel multibaryon multibathroom multibay multibeam multibedroom multibillion multibit multiblade multiblock multibody multiboot multiborough multiboson multibranch multibrand multibrane multibridge multibuffer multibuilding multibuy multibyte multicamera multicampus multicandidate multicarat multicarbon multicarrier multicase multicat multicell multicenter multicentre multichain multichallenger multichannel multichapter multicharacter multichromatid multicity multiclade multiclaim multiclan multiclass multiclassifier multiclient multicluster multicoat multicode multicollection multicollision multicolor multicolour multicolumn multicommittee multicommodity multicompartment multicomponent multicomputer multiconductor multiconfiguration multiconsole multiconstituent multicopy multicore multicountry multicounty multicourse multicraft multicriteria multicult multiculti multicurie multicurrency multicurrent multicustomer multidate multiday multideath multidecade multidefendant multident multidentate multidepartment multidetector multidevice multidigit multidirector multidirectory multidisc multidisciplinary multidiscipline multidisk multidoctor multidog multidomain multidose multidriver multidrop multidrug multielectrode multielectron multielement multiemployer multiengine multiepisode multiexchange multifacet multifaction multifactor multifaith multifare multifarm multifibre multifid multifield multifigure multifilament multiflash multiflight multifluid multifold multifoliate multifood multiformat multifracture multifragmenting multiframework multifrequency multifront multifunction multigame multigap multigas multigate multigender multigene multigeneration multigenome multigenre multigerm multigluon multigrade multigrain multigram multigravid multigraviton multigrid multihadron multihazard multihectare multiheterodyne multihole multihomer multihop multihorse multihour multiindustry multiitem multijet multijoin multijudge multijugate multijurisdiction multikey multikilobase multikilogram multikilojoule multikilometer multikilowatt multilabel multilane multilanguage multilaser multileg multilepton multilevel multilibrary multilight multiline multilink multiliter multilitre multilobulate multilocation multiloculate multilocus multiloop multiloquent multimagazine multimanager multimarket multimedium multimegaton multimember multimeson multimessenger multimethod multimode multimodel multimonitor multimorbid multimove multimovement multimuseum multination multinetwork multinight multinitrogen multinucleate multinucleon multiobject multioctave multioperation multiorgan multioutlet multipackage multipacket multipage multipane multipanel multiparameter multiparcel multiparent multipart multiparticle multipartite multiparton multiparty multipass multipattern multipayer multipayment multipeak multiperson multiphase multiphonon multiphoton multipicture multipiece multipion multipipe multipipeline multipiston multipixel multiplanet multiplant multiplatform multiplatinum multiplayer multiplot multipoint multipolicy multipool multiposition multipotent multipound multipower multipresent multiproblem multiprocess multiproduct multiprogram multiprong multiprotein multiprotocol multiprovince multipurpose multiquanta multiqubit multirace multirack multirange multireel multireference multiresistant multiresolution multiresponse multirestaurant multiride multirisk multiriver multirole multiroom multirow multisample multiscale multiscaling multiscene multischema multischeme multischool multiscience multiscreen multiseason multisectarian multisection multisector multisegment multisense multisensor multisensory multisentence multiserver multiservice multisession multishade multishell multiship multishipment multishop multisite multisize multiskill multisoliton multisolution multisource multispacecraft multispanning multispeaker multispeciality multispecialty multispecies multispeckle multispectra multispin multispore multisport multisports multistage multistate multistatement multistation multistep multistop multistore multistrain multistrand multistrange multistrategy multistream multistreet multistrike multistudent multisubunit multisulcate multisulfur multisulphur multisurface multisymptom multisystem multitab multitargeting multitaxon multiteam multitemperature multitenant multiterm multitest multitheater multitheatre multitherapist multitherapy multithread multiticket multitier multititle multitooth multitower multitown multitrace multitrack multitrillion multiturbine multiunion multiunit multiuse multiuser multivalley multivalue multivariant multivehicle multivendor multivenue multiverb multivessel multiview multivoltine multivolume multiwall multiwarehouse multiwarhead multiwavelength multiway multiweek multiwell multiwindow multiword multizone mumbly mummiform mumpish mumpy mumsier mumsiest mundaner mundanest mundificatory munificent munting muricate murine murkier murkiest murky muscicapine musclebound muscley musclier muscliest muscly museumesque museumworthy mushier mushiest mushroomy mushy muskier muskiest musky mussy mustardy mustier mustiest musty mutest muybridgean muzaky muzzleloading mycelioid mycenoid myeloid myocadiac myoendocrine myoid myoxine myrrhy mysterioso mythy myxoid nabokovian naevoid naevose naff naffer naffest nagelian naggier naggiest naggy naiant naifer naifest nailbiting naily nameworthy nangry nanocrystalline nanoid nanoparticulate nanosize napiform nappier nappiest nariform narky narratorly narratory narrowband narrowest narrowhead narrowish narsty nary nascent nashian nastier nastiest natant natatory nationist nationwide natrian nattier nattiest natty naucorioid naughtier naughtiest naughty nauseating nausicaan nautiliform naviform neaper neapest neapy nearish neater neatest nebbie nebbier nebbiest nebbishy nebby nebuly necessary necrotising nectarean nectarel nee needier neediest needlenose needly needy nefast negligent negligible nehruvian neighborhoody neighborly neighbourly nekkid nematoid nemean neoadjuvant neoarchean neodymian neogene neomodern nerdier nerdiest nerdish nerdy nerts nertz nervier nerviest nervine nervy nesh nessary nether netherlands nett nettlesome nettly networkwide neurodiverse neuroendocrine neuroevolutionary neurofibrillary neuroid neuromotor neurosecretory neurosensory neutrois nevadan neverending nevisian newbuilt newer newest newfound newish newmown newsier newsiest newspaperish newsroomwide newsworthy nfg ngarrindjeri ngcha niceish nicer nicest nichey nicois nicomachean niddering niffier niffiest niffy niftier niftiest nifty niggardliest niggerish niggerly niggly nightclubby nightmarish nijinskian nilpotent nimbier nimbiest nimble nimbler nimblest nimbyer nimbyest ninepenny nineteenish ninetyish niobatian niobian nippier nippiest nipply nipponese nitid nitpickier nitpickiest nitpicky nitratian nitrian nitrifying nitty noarch nobbier nobbiest nobblier nobbliest nobbly nobby nobel nobiliary nobler noblest nocent noctilucent noctivagant nodose nodulose noetherian nogai nogo noice noirest noirish noisemaking noisier noisiest noisome noisy nonabelian nonabsorbent nonabsorbing nonabstract nonabutting nonacademically nonaccelerating nonaccepting nonaccounting nonaccusatory nonacetate nonacting nonadapting nonaddicting nonadherent nonadipose nonadjacent nonadjoint nonadjusting nonadopting nonadsorbent nonadventure nonadverse nonadvertising nonadvisory nonaerospace nonaffectionate nonafferent nonaffine nonaffluent nonageing nonagency nonagenda nonaging nonagouti nonagrarian nonagreeing nonaid nonairborne nonairfield nonairline nonairport nonairtight nonalarm nonalarming nonalarmist nonalbum nonalienation nonalimony nonalloy nonaluminum nonambient nonambulance nonambulatory nonamino nonanalog nonanalogue nonancillary nonangry nonanimation nonannealing nonantioxidant nonantiparallel nonantisense nonapparent nonappealing nonappearing nonaquarium nonarbitrary nonarcing nonarid nonarmy nonarousing nonartillery nonarts nonary nonasbestos nonasian nonaspirin nonassignment nonattack nonattacking nonattending nonattracting nonauction nonaudio nonauditory nonauto nonautoimmune nonautomation nonauxiliary nonauxin nonavian nonaviation nonawake nonback nonbacklit nonbacktracking nonbad nonbaking nonbald nonbalding nonballet nonbanana nonbanking nonbankrupt nonbankruptcy nonbarbecue nonbarking nonbarley nonbarren nonbasalt nonbaseball nonbaseline nonbasement nonbasketball nonbattery nonbattle nonbauxite nonbayesian nonbeach nonbedside nonbeer nonbelieving nonbellicose nonbenign nonbetting nonbidding nonbiliary nonbinary nonbinding nonbiology nonbiomass nonbirding nonbirefringent nonbiting nonbladder nonblameworthy nonblank nonbleach nonbleaching nonbloc nonblockbuster nonblocking nonblog nonblogging nonblue nonblurring nonblurry nonboard nonboarding nonboating nonboiling nonbold nonbonding nonbonus nonbony nonbookkeeping nonboom nonbooting nonborderline nonboring nonboron nonborrowing nonbotulinum nonbound nonbourgeois nonbovine nonboxing nonbraille nonbranching nonbrass nonbread nonbreaking nonbreastfeeding nonbreathing nonbrewing nonbridge nonbridging nonbrittle nonbroadband nonbroadcast nonbroadcasting nonbroken nonbromine nonbronze nonbrown nonbubbly nonbudget nonbudgetary nonbullying nonbuoyant nonburger nonburning nonburrowing nonbusy nonbutter nonbutterfat nonbuying nonbyte noncabinet noncaching noncactus noncadmium noncaking noncalcifying noncalcium noncalculus noncampaign noncampaigning noncamping noncampus noncanadian noncancer noncanine noncanvas noncarb noncarbon noncard noncardiac noncardiopulmonary noncareer noncarotid noncasein noncash noncasino noncassette noncaste noncatalog noncatchment noncattle noncavitary noncelebratory noncelibate noncement noncensoring noncerium noncertificate noncesium nonchalant nonchalky nonchallenging nonchanging noncharging noncheating nonchecking noncheese nonchelating nonchemistry nonchess nonchicken nonchildbearing nonchinese nonchipping nonchlorine nonchlorofluorocarbon nonchloroplast nonchocolate noncholera noncholesterol nonchord nonchromium nonchurch nonchurchly noncigarette noncinema noncircadian noncirculating noncircus noncitrus noncity noncivil nonclandestine nonclassifying nonclassroom nonclay nonclayey nonclean noncling nonclosing nonclothing nonclotting noncloudy noncloying noncoaching noncoalition noncobalt noncocoa noncoding noncoffee noncognizant noncoherent noncoincident noncoinciding noncoking noncold noncollapsible noncollecting noncollectivist noncollege noncollegiate noncolliding noncolorfast noncombat noncombustible noncommon noncommunicating noncommunity noncommuting noncompact noncompassionate noncompatible noncompetent noncompeting noncompetition noncomplementary noncomplementing noncomplete noncomplex noncompliant noncomplimentary noncomposite noncomprehending noncompressible noncompulsory noncomputer noncon nonconcave nonconcert nonconcessionary nonconciliatory nonconcurrent nonconcurring noncondemning noncondensate noncondominium nonconducting nonconference nonconfessing nonconfident nonconfining nonconfirmatory nonconflicting nonconfluent nonconforming noncongealing noncongruent nonconjoint nonconsensus nonconsequent nonconserving nonconsolute nonconstant nonconstituency nonconstricting nonconstruction nonconsulting nonconsumerist nonconsuming noncontact noncontaminating noncontemporary noncontending noncontingent noncontinuing noncontraband noncontract noncontractile noncontracting noncontradictory noncontributing noncontributory noncontrolling nonconvergent nonconverging nonconversant nonconvertible nonconvex nonconvincing noncooking noncooperating noncoordinating noncopper noncoralline noncore noncoronary noncorporate noncorrect noncorrelating noncorridor noncorrodible noncorroding noncorrupt noncorrupting noncosmopolitan noncotton noncount noncounterfeit noncounty noncoupon noncourt noncovariant noncreaky noncreationary noncredible noncredit noncreditworthy noncrossing noncrumbly noncrustacean noncrustose noncrystalline nonculinary noncult noncurfew noncurly noncurrency noncurrent noncussing noncustom noncustoms noncut noncute noncutting noncyber noncycling noncylinder noncytochrome noncytokine noncytosol nondairy nondamaging nondamping nondancing nondatabase nondating nondead nondeadly nondeaf nondealership nondebt nondecaying nondeclaring nondecreasing nondeducible nondeductible nondeep nondefault nondefecting nondefence nondefense nondeficient nondeficit nondefining nondefinite nondeflationary nondefoliating nondegenerate nondegree nondehydrating nondelaying nondelegation nondeliberate nondemanding nondemonstrating nondenaturing nondenticulate nondeodorant nondepolarizing nondepot nondepreciating nondesensitizing nondesert nondeserving nondesign nondesignating nondesktop nondesperate nondessert nondestination nondeterminate nondeterrent nondeviant nondextrose nondialect nondialup nondialysis nondiamond nondiapausing nondictionary nondiet nondietary nondieting nondifferent nondiffracting nondiffuse nondiffusible nondiffusing nondigestible nondiploid nondipole nondirect nondirty nondisaster nondiscerning nondisciplinary nondiscordant nondiscretionary nondiscriminant nondiscriminate nondiscriminating nondiscriminatory nondisjoint nondisjunct nondisqualifying nondistant nondistinct nondistinguishing nondistorting nondistracting nondisturbing nondivergent nondiverse nondividing nondiving nondivisible nondivision nondivorce nondivorcing nondocking nondoctrinaire nondocumentary nondoing nondomain nondomicile nondominant nondonating nondoorman nondormant nondormitory nondouble nondrainage nondraining nondream nondreaming nondrilling nondrinking nondrip nondriving nondrowsy nondrunken nondrying nonductile nonduplex nondying nonearly nonearning nonearthbound noneastern nonechoing nonecholocating noneducation nonefficient nonegg nonejaculatory nonelderly nonelecting nonelection nonelementary nonelevator nonelite nonemergent nonempty nonemulsion nonendocrine nonenergy nonenforcing nonengaging nonengineering nonenterprise nonentertainment nonequine nonequity nonerect nonerectile noneroding nonerosion nonerupting nonerythroid nonescrow nonestablishment nonestrogen nonestuarine nonethanol nonethylene noneuro nonevaporating noneven nonevil nonevolutionary nonevolving nonexamination nonexcess nonexciting nonexclusionary nonexculpatory nonexecuting nonexercise nonexercising nonexhaust nonexhibit nonexhibiting nonexhibitionist nonexistent nonexisting nonexpense nonexplanatory nonexplicit nonexploiting nonexploratory nonexport nonexpository nonextant nonextensile nonextreme nonfacsimile nonfactory nonfaculty nonfading nonfailing nonfallout nonfalse nonfantasy nonfarm nonfarming nonfashion nonfast nonfasting nonfat nonfattening nonfatty nonfaulty nonfeasible nonfebrile nonfee nonfeeder nonfeeding nonfeminine nonfertile nonfertilizer nonfighting nonfilamentary nonfilming nonfinance nonfinite nonfire nonfirefighting nonfish nonfishery nonfishing nonfission nonfissioning nonfit nonflaccid nonflaking nonflaky nonflashing nonflat nonfleet nonflexible nonflickering nonfloating nonfloor nonflour nonflow nonflowering nonflowing nonfluctuating nonfluent nonfluffy nonfluorescent nonfluorine nonflush nonflushing nonflying nonfoam nonfoaming nonfoamy nonfoliate nonfoodborne nonfootball nonforaging nonforbidden nonforcible nonforcing nonforeclosure nonforeign nonforest nonforestry nonfossil nonfoveate nonfracture nonfracturing nonfragmentary nonfragrant nonfraud nonfree nonfreestanding nonfreeway nonfreezing nonfreight nonfrench nonfrequent nonfriendly nonfrigid nonfrilly nonfringe nonfrozen nonfructose nonfruit nonfruiting nonfuel nonfulfilling nonfull nonfunctioning nonfundraising nonfungible nonfurnace nonfurry nonfusion nonfussy nonfuture nonfutures nonfuzzy nongadget nongadolinium nongambling nongaming nongang nongarden nongardening nongarrison nongasoline nongaussian nongelling nongender nongenuine nongeography nongeology nongermane nongermanium nonghetto nonghostly nongiving nonglare nonglass nonglassy nonglaucoma nongloss nonglossy nonglucose nonglue nongluten nonglycerol nonglycogen nongold nongolf nongoods nongourmet nongoverning nongovernment nongraduating nongrainy nongraphics nongraphite nongrass nongrassy nongravitating nongray nongrazing nongreasy nongreat nongreedy nongreen nongreenhouse nongrey nongrocery nongrooming nonground nongrowing nongrowth nonguerrilla nonguideline nonguilty nongullible nonhair nonhairy nonhanging nonhaploid nonhappy nonhardcore nonhardening nonhardware nonhardy nonharvest nonheadline nonhealing nonhealthcare nonhealthy nonhearing nonheart nonheavy nonheavyweight nonhelium nonheme nonhereditary nonheritage nonhidden nonhighway nonhilly nonhip nonhockey nonhollow nonholy nonhome nonhomework nonhorror nonhospitality nonhostile nonhot nonhotel nonhourly nonhousehold nonhousing nonhumanitarian nonhumiliating nonhungry nonhunting nonhydrazine nonhydrogen nonhyperdiploid nonhypertext nonidempotent nonidentifying nonidle nonidling nonill nonilliterate nonimmediate nonimmune nonimpact nonimperialist nonimport nonimportant nonimporting nonimpotent nonimpressionist nonincandescent nonincendiary noninclusionary nonincreasing nonindependent nonindium noninducing nonindustry noninert noninfantile noninfecting noninfinite noninflammatory noninflationary noninflecting noninformation noninfrastructure noninherent noninheriting noninhibiting noninhibitory noninput noninsane noninspiring noninsulating noninsulin noninsulting noninsurance noninsurrectionary nonintegrating nonintelligent nonintense noninteracting nonintercourse noninterdependent noninterdisciplinary noninterest noninteresting noninterface noninterfering noninterim noninterlocking noninterlocutory nonintermediate nonintermittent noninterpolating noninterrupt nonintersecting nonintimate nonintimidating nonintoxicating nonintroductory noninvading noninvariant noninventory noninverting noninvestigatory noninvesting noniodine nonionizing noniridescent noniron nonirritating nonitinerant nonjade nonjail nonjapanese nonjava nonjazz nonjogging nonjoining nonjoint nonjudging nonjungle nonjunk nonjuring nonjury nonkeratinizing nonkeyboard nonkindergarten nonkinky nonkitchen nonkosher nonlab nonlabor nonlaboratory nonlaboring nonlabouring nonlactating nonlake nonland nonlandowning nonlaptop nonlarge nonlaser nonlatex nonlathering nonlattice nonlaughing nonlaundry nonlaying nonlazy nonlead nonleading nonleafy nonleague nonleaking nonleaky nonleap nonlearning nonleather nonlegacy nonlegendary nonlegitimate nonleukemia nonlevel nonlibrary nonligand nonlimbate nonlimiting nonlinen nonlinking nonliterary nonlithium nonlittering nonliver nonlivestock nonliving nonlobbying nonlocking nonlocomotory nonlodging nonlogistics nonlonely nonlookahead nonloopback nonlooping nonlosing nonlottery nonloving nonlower nonluxury nonlymphoid nonmachine nonmacrophage nonmagazine nonmagnesium nonmail nonmainframe nonmainstream nonmaize nonmalaria nonmalignant nonmammalian nonmanagement nonmandatory nonmanganese nonmanufacturing nonmarble nonmarijuana nonmarine nonmaritime nonmarket nonmarketing nonmarketplace nonmarrying nonmasculine nonmasing nonmassage nonmasticating nonmasturbating nonmasturbatory nonmatching nonmaternity nonmath nonmating nonmatrix nonmature nonmeat nonmeaty nonmedia nonmediating nonmedication nonmeditating nonmedullary nonmembrane nonmemory nonmenthol nonmercenary nonmercury nonmerger nonmessy nonmetro nonmetropolitan nonmexican nonmicrophone nonmigraine nonmigrating nonmigratory nonmilitary nonmilk nonmining nonmissile nonmissionary nonmobile nonmodem nonmoderate nonmodern nonmoisturizing nonmolybdenum nonmonetary nonmoney nonmonthly nonmoralizing nonmorbid nonmortgage nonmortuary nonmotile nonmotivating nonmotorcycle nonmouse nonmovie nonmoving nonmultilayer nonmultimedia nonmultiplex nonmultiplexing nonmultivariate nonmundane nonmurder nonmurine nonmuscle nonmuseum nonmutating nonmutation nonmute nonnegligent nonnegligible nonnegotiating nonnesting nonnetwork nonnew nonnews nonnewsworthy nonnewtonian nonnickel nonnitrogen nonnodulating nonnorthern nonnull nonnursing nonnurturing nonobese nonobjecting nonoblate nonobligate nonobligatory nonobscene nonobservant nonobsolescent nonobsolete nonobstructing nonocean nonodd nonoffice nonofficiating nonoil nonoily nonold nonolfactory nonomnipotent nonomniscient nonopalescent nonopaque nonopera nonoperating nonopposing nonorange nonorderly nonordinary nonorthodox nonoscillatory nonosmium nonoutlet nonoutlying nonoutput nonovarian nonovergrown nonoverhanging nonoverlapping nonovernight nonoverridden nonovert nonovoid nonovulating nonoxidising nonoxidizing nonoxygen nonozone nonpackaging nonpaging nonpaid nonpaint nonpainting nonpalmate nonpaper nonpapillary nonparacompact nonparaffin nonparallel nonparish nonpark nonparkinsonian nonparliamentary nonparsing nonparticipating nonparticipatory nonpartizan nonpasserine nonpassionate nonpast nonpasta nonpasture nonpaternity nonpatronizing nonpaying nonpeak nonpedigree nonpenetrating nonpenicillin nonpenile nonpeptidyl nonperceiving nonperching nonperfect nonperforming nonperiod nonpermanent nonpermeating nonpermissible nonpersistent nonpersonality nonpersonnel nonpertinent nonpetroleum nonphage nonpharma nonpharmacy nonphoning nonphosphorus nonphoto nonphysics nonpiano nonpine nonpink nonpitching nonpituitary nonpivoting nonpixel nonpizza nonplacement nonplague nonplanetary nonplankton nonplant nonplantation nonplantigrade nonplaque nonplatelet nonplatinum nonplaying nonplayoff nonpliant nonplutonium nonplywood nonpoints nonpoisoning nonpoker nonpolarizing nonpolice nonpolite nonpolling nonpolluting nonpolyester nonpolymerizing nonpolypoid nonpolyurethane nonpoor nonporcine nonpork nonpossessory nonpostmodern nonpostpartum nonpotassium nonpotato nonpottery nonpoultry nonpoverty nonpowdery nonpower nonpracticing nonpractising nonpraying nonpreaching nonprecipitating nonprecise nonpredatory nonpredicate nonpregnant nonprehensile nonpremature nonpremium nonprescription nonpresent nonpress nonpressuring nonprestige nonprickly nonpriestly nonprimary nonprime nonprint nonprinting nonprison nonprivate nonprocrastinating nonproducing nonprofane nonprogram nonprogramming nonprojectile nonproliferating nonproofreading nonpropellant nonproper nonproportionate nonproprietary nonpropulsion nonprosecution nonprotesting nonprotozoan nonprotruding nonproven nonprurient nonpubescent nonpublishing nonpulmonary nonpulse nonpurchasing nonpure nonpurine nonpurple nonquantum nonquarantine nonquarterly nonqueer nonquestioning nonqueueing nonqueuing nonquiescent nonquiet nonquota nonrabbit nonracing nonradiate nonradio nonradiopaque nonradium nonradon nonrail nonrailroad nonrailway nonrainforest nonrainy nonranching nonrandom nonrape nonraster nonratifying nonrating nonraw nonreactionary nonrealtime nonrecent nonreceptor nonrecession nonrecessionary nonreciprocating nonrecirculating nonrecoil nonrecombining nonrecording nonrecourse nonrecruiting nonrecurrent nonrecurring nonreducible nonreducing nonredundant nonreference nonreflecting nonreflex nonreform nonreforming nonrefracting nonrefractory nonrefreshing nonregister nonregulatory nonrelaxing nonrelevant nonrelocating nonremote nonrenewing nonrepeat nonreplicating nonreplying nonreproducible nonreproducing nonreptilian nonresearch nonreservation nonreserve nonresilient nonresin nonresistant nonresisting nonresonant nonrespiratory nonresponsible nonrestaurant nonresting nonrestraining nonresurgent nonretail nonretaliatory nonretractile nonretracting nonretrograde nonrev nonrevenue nonreversible nonreviewing nonrevisionary nonrevolving nonrewarding nonrhyming nonrice nonrich nonriding nonriemannian nonright nonrights nonrigid nonrioting nonriparian nonripe nonrisk nonrisky nonriverine nonroad nonroaming nonrobbery nonrobust nonrocky nonromance nonroof nonroster nonrotating nonrotting nonround nonroutine nonrubber nonrubella nonruby nonrugby nonruminating nonrunning nonrusting nonrusty nonsaccharine nonsafe nonsailing nonsalary nonsale nonsales nonsalient nonsaline nonsalivary nonsalmon nonsalt nonsalty nonsalutary nonsandstone nonsapient nonsatisfying nonsaturating nonsave nonsavvy nonscalding nonscaling nonscaly nonscanning nonscarce nonscary nonschizoid nonscholarly nonscholarship nonscissile nonscoring nonscreaming nonscrolling nonscuff nonsea nonsecondary nonsecretory nonsecure nonsecurity nonsedating nonsedimentary nonseeing nonsegregating nonselenium nonselfadjoint nonsemisimple nonsenate nonsenile nonsensationalist nonsensory nonsentient nonseptate nonserotonin nonserum nonserver nonservile nonserving nonsessile nonsevere nonsex nonsexist nonsexy nonshaking nonshallow nonshareholding nonshattering nonshearing nonshedding nonsheep nonshell nonshiny nonshipping nonshivering nonshoe nonshooting nonshopping nonshower nonshowy nonshrink nonshrinking nonshy nonsignificant nonsigning nonsilicon nonsilicone nonsilk nonsilly nonsilver nonsimple nonsimplex nonsimulation nonsinging nonsingle nonsiphonate nonskid nonslack nonslaveholding nonsleepy nonsliding nonslip nonslippery nonsloping nonsmall nonsmart nonsmoking nonsmooth nonsnack nonsnow nonsoapy nonsoccer nonsocializing nonsociology nonsodium nonsoftware nonsoil nonsoiling nonsolicit nonsolicitation nonsoliciting nonsolitary nonsoluble nonsoundtrack nonsoup nonsouthern nonsovereign nonsoviet nonspacing nonspalling nonspare nonsparking nonsparkling nonspeaking nonspecializing nonspecialty nonspecification nonspeech nonspending nonspicy nonspinning nonsplintering nonspoken nonspongy nonsponsoring nonsport nonsporting nonstaff nonstaining nonstale nonstarchy nonstarving nonstationary nonstatutory nonsteak nonsteam nonsteel nonsterilizing nonstick nonsticky nonstiff nonstiffening nonstimulating nonstipendiary nonstockholding nonstolen nonstorage nonstore nonstraight nonstrange nonstratiform nonstray nonstreaming nonstretch nonstretchy nonstrict nonstrike nonstriking nonstudio nonstudying nonstupid nonsubmarine nonsubordinate nonsubordinating nonsubscribing nonsubscription nonsubstrate nonsubtle nonsuburban nonsucrose nonsufficient nonsugary nonsuing nonsulfhydryl nonsulfur nonsulphur nonsummer nonsuperconducting nonsuperfluid nonsupermarket nonsupervisory nonsupplementary nonsupporting nonsurplus nonsurvey nonsusceptible nonsushi nonsustaining nonswearing nonsweet nonswimming nonswitching nonswollen nontabby nontaboo nontackle nontactile nontape nontarget nontariff nontarnish nontaxing nontaxpaying nonteaching nonteak nonteam nontech nontechnology nonteenage nontelescoping nontelevision nontellurium nontemperate nontempering nontemplate nontemple nontennis nonterminating nonternary nonterrible nonterror nonterrorism nontertiary nontest nontext nontextile nonthallium nontheater nontheft nonthickening nonthorium nonthreatening nonthrowing nonthrust nontimber nontin nontipping nontitanium nontitle nontobacco nontorpid nontort nontotalitarian nontouching nontouring nontourism nontouristy nontournament nontrade nontrading nontrain nontransgender nontransient nontransit nontransition nontransitioning nontransitory nontranslucent nontransmissible nontransparent nontransportation nontransverse nontrapping nontravel nontraveling nontreasury nontrendy nontrespassing nontroublesome nontrue nontrump nontuberculosis nontuition nontumescent nontungsten nontwist nontwisting nontyphoid nonultrasound nonultraviolet nonunary nonunderground nonundulating nonuniform nonuniformitarian nonunion nonunique nonunitary nonupper nonupset nonuranium nonurban nonurea nonurethane nonurgent nonurinary nonurine nonusing nonuterine nonutilitarian nonutopian nonvacant nonvacation nonvacationing nonvaccine nonvalid nonvalidating nonvanadium nonvanilla nonvanishing nonvarsity nonvarying nonverbatim nonverbose nonvertebrate nonvertex nonveterinary nonvibrating nonvibratory nonvictimizing nonvideo nonviewing nonvintage nonvinyl nonviolet nonvirile nonvisa nonviscid nonvisible nonvisiting nonvivid nonvocabulary nonvocalizing nonvoice nonvoid nonvolant nonvolatile nonvolume nonvoluntary nonvolunteering nonvomiting nonvortex nonvoting nonvuggy nonwage nonwaiting nonwaiver nonwalking nonwarehouse nonwartime nonwater nonwaterborne nonwaterproof nonwatertight nonwatery nonwave nonwaveform nonwaveguide nonwavering nonwaxy nonweak nonwealthy nonweapon nonweapons nonweather nonwedding nonweekend nonweekly nonwetting nonwhale nonwhaling nonwheat nonwheelchair nonwhiskey nonwhole nonwholesale nonwild nonwilderness nonwildlife nonwind nonwinding nonwine nonwinning nonwinter nonwobbly nonwood nonwooden nonwoodland nonwoody nonwool nonworking nonworkplace nonworkshop nonworthwhile nonwriting nonwritten nonxanthine nonxenon nonxylene nonxylitol nonxylose nonyellow nonyellowing nonyielding nonyoga nonyoung nonzinc nonzirconium nonzonate nonzone noobish noodly normalish norse northeasterly northeastern northeasternmost northern northernly northernmost northmost northwestern northwesternmost nosey noshore nosier nosiest nosy notchy notewise noteworthier noteworthiest nott nouny nourishing nouveau novatian novelesque novembery nubbly nubby nubian nuder nudest nudiustertian nuevo nugatory nuggety nullary nulliploid nullipotent numbest numerary nummy numptyish nunly nurturant nutant nutbrown nutmeggy nutso nutsy nuttier nuttiest nutty nyc nycer nycest nyctian nymphean nymphine nymphish nymphly nymphoid nyunga oafish oaken oakier oakiest oaky oaten oathbound oaty oaxacan obcordate obdeltoid obdurate obedient obeisant oberonian obese obfuscatory objurgatory oblanceolate oblatory obligatory obliteratingly oblyrate obmutescent obovate obovoid obpandurate obpyriform obreniform obsagittate obscene obscener obscenest obscurest observant obsolescent obstinant obstinate obtect obtuse obtuser obtusest obzocky oceangoing oceanside ocellary octan octapartite octastyle octavating octobery octopoid octostyle oculomotor odd odder oddest oddish odontoid odyssean oecumenopolitan offbase offfield officewide offish offlist offputting offroad offsite offsuit offtrack offwing ogreish ogrish ogry oikish oilier oiliest oilproof oily okayish older oldest oldish oldskool olfactible olfactory olid oligocene oligocyclopropyl oligopotent olivary oliver olivey omakase omissible omnicompetent omnificent omnipotent omnipresent omniscient omnisentient omphalinoid omy onefold onetime oneway onfield onglaze ongoing onhand onionier onioniest oniony onkus onliest onlooking ono onrushing onry onscreen onside onsides onsight ontarian onwing oofy oozier ooziest oozy opalescent opaquer opaquest opencast operagoing operose opportune oppugnant optomotor orangeish oranger orangest orangier orangiest orangish orangy orbiculate orbitomaxillary orbitosphenoid orcadian ordovician organoaluminium organoaluminum organobarium organobismuth organoboron organocadmium organocalcium organocarbon organocerium organocesium organochromium organocobalt organocopper organodysprosium organoerbium organoeuropium organogallium organogermanium organogold organohafnium organohydrogen organoindium organoiridium organoiron organolanthanum organolead organolithium organolutetium organomagnesium organomanganese organomercury organomolybdenum organoneodymium organonickel organoniobium organoosmium organooxygen organopalladium organophosphorus organoplatinum organoplutonium organopolonium organopotassium organorhenium organorhodium organorubidium organoruthenium organosamarium organoscandium organoselenium organosilver organosilyl organosodium organostrontium organosulfur organosulphur organotantalum organotechnetium organotellurium organothallium organothorium organotin organotitanium organotungsten organouranium organovanadium organoxenon organoytterbium organoyttrium organozinc organozirconium orientationist originary orinoco orkish ornate orne ornee ornerier orneriest ornery orodispersible orosirian orotund orthodox orthograde orthoprax ortonesque orwellian oscillatory oscine osmeriform osmian osmoregulatory osmoresistant osseocarnisanguineoviscericartilaginonervomedullary ostensible othersome otherworldish otherworldly otherworldy otiose otsu ould oulder ouldest ourie outbound outbursting outcoming outdone outdoor outdoorsier outdoorsiest outdoorsy outdrawn outdriven outermore outermost outflowing outflown outflung outgrown outlain outlandish outlying outmost outre outridden outsiderish outsiderly outspoken outspread outstanding outstate outsung outsworn outworn outwritten ovarian ovate ovenproof overabundant overbank overbattle overbearing overbeaten overbitter overblown overbold overbore overbought overbright overbroad overcompensatory overcomplete overcomplex overconfident overcontact overconvergent overcute overdemanding overdense overdependent overdone overdrawn overdriven overdue overeager overearnest overeaten overelaborate overexuberant overfine overflown overfond overfrequent overfriendly overfull overgone overgreedy overground overgrown overhasty overhot overindulgent overjubilant overkeen overladen overlain overland overlarge overlavish overlong overloose overloud overluxuriant overlying overmighty overmodest overmuch overnice overprecise overproof overproportionate overproud overready overreliant overridden overripe overrude oversanguine overscale overseen oversimple oversize oversoft oversold overspeeding oversquare overstage overstrict overstrung oversubtle oversweet overt overtaken overthrown overtrusting overwise overwordy overworn overwritten overwrought oviform ovulatory owld owlish oxbridgian oxonian oxycalcium oxygenian oxyhydrogen ozymandian pabulary pacesetting pacey pacier paciest pacy paenultimate pagnolesque painkilling painstaken painterly paintier paintiest painty paiwan palaeeskimo paleoarchean paleochristian paleofantasy paleogene paler palest palish palladian palladoan pallescent pallid pallier palliest palmatifid palmatipartite palmatisect palmerian palmerstonian palmiest palmy palpitant paltrier paltriest paltry palustrine panamax pancyprian pandaedalian pandean pandoran pandurate panduriform pangasinan panglossian panicky paniculate pantagruelian panzoist paperbound papery papillary papillate papilliform papillose papulose papyriform paracompact paraconsistent paracrine paradisiac paramount pareve paripinnate parkier parkiest parkinsonian parkside parky parliamentary parmenidean parmese parmigiana parro parroty parsnipy partaken partible participatory partite parturient partygoing partywide pascalian passant passeriform passible pastier pastiest patchier patchiest patchworky patchy patellate patelliform patelline pathbreaking pathetisad pathwise patibulary pauce paucibacillary paucidisperse pauciloquent pauline paultry paunchier paunchiest paunchy pavid pavlovian pavonian pawkier pawkiest pawky paydirt peacefullest peachier peachiest peachy peacockian peacockish peacocky peakean peakier peakiest peaky peanutty pearlescent pearlesque pearlier pearliest peary peatier peatiest peaty pebblier pebbliest pebbly peccant peckish pecksniffian pectiniform pecuniary pedaliter pedate pedicellate pediform pedunculate peepier peepiest peepy peevish peircean pekid pelagian pellucid peltate pencilly penicillate penile penisy pennate penniform pennyante pennywise pensile pentacoordinate pentacuspid pentadactyl pentadentate pentakis pentaploid pepperminty peppery peppier peppiest peppy peptidyl pepysian peralkaline perceptible perceptuomotor percoid percurrent perdu perdue peremptory perfectest perfectible perfecto perfervid perfluoro perfoliate perforant perfumey perfunctory perhydro peribiliary pericapillary periciliary periclean perigastrulation periinfarct perimammary perimortem periovulatory peripartum peripubescent perisylvian peritectoid periurban perivitelline perkier perkiest perky perlish perlocutionary perlsian permafrozen permian permissible pernickety peronate persecutory perseverant perseverent persistent persnickety perspiratory persuasible perter pertest pertinent pertuse perugian perverse perviest pervy peskier peskiest pesky pesty petaloid petascale petit petite petrean pettier pettiest pettish petty petulant pezizoid phagostimulatory phantasmagorian pharate phasematching phaseoliform phat phatter phattest phildickian philippine phlegmier phlegmiest phlegmy phoebean phonier phoniest phosphatian phosphorent phosphorian phossy photoconvertible photodamaging photodissociating photoinducible photoionizing photolabile photolithographically photoluminescent photoreversible photostationary photostimulating phototransducing phthisicky phunky phytelephantoid phytosanitary picassian picayune picayunish piccata pickier pickiest pickproof picksome picnicky picoscale picturesque piddlier piddliest piddly piebald piggier piggiest piggish pigmentary pigovian pilferproof piliform pillowtop pillowy pilose pimpish pimplier pimpliest pimply pimpy pinchy pindling pineappley pineapply piney pinguid pinier piniest piniform pinker pinkest pinkier pinkiest pinkish pinnate pinnatifid pinnatipartite pinnatisect pinteresque piny piquant piriform piscatory pisciform piscine pissier pissiest pissy pistillate pitcairnese pitchier pitchiest pitchside pitchy pithier pithiest pithy pitifuller pitifullest pixieish pixyish pizazzy pizzaiola pizzazzy placatory placid plaguesome plaguey plaguier plaguiest plaguy plainer plainest plainish plainspoken planckian planeside planest planetary plangent planoconcave planoconvex plantwide plashy plasmacytoid plasticky plateresque platey plathian platinian platinoan platonian platykurtosis platyrrhine plausible plautine playline playsome pleasant pleasanter pleasantest plebby pleistocene plexiform pliant plinian plinky pliocene ploppier ploppiest ploppy plotlessness plottier plottiest plotty pluckier pluckiest plucky plumbean plumbian plumboan plumiliform plummier plummiest plummy plumose plumpest plumpish plumpy plumulose plumy plunderage pluriform pluripotent plusher plushest plushier plushiest plushy plutarchian pluterperfect pobby poddier poddiest podgier podgiest podgy poean poesque poignant pointier pointiest pointwise pointy pokier pokiest polite politer politest polliniate pollinose pollockian pollyannaish pollyannish poltroonish polyacid polyadelphian polyandrian polycarpellary polycatenary polychrome polycotyledonary polycrystalline polydactyl polydent polydentate polydisperse polydomain polydrug polyembryonate polyendocrine polygamian polygonate polygyne polygynian polyhalogeno polyhydroxy polyinstanton polyloquent polymorphean polymyarian polymyodian polymyoid polynemiform polynucleate polyorchid polyphase polypiform polypine polypoid polypotent polysectarian polysperm polystrate polysubstance polyvariant polyvinyl pomeridian pomoan poncey poncier ponciest poncy pondian pondy ponerine pongier pongiest pongy pontine ponzi poochy pooey poofier poofiest poofy pooiest poorer poorest poorish popcorny popean popish popperian poppier poppiest poppish porciform porcine porkier porkiest porkish pornier porniest porny porridgey porridgy portlier portliest portly pos posey posh posher poshest positiver positivest possessory possibler possiblest postaccident postadministration postadsorption postapartheid postarrest postassembly postassessment postattachment postauction postbaccalaureate postbailout postbankruptcy postbattle postbellum postbinge postboomer postbounce postboxing postbreakup postbubble postcampaign postcancer postcapitalist postcaucus postcollege postcollegiate postcolumn postconcert postconcussion postconflict postconsumer postconviction postcopulatory postcorrelation postcourse postcrash postcrisis postdeadline postdebate postdefection postdeployment postdisaster postdischarge postdoctorate postdose postdraft postearthquake postelection postepisode postevent postexecution postfight postfilm postflight postflood postflop postfuck postfusion postgadolinium postgelation postgenocide postgermination postharvest posthearing postherpes postholiday posthurricane postimplantation postindependence postinformation postinitiation postinjection postinvasion postisolation postlapsarian postlayoff postlegislation postliberation postliterate postlockout postlunch postmagma postmarathon postmarket postmarketing postmarriage postmatch postmedium postmerger postmeridian postmidnight postmigratory postmillennium postmodern postmonsoon postmove postmovement postnucleation postobese postorder postovulation postovulatory postpaid postpainterly postpartisan postpartum postperformance postpetroleum postplaying postpolio postpoliomyelitis postpolymerization postpractice postpregnancy postpremiere postprenylation postpresidency postprimary postprocedure postpuberty postpubescent postpublication postpunk postqualifying postrace postracist postratification postreaction postrecession postrecruitment postrelease postresidency postresonance postretirement postrevolutionary postround postsale postsaturation postscreening postsecondary postselection postsemester postsermon postservice postsex postshock postshow postslavery postsleep postsnap postsocialist poststimulus poststorm poststrike postsuicide postsurge postswim posttraining posttransfer posttransition posttransplantation posttrauma posttreatment posttumor postundergraduate postvacation postverdict postveto postvictory postviewing postvote postweaning postworkout potassian potatoey potatory potbound potent potterian pottier pottiest poufier poufiest poufy poulantzasian poundian poutier poutiest pouty pov powdery powerfullest poxier poxiest poxy praeeminent praiseworthier praiseworthiest praiseworthy prancy prankier prankiest prankish pranksome pranksterish pranky praseodymian prasugrel prawny preacherly preachier preachiest preachy preadipose preadmission preassessment preattack preauction prebankruptcy preblog preboom preborn prebound prebreak prebubble prebudget prebuilt precambrian precampaign precatory precaucus precautionary precharge precinema precise preciser precisest preclair precode precognisant precognizant precollapse precollege precombustion precommunist precompetition precomputer preconcert preconference preconquest preconsumerist precontact precontest preconvention preconviction precopulatory precorrelation precrash precredit precrisis precursory precurtain predatory predebate predecimalisation predecimalization predefection predeparture predeployment predialysis prediluvian predinner predisaster predischarge predisco prediscount prediscussion predraft predrought preemergent preeminent preemptible preemptory preequilibrium preexposure prefatory prefeminist prefight prefilm prefire preflare preflood preflop prefocus prefuck pregenocide pregentrification preggers preggo pregnant pregraduate preground prehatch prehatching prehearing prehensile prehiatus prehire preholiday prehung prehurricane preimmune preimpact preimplantation preimpressionist preinauguration preincident preindictment preinjection preintegration preintermission preinvasion prejudicate prejump prelabour prelanding prelapsarian prelaugh prelaunch prelegislation preliberation prelife preliminatory prelockout prelunch premalignant premammalian premarketing premarkup premarriage premarxist prematch prematernity premature premaxillary premechanization premeeting premerger premilitary premisory premodern premonitory premonsoon premorbid premotor premyelinating prenewtonian prenex prenubile prenucleation preobese preocclusion preopening preoperation preparatory prepartum preperformance prepetition preplanetary preplayoff preponderant prepopulist prepossessing prepotent preppier preppiest prepractice prepregnancy prepremiere prepress preprimary prepuberty prepubescent prepublication prepurchase prequalify prequantum prerace preratification prerecession prerecessionary preregulation prerelease preremote prerenovation prereplication preretirement prerevolution prerevolutionary preride prerock preround presaturation prescient prescriptible presectarian presecurity presenescent presenile presentence presentencing presentient presentist preservice presex preshift preshock preshot preshown preshrunk preslavery presleyesque presmoking presnap prespill prespin prestimulus prestissimo prestorm prestrung presuburban presuicide presupernova presurge presurgery preswim pretassel pretax pretaxation preteenage pretelecast pretheater pretorian pretour pretournament pretraining pretransplantation pretransport pretravel prettier prettiest prettyish pretumor preunion preurban prevacation prevenient preventible prevote prewedding prewritten pricey pricier priciest pricklier prickliest prickly pricy pridoli priestlier priestliest priestly priggish prima primavera primetime primmer primmest princelier princeliest princessly princessy priscan prissier prissiest prissy pristine privater privatest prizewinning prizeworthy proabortion probationary proboscidate probosciform prochoice proclamatory procreant procrustean procumbent prodeath prodefendant prodemocracy prodrop producible profanest profinite profitmaking profitseeking profligatory proforma profound profuse progeroid prograde progredient prohibitory prolate prolix promarket prominent promising promissory promotility promptest promulgatory promyelinating prone pronunciatory proper properer properest propitiatory proplaintiff proplanetary proprietary proprietory proresearch proscience prosier prosiest prosuicide prosy protaspid protean protestant protistan protobacco protobinary protocollary protocuneiform protofascist protofeminist protominimalist protomodern protoneutron protoplanetary protractedly protractile protrade protrusible protrusile protuberant proud prouder proudest proustian proven provident provincewide proviolence provisory prowest prowhaling prudent prudish pruinose pruney prurient pryany pseudoagouti pseudobinary pseudoconcave pseudoconvex pseudohallucinatory pseudohypersensitivity pseudoliterary pseudopregnant pseudoprofound pseudoproper pseudorandom pseudoreversible pseudy psychobabbling psychomotor pterygiate pterygoid pterygopalatine ptolemaian ptolemean pubbier pubbiest pubbish pubby pubescent pucka puckeroo puckery puckish puddingy puddley puddly pudgier pudgiest pudgy pudibund puellile puerile puffier puffiest puffingly puffy puginesque puisne puissant pukey pukka pulicene pulicine pulmonary pulpier pulpiest pulpish pulpy pulsatile pulsatory pulverulently punchier punchiest punchy punctate pungence pungent punier puniest punkest punkier punkiest punkish punnier punniest punny puny pupillary puppyish purblind purdier purdiest purdy pureplay purer purest purificatory purkinjean purpler purplest purplish purply pursy purty purum pushdown pushier pushiest pushy pussier pussiest pustuliform putrefacient putrescent putrescible putrid puttier puttiest puzzly pynchonesque pyranoid pyrenean pyriform pyrrhonian pythagorean pythian pythonesque qid quackish quadcore quade quadratfrei quadrible quadricostate quadridentate quadrifid quadrifoil quadrifoliate quadriform quadrijugate quadrilobate quadripartite quadripennate quadrivariate quadrivoltine quadrupartite quaggier quaggiest quaggy quagmiry quaint quainter quaintest quaintish quakeproof quakerish quakerly quakey quakier quakiest quaky qualificatory qualmish quarrelsome quartersawn quartzier quartziest quartzose quartzy quasi quasiblack quasibound quasiconcave quasiconvex quasicrystalline quasidocumentary quasifree quasigovernment quasiparallel quasiperfect quasirandom quasisplit quasistationary quate quaternary quaternate quavery queachy queasier queasiest queasy queazy quechuan queenish queenlier queenliest queeny queerer queerest queerish quercine quethen quibbly quicker quickest quickfire quickfrozen quicksandy quicksilvery quiescent quietest quietish quilly quilty quinary quinian quinonoid quinquedentate quinquefid quinquefoliate quinquefoliolate quinquelobate quinquepartite quinquevalve quintenary quippiest quippy quirkier quirkiest quirky quivery quondam quoteworthy quotinoctian qwerty rabbity rabblerousing rabelaisian rabid raccoonish racemiform racemose racier raciest rackety racy radcliffean radcliffian radiationproof radicant radiculose radiodense radiofrequency radiolitid radiolucent radioopaque radiopaque radiopure radioresistant radiosensitizing radonproof raffish rafty raggedier raggediest raggedy raggier raggiest raggy ragtag ragtimey railside rainbowish rainbowy rainfast rainier rainiest rainstormy rainswept rainy raisiny rajasthani rakish rallentando ralline ramiform rammy ramose rampant ramshackle ranarian rancid randian randier randiest randomest randomish rangant rangebound rangefree rangier rangiest rangy raniform ranine ranivore ranker rankest ranty rapey raphanoid rapider rapidest rapscallionly rapt rareish rarer rarest raring rashest rashy raspberryish raspier raspiest rasputinesque raspy ratchety ratproof rattier rattiest rattish rattlier rattliest rattly ratty raunchier raunchiest raunchy ravening raw rawer rawest rayproof readdicting readerly readier readiest readworthy reaganesque realer realest realler realtime rearmost rearview reattribute reawoken rebegun reborn reborne recent recessionary recessionproof recherche rechosen recognizant recommendatory reconciliatory recondite reconstructible recriminatory recrudescent rectouterine recurrent redbrick redder reddest reddish reddy redivivus redmondian redneckish rednecky redone redrawn redressible reducible redundant redux reechy reedier reediest reedy reefy reeky reemergent referrible reflationary refluent refractile refrangible refringent refrozen refulgent regalian regardant regionwide regiven regnant regrown regulatory reheard rehidden reichenbachian reillustration reiterant relationshippy relevant reliant religiose relucent reluctant remaining remanent rembrandtesque reminiscent remiss remissible remittent remoter remotest renascent reniform renitent renunciatory reordrant repentant reporterly repressible reproducible reproductory repudiatory repugnant requisitionary resawn researchy resemblant resewn reshaken residuary resignedly resilient resiny resistible resoluble resolute resoluter resolutest resonant resown respiratory resplendent responsible restiff restitutory restrainedly restricken resupinate resurgent resworn retaken retaliatory rethrown reticent retiform retinogeniculate retorn retractile retrocedent retrofire retroflex retromingent retroserrate retrousse retuse revegetation revelationary revelatory reverberant reverberatory reverent reversible revertant revertible revisionary reworkability rewoven rewritten reynoldsian rhabdoid rhadamanthine rhean rhenian rheumaticky rheumatoid rheumy rhonchisonant rhubarby rhyacian riant ribbony rich richer richest richish ricketier ricketiest ricketty rickety ridden ridgy ridibund riemann riemannian rifer rifest riffier riffiest riffly riffy righter rightest righthand rightish rightwing rigid rilkean rimose rimy ringent ringleading ringside rioplatense riparian riper ripest ripply ripshit ripsnorting ripstop ripuarian risen risible riskfree riskier riskiest risktaking risky risque ritenuto ritzier ritziest ritzy riven riverain riverine roadgoing roadshown roadworn roadworthy robespierrean robust robuster robustest rocambolesque rockbound rockier rockiest rockingest rockish rockwellesque rocky rodentproof rodenty rogatory roguish roily rollaway rolldown rolltop romanesque romany romish rooky roomier roomiest roomwise roomy roopit roopy rootsy ropey ropier ropiest ropy rorty roscian roseate rosid rosier rosiest rosish rotatory rotiform rottener rottenest rotund rougher roughest roughish roughshod roundarm roundest roundish rousseauesque rovian rowdier rowdiest rowleian rubberier rubberiest rubberoid rubbery rubbishy rubblier rubbliest rubbly rubenesque rubescent rubicose rubicund rubidian rucervine ruddier ruddiest rude ruder rudest rudimentary rufescent ruffly ruggeder ruggedest rugose rulebound rulier ruliest ruly rumanian rumbly rummest rumsfeldian runcible runcinate runiform runnier runniest runny runty runyonesque rupestrian rurban rushy russificatory rustier rustiest rustly rusty ruthenian rutherfordian ruthian rutilant ruttiest ruttish rutty sabbatine sabelloid sabinian sabulose sacagawean saccate saccharine saccharoid sacciform sacculate sacrosanct sad sadder saddest saddish saddlesore sadducaean sadducean sadduceean sadean sadian saditty safeish safer safest saffrony safranophile sager sagest sagey saggier saggiest saggy sagier sagiest sagittate sagittiform sagy sahaguntine saharan sahelian sailworthy saintish saintlier saintliest saintly salady salafi salamandrian salamandriform salamandrine salamandroid salian salingerian saliniform salique salishan salitrose salivary salivatory sallower sallowest sallowish sallowy salmoniform salmony salopian saltatory saltfree saltier saltiest saltish saltproof salty salutary salvifying samarian samean samely samey sanatory sandblind sandier sandiest sandpaperish sandpapery sandwichy sane saner sanest sanguinary sanitary sanserif sapid sapient sappier sappiest sappy sarcomatoid sardanapalian sarkier sarkiest sarky sartin saskatchewanian saskatonian sassier sassiest sassy satem satiny satisfactory satrapian saturnalian saturnine sauciest saucy sausagey sausagy savantish savilian savoury savvier savviest sawdusty sawn saxicoline saxon saxophony scabbier scabbiest scabby scabrosity scalariform scalefree scalene scaleproof scalier scaliest scaly scampish scandent scandian scanian scanter scantest scantier scantiest scanty scarabaeoid scarcer scarcest scarecrowish scaredest scarier scariest scary scattershot scattery scattier scattiest scatty scaturient scelerate scelidate schizy schlockier schlockiest schlocky schloopy schlubbier schlubbiest schlubby schlumpier schlumpiest schlumpy schmaltzier schmaltziest schmaltzy schmalzier schmalziest schmalzy schmancy scholarly schoolbookish schoolboyish schoolgirlish schoolgirly schoolgoing schoolish schoolmarmish schoolteacherish schoolwide schtum schumpeterian schwarzeneggeresque scient scillonian scintillant scissile sciurine scleractinian scombroid scorchy scoriac scoriform scornworthy scorpaeniform scorpioid scorsesean scortatory scottish scoundrelly scouty scraggier scraggiest scraggly scraggy scrambly scrappier scrappiest scrappy scratchier scratchiest scratchproof scratchy scrawnier scrawniest scrawny screamier screamiest screamingest screamy screechier screechiest screechy screenbound screwier screwiest screwy scribblier scribbliest scribbly scrimy scrolly scrotiform scroungy scrubbier scrubbiest scrubby scruffier scruffiest scruffy scrummier scrummiest scrummy scrumtrelescent sculpturesque scummier scummiest scummy scumsucking scungier scungiest scungy scurfy scurvier scurviest scutate scutiform scuzzier scuzziest scuzzy sdrucciola seaborn seaborne seagirt seagoing seamanly seamier seamiest seamy seasick seasonlong seaswept seaweedy seaworthy sech seclusionary second secretory sectionwide securer securest securitarian sedater seddity sedecuple sedentary sedgier sedgiest sedgy sedimentary seducible seedeating seedier seediest seedy seemlier seemliest seen seethrough segmentary segmentwise segreant sejant sejunct selachian seld selecting selenatian selenian selenitian selfadjoint selfcongratulatory selfconsistent selfgravitating selfish selforganizing selfsame selfsome selfstanding seljukian semee semiabstract semiamusing semianimate semiarid semibold semibuoyant semiclad semicoherent semiconducting semiconjugate semicrystalline semidefinite semidilute semidirect semidiscrete semidivine semidry semifertile semifinite semiflexible semiforce semifrozen semigloss semihallucinatory semihidden semihollow semihuman semiinfinite semilegible semilegitimate semiliterate semilunate semiluxury semimajor semiminor seminude semipermanent semiplausible semiposh semiprivate semiquantum semirare semirecumbent semirevealing semirigid semischolarly semisecret semisimple semisoft semisolid semistupid semisweet semiterete semitransparent semivolatile semiweekly semiwild semperjuvenescent sempervirent semy senary senescent senile seniorest sensate sensible sensorimotor sensory separatory septate septembery septempartite septenary septenate sequoian serener serenest serer serest serfish seri serocompatible serodiscordant serrasalmine serrulate serverside servile sesotho sesquialterate sesquiplicate sessile setiform seussian sevenpenny seventeenish seventyish severe severer severest sewn sexagenerian sexier sexiest sexpartite sexy seychellean shabbier shabbiest shabby shacky shadier shadiest shadowier shadowiest shadowy shady shaggier shaggiest shaggy shaken shakespearian shakey shakier shakiest shaky shaley shallower shallowest shallowish shaly shamanesque shambling shambly shampooey shannonian shapelier shapeliest shapely shareowning sharky sharpest shatneresque shatnerian shatterproof shaven shearfree sheepier sheepiest sheepish sheerer sheerest sheisty sheldonian shellproof shelly shelvy shepherdly sherbety sherlockian shermanesque shetlander shewn shier shiest shife shiftier shiftiest shifty shimmery shingly shinier shiniest shinto shiny shipboard shipborne shipbound shipshape shipwide shirty shish shitey shitier shitiest shittest shittier shittiest shitty shiveringly shivery shlocky shlubby shmexy shodden shoddier shoddiest shoegazey shonkier shonkiest shonky shoogly shopkeeperly shoppier shoppiest shoppy shopworn shorebound shoreside shortcrust shortest shorthold shortish shortleaf shorttail shoutier shoutiest shouty showbizzy showerier showeriest showery showier showiest shown showstopping showy shrewd shrewder shrewdest shrewdish shrewish shrieky shriller shrillest shrimpier shrimpiest shrimpy shrinky shriven shrubbier shrubbiest shrubby shrunken shticky shtokavian shtoom shtum shuddery shuffly shure shyer shyest shyish shysterish sialyl sibylline sicker sickest sickish sicklier sickliest sickly siderian sidescrolling sidesplitting siftproof sightlier sightliest sightly sightseen sightworthy sigmate significant silicatian silician silken silkier silkiest silky sillier silliest siltier siltiest silty silurian silvan silverier silveriest silverish silvern silvery simpatico simpler simplest simpsonian simpy sin sin2 sincere sincerer sincerest sinewy singlehandedly singleplayer singsongy sinister sinisterwise sintery siouan siphonapteran sisyphean sisyphusean sitwellian sixpenny sixteenish sixteenpenny sixtiesish sixtyish sizey sizy skankier skankiest skanky skaterly skeely skeevier skeeviest skeevy skeezier skeeziest skeezy sketchier sketchiest sketchy skewampus skewbald skewiff skewwhiff skiddier skiddiest skiddy skidproof skiey skilfull skillo skimmy skimpier skimpiest skimpy skinnier skinniest skint skintight skippy skipworthy skittery skittish skronky skunky skyborne skyclad skyey skylit skyscraping skywards skyworthy slabbier slabbiest slabby slackerish slackerly slackest slaggiest slaggy slain slangier slangiest slangy slanty slaphappy slapsticky slatternly slaty slaveholding slavish sleazier sleaziest sleazy sleeker sleekest sleepaway sleepbound sleepier sleepiest sleetier sleetiest sleety slender slenderer slenderest sleuthy slickest sliddery slidey slier sliest sligh slighter slightest slightish slimier slimiest slimline slimmest slimy slingshotten slinkier slinkiest slipperier slipperiest slippery slippier slippiest slippy slipshod slithery slithy slitten slittier slittiest slitty sliven slobbery slobbier slobbiest slobbish slobby slopeside slopey sloppier sloppiest sloppy slopy sloshier sloshiest sloshy slouchier slouchiest slouchy sloughy slovakian slovenlier slovenliest slovenly slowest slowish sludgier sludgiest sludgy sluggardly sluggish sluggisher sluggishest slummier slummiest slummy slumpy slurpy slurrier slurriest slushier slushiest slushy slutsky sluttier sluttiest sluttish slutty slyer slyest smaller smallerscale smallest smallish smallscale smalltime smaragdine smarmier smarmiest smarmy smarter smartest smarting smashmouth smashproof smearier smeariest smeary smeggy smellier smelliest smelly smexier smexiest smexy smilier smiliest smilish smirkier smirkiest smirky smithian smithsonian smitten smoggier smoggiest smokefree smokeproof smokey smokier smokiest smoky smoochier smoochiest smoochy smooshy smoothest smoothish smudgier smudgiest smudgy smug smugger smuggest smurfier smurfiest smurfy smushy smuttier smuttiest smutty snacky snaggier snaggiest snaggy snailish snakebit snakebitten snakey snakier snakiest snaky snappier snappiest snappish snappy snapshooter snarkier snarkiest snarkish snarky snarlier snarliest snarly snatchier snatchiest snatchy snazzier snazziest snazzy sneakier sneakiest sneaky sneery sneezier sneeziest sneezy snellest snide snider snidest sniffier sniffiest sniffly sniffy sniggery snippier snippiest snippy snittier snittiest snitty snobbier snobbiest snobbish snobby snoof snoopier snoopiest snoopy snootier snootiest snooty snoozier snooziest snoozy snottier snottiest snotty snoutier snoutiest snouty snowblind snowbound snowflakey snowflaky snowier snowiest snowstormy snowsure snowswept snowy snufflier snuffliest snuffly snuffy snugger snuggest snugglier snuggliest soapier soapiest soapy soaraway sobby soberer soberest sociorealist sockdologizing socko sodian soft softbound softer softest softish softnose softpaste softshell softspoken softwater soggier soggiest soggy soigne soignee soilborne solartype soldierly solemn solidary solider solidest solivagant solly solovian soluble solzhenitsynian somalian somatoform somatomotor somatosensory somber somberer somberest sombre sombrest somethingth somnambulant somnambulatory somnolescent sonant songworthy songwriterly songy soople sootier sootiest sooty sophoclean soppier soppiest soppy sorbian sordid sorer sorest sorrier sorriest sottish soubrettish soulagean soulish soundest soupier soupiest soupy sourer sourest sourish southeastern southeasternmost southern southernmost southeyan southmost southwestern southwesternmost sown sowwy soz spaceborne spacesick spaceworthy spacey spacier spaciest spacy spammier spammiest spammy spanglier spangliest spangly spanwise sparer sparest sparklier sparkliest sparkly sparry sparse sparser sparsest spartan spathulate spazzy specieswide speciose speckly speculatory speedier speediest speedy spellbinding spellbound spendier spendiest spendy spermatozoan spesh speshul sphexish sphingian spicier spiciest spicy spidery spielbergian spiffier spiffiest spikey spikier spikiest spiky spillproof spilly spinachy spindlier spindliest spindly spinechilling spinescent spinier spiniest spinnier spinniest spinoid spinose spinozan spinsterish spinsterly spintrian spiny spiry spitten spitty spivakian spivvish spivvy splashier splashiest splashproof splashy spleeny splendid splendiloquent splintery splitproof splodgier splodgiest splodgy splotchier splotchiest splotchy spludgy spluttery spockian spoken spongeworthy spongey spongier spongiest spongiform spongy sponsible spoofier spoofiest spoofy spookier spookiest spookish spooky spooney spoonier spooniest sporebearing sportier sportiest sportsmanly sporty spottier spottiest sprack sprauncy sprawly sprayproof sprier spriest sprightlier sprightliest springier springiest springy sprinkly sproingy sprote sprouty sprucer sprucest spry spumy spunkier spunkiest spunky spunlaid sputtery spyproof squabbly squalid squaliform squallier squalliest squallish squally squamiform squamulose squarefree squarer squarest squarish squarrose squashier squashiest squashy squattier squattiest squatty squawkier squawkiest squawky squeakier squeakiest squeaky squeamish squeezy squelchier squelchiest squelchy squewiff squickier squickiest squicky squidgier squidgiest squidgy squiffier squiffiest squiffy squigglier squiggliest squintier squintiest squinty squirmier squirmiest squirmish squirmy squirrelish squirrellier squirrelliest squirrelly squirty squishier squishiest squishy squooshier squooshiest squooshy sravya stabby stabler stablest staccatissimo stagebound stagestruck stagewide stagey stagflationary stagier stagiest stagnant stagy staid staider staidest staler stalest stalinian stalkerish stalkier stalkiest stalky staminate standalone standoffish stannary stannian stannoan starchier starchiest starchy starey starfaring starforming stargazy starker starkers starkest starkish starlit starrier starriest starry starstruck starting stary statant statelier stateliest statesmanly statewide statherian staticky staticproof stationary statuesque statusy statutory stauncher staunchest steadfast steadfaster steadfastest steadier steadiest stealthier stealthiest stealthy steamier steamiest steamy steatopygian steelier steeliest steely steeper steepest steepish steeziest steezy steinbeckian stellate stelliform stemmy stenchy stendhalian stennian stenohaline stentorian stepford stereoblind stereoblock stereociliary stereocontrolling stereofluorescent sterile sternean sterner sternest sternmost sternocleid sternomastoid stewy stibatian stibian stiboan stickery stickier stickiest stickily stickproof stiddiest stiffer stiffest stiffish stillborn stiller stillest stilliform stilty stimulatory stingier stingiest stingy stinkier stinkiest stinko stinky stipellate stipendary stipendiary stipitate stockier stockiest stocky stodgier stodgiest stodgy stokavian stolen stolid stolider stolidest stompier stompiest stompy stonebuilt stoneground stonehard stonier stoniest stonish stony stoopid stoopider stoopidest stoopy stoppardian stopping storebought storky stormbound stormier stormiest stormproof stormwater stormwaters stormy storybookish stoss stouter stoutest stoutish stoveside stragglier straggliest straggly straightest straightish strange strangelovian strangest strappier strappiest strappy straticulate stratiform strawberryish strawen strawn strawne strawy streakier streakiest streaky streamside streamwise streamy streetlit streetside streetsmart streetwise streety strengthier strengthiest strengthy strepent stressfree stressy stretchier stretchiest stretchy strewn stricken strickenthrough strict stricter strictest stridden strident strigine strigose strikebound strindbergian stringent stringier stringiest stringy stripey stripier stripiest stripy striven strombolian stronger strongest strongish strongside strontian stroppier stroppiest stroppy strowen strummy struthian stubbier stubbiest stubblier stubbliest stubbly stubborn stubborner stubbornest studenty studlier studliest studly stuffier stuffiest stuffy stultifying stumbly stumpier stumpiest stumpy stunk stupent stupider stupidest stupidish sturdier sturdiest stush stuttery stygian styliform stylish styloid suaver suavest suaviloquent subacid subacute subadamantine subadnate subaffluent subalpine subangstrom subarachnoid subarcmin subarcminute subarcsecond subaverage subcabinet subcampanulate subcentimeter subchelate subclavian subconducting subconfluent subdecurrent subdetection subdiffraction subellipsoid subfemtosecond subfertile subfreezing subfulgent subgap subhertz subhorizon subhumid subinhibitory subinvestment subjacent subkiloton sublacustrine sublageniform subleading sublight sublimer sublimest sublunary submicrometer submicrometre submicron submillimeter submillimiter submillisecond subminiature subminimum submontane subnanometer subnanoscale subnanosecond subnivean suboptimum subovoid subparallel subparsec subpercolating subpicosecond subplanetary subpremium subpruinose subradiant subrhomboid subsea subsequent subservient subshock subsinuate subsistent subsolidus substandard substitutionary subsultory subterahertz subterranean subterrene subthreshold subtle subtlest subtopian subulate subumbonate suburban suburbicarian subviscid subweekly subzero succedent succinct suckier suckiest sucky sudanian suddenwoven sudsier sudsiest sudsy suetty suety sufficient suffolky suffrutescent suffruticose sugarfree sugarier sugariest sugary suggestible sulcate sulfa sulfatian sulfitian sulfosalt sulfurian sulfury sulkier sulkiest sullen sullener sullenest sulpha sulphatian sulphitian sulphosalt sulphurian sulphury sultrier sultriest sultry summerish summerlong summerly summery sumptuary sumpy sunbeamy sunblush sunburnt sundanese sundayish sunfast sung sungrazing sunk sunken sunlit sunni sunnier sunniest sunny sunshiney sunshiny sunshot sunstricken sunstruck sunswept superabsorbent superabundant superachieving superaffluent superalert superalkaline superalmighty superarachnoid superb superbad superber superbest superbold superbright supercheap supercoherent supercold supercompact superconducting superconfident superconsumerist superconvenient supercosmically supercozy supercute superdeluxe superdense superduper superefficient supereminent supererogatory superexcruciating superextensile superextreme superfalse superfeminine superfilter superfine superfit supergauge supergeeky supergood supergroovy superhard superhealthy superheterodyne superhigh superhip superhorizon superhot superimmense superimportant superincumbent superintelligent superinteresting superjacent superlarge superlean superlight superlightweight superliterate superlong superlow superluminescent superlunary supermacho supermasculine supermassively supermaximum supermicron supermodelesque supermodern supermorbid supermundane supernice superoinferior superordinary superoscillatory superoverwhelming superparallel superpolite superprecise superquick superquiet superradiant superresistant superrotating supersafe supersalty supersecret supersecure supersenior supersensible supersensory supersexy supersharp supershort supersimple superskinny supersleek superslick superslim supersmall supersmart supersoft supersport superstimulating superstrict superstrong supersudden supersweet supertechnicolor superterranean superthick superthin superthreshold supertight supertiny supertough supertrue superugly supervenient supervirile supervisory supervoting superwash superwavelength superweak superwealthy superwelterweight superwhite supplementary suppler supplest supplicatory supporting suppressible supraglenoid suprahuman supramillion supramundane suprasensible supremer supremest surculose sure surer surest surferish surfier surfiest surfside surfy surgent surly sussultatory susurrant svalbardian svelt svelte svelter sveltest svo swabian swaggery swampier swampiest swampy swanker swankest swankier swankiest swanky swarthier swarthiest swarthy swashbuckling swearier sweariest sweary sweatier sweatiest sweatproof sweaty swedenborgian swedish sweer sweeter sweetest sweetish sweetsmelling swelf swellegant sweller swellest sweptback swifter swiftest swiftian swindonian swingeing swingy swinish swirlier swirliest swirly swisher swishest swishier swishiest swishy swivelly swole swollen swonken swoonsome swoony swoopy swordbearing swordproof sworn swottier swottiest swotty swum swunk sybilline sydneyan symbionese symbolist sympathoadrenomedullary sympathoexcitatory syn syncranterian syntectoid synthy syrophoenician syrupier syrupiest syrupy systemwide tabescent tabid tableside tabloidish tabloidy tacit taciturn tackier tackiest tacky tactile tadpolish tagliacotian tagliacozzian tailormade taken taliacotian talibanesque taligrade talkier talkiest talky tall taller tallest talleyrandian tallish tallowy tamest tamil tamperproof tan tan2 tandoori tangier tangiest tanglesome tangly tangy tannest tannish tantalian tantalising tantamount tarantinoesque tardier tardiest tarriest tartare tartarean tarter tartest tartier tartiest tartish tarty tastemaking tastier tastiest tasty tattier tattiest taut tauter tautest tawdrier tawdriest tawdry tawnier tawniest taxfree taxpaying teacherly teamwide tearier teariest tearjerking teary teasy techier techiest technicolour techniquewise techy teenagery teenier teeniest teensier teensiest teensy teeny teetotaling teetotalling teflon tehrani teleparallel telepresent teletypewritten telluratian telluritian temperate tempory tenderest tenebrose tenible tennesseean tennysonian tenpenny tenser tensest tensile tenuis tepid terascale terbian terebinthinate terefah terephah terete termly ternate terrene terrible terrorstricken terrorstruck terse terser tersest testamentary testate testiculate testier testiest testudinate testy tetchier tetchiest tetchy tethyan tetracoordinate tetracyclo tetradactyl tetradentate tetraglot tetrakis tetrapartite teugh textbookish textbooky thackerayan thalian thallian thalline thalloan thalloid thamesian thameside thanatoid thankfuller thankfullest thatcheresque theaterwide theatrewide thecate theftproof themistian theopneust therizinosauroid thermocapillary thermohaline thermolabile thermoluminescent thermoparticulate thermoregulatory thermoremanent thermoreversible thermosensory thermosetting thermotolerant thetidian thewy thickish thickset thievish thingish thingly thinky thinnest thinnish third thirstier thirstiest thirsty thirteenish thirteenpenny thirtyish thirtypenny thisclose thistly thongy thoreauvian thorian thornier thorniest thornproof thorny thoro thoroughgoing thoughten thracian thrashier thrashiest thrashy threadbare threadier threadiest threadsafe thready threepenny thriftier thriftiest thrifty thrillseeking thrilly thriven throatier throatiest throaty throwaway thrown thrung thuggish thuggy thulean thulian thumpy thunderstormy thunderstricken thunderstruck thundery thymey thymy tiberian tibiiform tickborne ticklish tickly tiddly tideover tidgy tidiest tiebreaking tigerish tighter tightest tightfitting tightish tightknit tigrine tigrish tilty timebound timeconsuming timelier timeliest timely timesaving timeworn timid timider timidest timonean timorese tindery tingible tinglier tingliest tingly tinier tiniest tinkly tinnient tinnier tinniest tinny tinpot tinselly tintinnabulatory tiny tippy tipsier tipsiest tipsy tireder tiredest tiresome tironian tissuey titanoan titchy titianesque titsup titubant tlingit toadyish toastier toastiest toasty tobaccoish tobroken tocquevillian toey toilsome toilworn tolerant tolkienesque tolkienian tollfree tolstoyan tomatoey tomboyish tomentose tonier toniest tony toothachey toothachy toothcombing toothier toothiest toothpasty toothsome toothy topazine topdown topflight topfree topfull topheavy toploading toplofty topmost topnotch toppo toppy topspun topsy topwater torchier torchiest torchy torfer torfere torn torpid torquemadan torricellian torrid tortile totipotent tottery touchier touchiest touchy tougher toughest toughish toughly touristy towardliest towardly towery townish townwide toxophil toxophile toysome tracible trackside trad traditionbound trafe trafficky traif trailblazing trailside trainsick traitorly tramontane trampier trampiest trampish trampy trancey tranquil tranquiler tranquilest trans transalpine transborder transboundary transcardiac transcatheter transdanubian transdisciplinary transearth transeunt transfermium transfinite transfluent transfusible transiliac transilient transitory translationary translatory translawrencium translesion translocus translog translucent translunary transmale transmarine transmasculine transmigratory transmissible transmittant transmontane transmundane transmutant transocean transoid transondent transpadane transparent transpartisan transplanckian transplanetary transplutonium transpontine transregionate transrhenane transtiberine transtigritane transuranium transverse transworld trapeziform trappy trashier trashiest trashy trayf treaclier treacliest treacly treblier trebliest treebound treif treife trembly trenchant trenchardian trendier trendiest trendsetting trepid trepidatory treyf treyfe triacid tribalesque triblock tribunician tricholomatoid trichrome trickier trickiest trickish trickledown tricksier tricksiest tricksy tricky tricomponent tricoordinate tricorner tricounty tricyclo tridactyl tridentate trifid trifling trifold trifoliate triform triggest trilaminate trilly trilobate trimmest trinitarian trinkety trinkly trioculate tripartisan tripartite triphase triploid trippier trippiest trippy triquarter triservice triste triter tritest tritonian triumphant triune triweekly trochilidine trodden trollish trollopy troo troppo troublefree troublesome trouty troy truckish truer truest truffley truffly trumpian trustier trustiest trustworthy truthier truthiest truthsome truthy tsarian tsarish tubbier tubbiest tuberculate tuberculoid tudorbethan tulgey tumbledown tumescent tumid tumourigenicity tungstatian tungstenian tunnelly tupian tuppenny turbid turdiform turfy turgescent turgid turinese turkish turneresque turnippy turnipy turpid turpsy turquoisey turquoisy turrible turvy tuscan tussocky twainesque twainian twangy twattier twattiest twatty twee tweedier tweediest tweedy tweenage tweezer twelvepenny twentyish twentypenny twerpish twerpy twiddly twiform twiggier twiggiest twiggy twilightish twilighty twilitten twinborn twinight twinklier twinkliest twinkly twirlier twirliest twirly twistfree twistier twistiest twitchier twitchiest twitchy twittery twopartite twopenny typesafe typewritten tyrolese tzarian uberwealthy ubiquarian uffish uglier ugliest ugsome ulterior ultrablond ultrabright ultrabroad ultracharming ultracheap ultraclean ultraclever ultracold ultracompact ultracompetent ultracomplex ultracontemporary ultracool ultracrisp ultradeep ultradelicate ultradense ultradian ultradiscreet ultradiscrete ultradistant ultradistinct ultradry ultraefficient ultraelegant ultrafaint ultrafast ultrafeminine ultrafine ultrafunky ultraglossy ultragreen ultrahard ultraheavy ultrahigh ultrahip ultrahot ultrahuman ultraintense ultralean ultraleft ultralightweight ultralong ultralow ultraluxury ultramacho ultramasculine ultraminimalist ultramobile ultramodern ultramoist ultramundane ultranarrow ultraorthodox ultrapotent ultraprecise ultrapure ultraquantum ultraquick ultraquiet ultrarapid ultrarare ultrarich ultraright ultraripe ultrasafe ultrasecret ultrasecure ultraselect ultrasharp ultraslick ultraslim ultraslow ultrasmall ultrasmart ultrasmooth ultrasnug ultrasoft ultrastrong ultraswift ultrathick ultrathin ultratight ultratough ultravast ultrawarm ultraweak ultrawealthy ultrawide ultrawideband umbilicate umbonate umbrielian umpteen umptieth umpty umteenth unabating unabrupt unabsorbing unaccessible unaccommodating unaching unaffecting unaffectionate unafraid unagile unaging unairworthy unalluring unaltering unamazing unamerican unamusing unangry unanimitarian unapparent unappealing unappetising unappetizing unapproving unapt unarousing unasleep unaspiring unassuming unattaining unaustralian unavailing unawakening unawaking unaware unawoken unbaroque unbeaten unbeautifulness unbecoming unbefitting unbegun unbeholden unbeknown unbelieving unbenign unbereft unbidden unbitchy unbitten unblameworthy unblanching unblinking unblown unblue unblushing unbookish unboring unborn unbought unbounden unboxy unbright unbritish unbroadcast unbroken unbrotherly unbudging unbuilt unburnt unbustling unbusy uncalculating uncalm uncandid uncannier uncanniest uncanny uncapitulating uncaring uncast uncatchy uncate uncaught uncavalier unceasing uncertain unchallenging unchancy unchanging uncharming unchaste unchildish unchilly unchosen unchristian unchurchly unchurlish uncinate uncincate uncircumspect uncivil unclad unclean uncleaner uncleanest uncleanlier uncleanliest unclearer unclearest unclever uncloudy uncloven unco uncollapsible uncollectible uncomelier uncomeliest uncomfy uncommon uncommoner uncommonest uncompassionate uncompelling uncomplaining uncomplaisant uncomplimentary uncomprehending uncomprehensible uncompressible uncompromising uncomradely uncondescending unconfident unconsenting unconsoling unconstraining unconsuming unconversant unconvincing uncool uncoordinate uncoquettish uncorrect uncorrupting uncosy uncourtly uncousinly uncouth uncouther uncouthest uncowardly uncozy uncrafty uncreditworthy uncruel uncrying uncurly uncurrent uncustomary uncut uncute undancerly undaring undaunting undazzling undealt undecadent undecaying undeducible undefiant undegenerate undemanding underabundant underate undercabinet underconfident underdense underdone underdrawn undereaten undereye underfloor undergoing undergone undergrown underheard underhill underhood underhung underknown underlain underlit underlying undermost underpaid underproof underripe undersea underseen undersize underslung undersnow understair understrength undersung undertaken underthrown underway underwhelming underwound underwritten undeserving undesigning undesponding undeviating undifferentiating undigestible undiligent undirect undiscerning undisclosing undiscriminating undistinct undistraught undisturbing undivine undivisible undoctorly undoctrinaire undone undoubting undrawn undreamt undriven undrunk undrunken undue undug undulant undulatory undying uneager unearnt unearthly uneasier uneasiest uneasy uneaten uneath uneating unebbing unechoing unedifying unelaborate unelegant uneloquent unembarrassing unempowering unenchanting unencouraging unendearing unending unenforcible unengaging unenlightening unenquiring unenriching unenterprising unentertaining unenthralling unenticing unerring unerudite uneven unevener unevenest unexact unexacting unexciting unexistent unexisting unexplanatory unexplicit unextendible unextraordinary unfading unfailing unfair unfairer unfairest unfallen unfalling unfaltering unfancy unfatherly unfattening unfeasible unfecund unfeeling unfelt unfeminine unfeminist unfertile unfervent unfeverish unfinicky unfishy unfitting unflabby unflagging unflamboyant unflashy unflattering unflickering unflinching unflowering unflowery unfluctuating unfluent unfond unforbidden unforeseen unforetold unforgetting unforgiving unforgotten unforsaken unforthcoming unfought unfound unfragrant unfraught unfree unfresh unfriendlier unfriendliest unfriendly unfrightening unfrilly unfrozen unfruiting unfrumpy unfulfilling unfun unfunky unfunnier unfunniest unfunny unfussier unfussiest unfussy unfuzzy ungainlier ungainliest ungainly ungainsaid ungallant ungazing ungeeky ungenteel ungentle ungentlemanly ungerminating ungimmicky ungirlish ungiven ungiving unglitzy unglossy ungodlier ungodliest ungodly ungood ungratifying ungreat ungreen ungrieving ungrudging unguiculate unguligrade unhale unhandsome unhandsomer unhandsomest unhandy unhappier unhappiest unhappy unhardy unhasty unhealthier unhealthiest unhealthy unheard unhearing unheavenly unheeding unheimlich unheld unheppen unhesitant unhesitating unhewn unhinderedly unhip unhirsute unhit unholier unholiest unholy unhomely unhot unhousebroken unhuman unhumanitarian unhung unhungover unhungry unhurt uniat uniate unicase unicast unicolor unificatory uniflow unifoliate uniformer uniformest unijugate unilateralist unilluminating unimportant unimposing unimpossible unimpressible uninformedly uningratiating uninquiring uninsistent uninspiring unintelligent unintelligible uninteresting uninterruptible unintimidating unintriguing uninucleate uninviting uninvolving unipartite unipennate unipotent unique unisectarian unisex unisulcate unitarist univallate univariant universitywide univoltine unixy unjewish unjolly unjudging unjuicy unjust unkeen unkempt unkept unkind unkinder unkindest unkindlier unkindliest unkingly unkinky unknightly unknowing unkosher unlachrymose unladen unlaughing unleafy unlet unlevel unlikelier unlikeliest unlistening unlit unliterary unliving unlonely unlovelier unloveliest unlovely unloving unluckier unluckiest unlucky unlying unmaidenly unmanifest unmanlier unmanliest unmasculine unmeaning unmeant unmelancholy unmenacing unmeriting unmerry unmessy unmet unmighty unmilitary unmisleading unmistaken unmodern unmodernist unmotherly unmotivating unmourning unmoving unmown unmurmuring unnecessary unneighborly unneighbourly unnessary unnewsworthy unnice unnoble unobjecting unobliging unobservant unobtuse unoffending unorderly unordinary unorthodox unoverridden unpaid unparanoid unparliamentary unpassionate unpatronising unpatronizing unperceiving unperfect unpicturesque unpitying unplausible unpleasant unpleasing unpliant unpolite unpossible unpostmodern unpraying unprepossessing unpresuming unpretending unpretty unpriestly unprincely unpristine unproducible unprojecting unpromising unproofread unproper unproportionate unproven unpure unquailing unquavering unqueenly unquestioning unquiet unquirky unquivering unradiant unrainy unrandom unread unreadier unreadiest unready unreasoning unreflecting unreflectively unrefreshing unregarding unregenerate unrelaxing unrelenting unreluctant unremembering unremittant unremitting unrepaid unrepentant unrepenting unreproducible unrepublican unreset unresistant unresisting unresonant unresting unreticent unrevealing unreverent unrevolutionary unrewarding unrewound unridden unripe unriper unripest unriven unroadworthy unrude unrulier unruliest unruly unrun unsafe unsafer unsafest unsaintly unsalty unsanguine unsanitary unsappy unsatisfactory unsatisfying unsavory unsavoury unsavvy unscary unscheming unscholarly unseaworthy unsecret unsectarian unsecure unseeing unseemlier unseemliest unseemly unseen unselfish unsensationalist unsensing unsent unserene unservile unsewn unsexier unsexiest unsexy unshaken unshakespearean unshapely unshapen unsharp unshaven unshining unshiny unshod unshone unshorn unshot unshown unshowy unshrinking unshriven unshrunk unshrunken unsighing unsightlier unsightliest unsightly unsilly unsisterly unslain unsleek unsleeping unsleepingly unsleepy unslick unslumbering unsmiling unsmitten unsmooth unsmug unsneezing unsold unsoldierly unsoppy unsordid unsought unsound unsounder unsoundest unsown unspaceworthy unsparing unspent unspilt unsplendid unsplit unspoilt unspoken unsporting unsportsmanly unsprightly unspun unsqueaking unsqueaky unsqueamish unstabler unstablest unstagey unstagy unstaid unstatesmanly unsteadfast unsteadier unsteadiest unsterile unstewardly unstill unstimulating unstinting unstirring unstodgy unstolen unstrange unstraying unstreetwise unstrewn unstricken unstrong unstruck unstuffy unstung unstylish unsuave unsubtle unsudden unsugary unsullying unsummery unsung unsunny unsupporting unsuppressible unsure unsurer unsurest unsurprising unsurrendering unsusceptible unsuspecting unsvelte unsweet unswept unswerving unswollen unsworn unsympathizing untaken untasty untaught untaxing untenably untender untenty unthorough unthreatening unthrifty untidier untidiest untidy untimelier untimeliest untimely untiring untold untomboyish untoothsome untorn untouristy untoward untranquil untrembling untrendy untrod untrodden untroublesome untroubling untrue untruer untruest untrusting untrustworthy ununiform ununique unvacillating unvain unvarying unvictorian unvisionary unvivid unwaking unware unwarier unwariest unwarping unwary unwavering unwealthy unweary unwearying unweeping unweird unwelcome unwelcoming unwell unwept unwhole unwholesome unwieldier unwieldiest unwieldy unwild unwilling unwincing unwinesque unwinking unwise unwiser unwisest unwithering unwithstood unwitting unwitty unwizardly unwoken unwomanly unwon unworldly unworn unworrying unworthier unworthiest unworthwhile unworthy unwoven unwritten unwrought unwrung unyielding unyoung upcoming updrawn upfield upflung upgiven upgrown uphand upholdatory uplandish uplevel uplifting upmost uppish uppitier uppitiest uppity upsidedown upstair upswept upswollen upthrown uptight uptonian uptorn upwinding uranoan uranylian urban urbane urbaner urbanest urceolate urdu urgent urinant urinary urinatory urinose ursiform ursine userfriendly usurpatory utahn uterine utriculate utterest vacant vacillatory vadose vagile vaginate vaginatoid vague vagueish vaguer vaguest vain vainer vainest vairy valiant valid valvate vampier vampiest vampiresque vampirish vampish vampy vanadatian vanadian vanadoan vanadylian vaniloquent vapid vapider vapidest vaporish vapory vapourish vapoury varangian varicose variform varimax varying vascon vasoconstricting vasodilatory vasomotor vaster vastest vasty vatican vaticinatory vatinian vaultworthy vealy vectisian vegete vehement veiny velvetier velvetiest velvety venerian venitian ventilatory ventricose ventripotent ventrolaterally venturesome verbose verboten verdant verecund verier veriest verklemmt verklempt verlainesque vermian vermiform veronese verruciform verrucose verruculose versatile versicolour verticillate vespertine vespine vestian vestimentary vestpocket vetoproof vibrant vibratory vibrioid vibrotactile vicariant viceregally vicissitudinary victimy viewy vigenary vigilant vigilantist vile viler vilest villagey villainously villiform villose vilnian vincible vindicatory vinegarish vinegary vinier viniest vintagey viny violaceus violeter violetest violetish viperish virescent virgilian virginian viridescent virile virilescent virussy viscerosensory viscid visible visuomotor vitelline vitrescent vittate vixenish vixenly vociferant voegelinian voetstoots vogueing voguish volage volant volatile voltairean voluble volucrine voluntariest volvate vomity vonnegutian voodooish vorticose vowelly vuggy vughy vulgarer vulgarest vulpine vulturine vulviform wacker wackest wackier wackiest wacky wafflier waffliest waffly wafty waggier waggiest waggily waggish waggly waggy waifish waistlong waitressy walnutty walrasian wambly wan wanchancy wanderlusty wankerish wankier wankiest wankle wanky wanner wannest wanthriven wapanese warbly warholesque warholian warier wariest warmest warmish warring wartier wartiest wartorn warty warworn wary washier washiest washy waspish waspy waterborne waterier wateriest waterish watertight watery watry waugh waughesque waughian wavery wavier waviest wavy waxen waxier waxiest waxy wayward waywise wayworn weak weaker weakest weakish weaklier weakliest weaksauce weakside wealden wealthier wealthiest wearier weariest wearisome weaselier weaseliest weaselly weasely weatherbeaten weatherly weathertight webbier webbiest webby websafe weddingy wedgy weedgrown weedier weediest weedy weeklong weekold weensy weepier weepiest weepy weer weest wegenerian weightier weightiest weighty weirder weirdest weirdsome weirdy wellborn wellesian wellknown wellsian wenlock werewolfish westcottian westernmost westmost westy wetproof wettest wettish whackier whackiest whacky whartonian whatever whatsoever wheatier wheatiest wheaty wheelback wheely wheezier wheeziest wheezy wheyey wheyish whichever whiffier whiffiest whiffy whiggish whiney whingy whinier whiniest whiny whippier whippiest whippy whirlier whirliest whirly whiskery whispery whistly whitebread whitelip whiter whitest whitish whizzier whizziest whizzy wholescale wholesome wholewheat whoreish whorish wibbly wickeder wickedest widdler widdlest wideband wideish wider widerscale widerspread widescale widespread widest widish wieldier wieldiest wieldy wifelier wifeliest wifely wifty wiggier wigglier wiggliest wiggly wiggy wildean wildest wildish wilhelmine wilier wiliest willowier willowiest willowy wily wimpier wimpiest wimpish wimpy windbitten windblown windborne windbound windbreaking windfallen windier windiest windswept windthrown windtight winey winier winiest winningest winsome winterier winteriest winterish winterlong winterly wintery wintrier wintriest wintry winy wiredrawn wirier wiriest wiry wisconsinite wisecracky wiselier wiseliest wiser wisest wispier wispiest wispy witchier witchiest witchy withdrawn withholden withier withiest withspoken wittier wittiest wittle witty wizardly woaden wobblier wobbliest wodehousean wodehousian woebegone woggish woken wolffian wolfish wolframatian wolframian womanish womanlier womanliest womanly wonderfool wonderfulest wonderfullest wonderstruck wonkier wonkiest wonkish wonky wontedly woodburning wooden woodest woodfree woodier woodiest woodish woodsier woodsiest woodsy wooley woolfian woolier wooliest woollen woollier woolliest woolly woozier wooziest woozy wordier wordiest wordish wordy workaday workfree working workly workshy worksome worky worldlier worldliest worldlywise worldshaking wormier wormiest wormish wormy worn worrisome worser worsest worstest worth worthen worthier worthiest worthwhile wrathier wrathiest wrathy wretcheder wretchedest wrier wriest wrigglier wriggliest wriggly wrinklier wrinkliest wristy writerly writhen writhy writing written wroclavian wroth wryer wryest wud wussier wussiest wycliffite xanthochroid xenophanean xenophontean xerarch xerxean ximenean xiphoid xiphoidian xlnt xxxx xylary xylocopine xyloid yachtboard yachtier yachtiest yackety yago yaller yapese yappier yappiest yappy yardlong yare yarer yarest yarny yarrish yatvingian yawnier yawniest yawny yclept yearbookish yearslong yeastier yeastiest yeasty yeatsian yechier yechy yella yellower yellowest yellowier yellowiest yellowish yellowy yelpier yelpiest yelpy yeshivish yeuky yiffest yiffier yiffiest yiffy yobbish yoghurty yogurty yolky yoong yotvingian younger youngest youngish ypresian ypsiliform ypsiloid ytterbian yttrian yuckier yuckiest yucky yukkier yukkiest yukky yummier yummiest yummo yummy zaftig zairese zamenhofian zanier zaniest zany zappaesque zappier zappiest zappy zarking zazzy zeitgeisty zeldaesque zennish zeolitiform zephyry zeroary zeroth zestier zestiest zesty zhlubby ziggety ziggy zigzaggy zincian zincky zincoid zincy zingier zingiest zingy zinky zippier zippiest zippo zippy ziptop zirconian zittier zittiest zitty zizekian zoanthoid zoftig zolaesque zonary zonate zoomier zoomiest zoomy zoosanitary zooty zooxanthellate zoquean zorkian zygobranchiate zygoid zygose 25 C eight five four i ii iii iv ix nine one seven six ten three two v vi vii viii x xiii xix xx xxi zero 2 NGP barring failing 1 NPRV post 6 NPR across aside behind beyond but contra 7 NPV bar come cum par save sub till 9 NP ala bout despite longa midst modulo mong pro upside 22 NRV alias amen bang bit broadside dab ditto flop fuck hen nope pitapat plonk sidearm slap smack spang stag stop supply yes yet 85 NR abroad alot ana argal atm aye beauty byembye cuz deiseal elsewhere felly foretime forever forth friday heor hereafter horseback hotfoot innard ipof jist kerchunk kerslap kerslop kerwallop kinda leafmeal legato longhand manana maybe meantime meanwhile midnightmare midswing midthought midway monday nation needer nowhere nowt obiter outdoors overtime owt peradventure pianissimo pizzicato plenny plenty presto saturday scienter sho sidesaddle sorta sostenuto straightway sunday tanto thar there thursday today tomorrow tonight tricorne tuesday tutti way wednesday whereabouts wherefore yah yay yea yep yesterday yestertide yestertime yesterweek yup 5477 NV aah abandon abate abend abode abort abscess absciss abseil abuse accent access accession acclaim accolade accord accost account ache acrospire act action acupuncture add addend addict address adduct adenylate adlib admin advantage adventure advert advocate adze affect affection affiliate affix affray affright affront age aggress ague ahh aid ail aim air airbrush airdrop airfreight airlift alarm alibi aliment allomother alloy allure ally amaze amble ambuscade ambush amends ammoniate amnesty amount amp anagram anchor angel anger angle angst anguish ankle annex annexe annoy answer ante anticross antidote apparel appeal append applicate applique apprentice approach aquacise aqualung aquaplane aquatint arbiter arbitrage archetype architect archive armor armour array arrest arrow arse article arylate ash ask asphalt assart assassin assault assay assegai assent assert assfuck assign assist asterisk atrophy attack attaint attempt attire attitude attribute auction auctioneer audiotape audit audition auger augment augur author autocancel autoclave autodestruct autofocus autograft automobile autopilot autopsy autosave avail avalanche avenge aver award awe axe baa babbitt babble bach backbite backburn backchannel backchat backcross backdoor backfill backfire backflip backflush backgammon background backhaul backheel backhoe backlash backlight backlist backlog backpack backscatter backsheesh backshift backsight backslash backspace backspin backstitch backstop backstroke backtalk backtrace backtrack backwater backwind badge badger baff baffle baffs bag bagpipe bail bait bake bakeout baksheesh balance bale balk ball balladeer ballast balloon ballot ballyhoo bam ban band bandage bandish bandsaw bane bangtail banhammer banjax banjo bank bankroll banquet banter barb barback barbecue barber bard barf bargain barge bark barney barrack barrage barrel barricade barter baseline bash basket bassoon bastinado bat bate bath bathe batik baton batten batter baulk bayonet beach beacon bead beagle beak beal beam bean beard bearhug beast beatbox bebop bed bedizen bee beeline beep beeswax beetle befall beg begeck beggar begin begunk belay belch bell bellow belly bellyache belt bench benchmark bend benefice benefit berm berry berth bespeak bet bevel bever bevvy bias bibblebabble bicycle bid biff bigfoot bike bilge bill billet billow bimble bin bind binge biograph biography biopsy birch bird birdie birdlime birl bisect bitbucket bitch bitchslap bite bitmask bitt bivouac bivvy bivy blab blabber blackball blackboard blackjack blacklead blacklist blackmail blacktop blade blame blamestorm blanch blare blarney blaspheme blast blat blather blatter blaze blazon bleach bleat bleb bleed bleep bleg blemish blend blether blevey blidget blight blimp blindfold blindside blink blinker blip blister blit blitz blizzard bloat block blockade blog blood bloom blooter blop blorp blossom blot blotch blouse blow blowtorch blubber bludge bludgeon blueprint bluescreen bluewash blunder blur blurb blush bluster board boast boat bob bobar bobbar bobbasheely bobble bobsled bobtail bode body bodyboard bodycheck bodyguard bodyslam boff bog bogart bogey boil boldface bollix bollock bolster bolt bomb bombard bond bong bongo bonk bonus boo boob boogie boogieboard book bookend bookmark boom boomerang boondock boondoggle boost boot bootblack bootjack bootstrap booze bop border bore borg bork boro borrow bot botch bother bottle bottleneck boulder bounce bow bowel bowl box boy boycott braai brace bracket braid brail brain brainstorm brainwash braise brake branch brandish brandy brangle brank brawl brawn bray breach bread breadcrumb break breakdance breakeven breakfast breast breaststroke breed breeze brew bribe brickfilm bridesmaid bridge bridle brigade brilliantine brim brine bristle broach brocade brock brogue broil broker bromate brood brook broom brother brownnose browse bruise brunch brush bubble buccan buccaneer buck bucket buckle buckram buckrams bud buddle buddy buffalo buffet buffoon bug bugger bugle build bulge bulldog bullet bulletin bullshit bullwhip bulwark bumble bump bunch bunco bund bundle bungle bunk bunker bunt buoy burble burden burke burl burn burp burr burrow burst bury bus busk buss bustle butcher butler butt butter butterfly buttfuck button buttonhole buttress buy buzz bycatch byname bypass cabbage cable cache cack cackle caddie caddy cadence cadge cage cake calcimine calendar calender calk call callus calque cam camber came cameo camo camouflage campaign campus canal cancan cancel candle candy cane canker canna cannon cannonade cannonball canoe canter cantilever canton canvas canvass cap caparison cape caper captain caption capture caracole caravan carbonado carbonate carboxylate card care career caricature carol carom carp carpet carpool carry cart cartoon cartwheel cartwhip cascade caseate cash cashier cast castle catalog catalogue catapult catcall catch caterwaul catnap caucus caulk cause caution cave caveach caveat cavil caw ceil cellar cement censor censure census centerpunch centrifuge certificate cess chafe chaff chaffer chagrin chain chainsaw chair chalk challenge chamber chamfer champ change channel chant chap chaperon chaperone chapter char charge charioteer chark charleston charm chart chase chasse chat chatter chauffeur chaulk chaw cheat check checker checkmate checkpoint checksum checkup cheddar cheek cheep cheer cheese chequer chest chevron chevy chew chib chicane chilltime chime chimney chimp chin chink chinkle chinwag chip chirp chirr chirrup chisel chit chitchat chiv chivvy chivy chloroform chock choke chomp chop chopper chord chore chortle chorus chromatograph chrome chronicle chuck chuckle chug chum chunder chunk church churn cinch cincture cinder cipher circle circuit circumfix circumstance citrate clabber clack clag claim clam clamor clamour clamp clang clangor clangour clank clap clash clasp clatter clause claver claw clay cleat cleave cleft clem clench clerk clew click climax climb clinch clink clip clive cloak clobber clock clog cloister clomp clone clonk clop closet clot clothes clothesline clothespin cloud clout clove clown club cluck cludge clue clump clunk cluster clutter coach coagulate coal coapt coast coat coauthor coax cob cobble cock cockblock cockfight cockle cocktease cocoon coculture cod code codename coffer coffin cog cohost coif coil coin collage collapse collar collect collocate colour comb combat combine comfort comix command comment commerce commission commit commune comp compass compere compilate compile complement compliment compost compress compromise con concentrate concern concert concertina conch concord condition conduct cone confab confection confine confines conflict confuzzle conga conge conjecture conjugate conjure conk consarn consense consent conserve consist console consort construct construe consult contact contest continue contract contrast control conversation converse convert convict convoy cooee cook coom coon coop cop copay cope copilot copperplate coppice copse copter copy copypasta copyright coquet cord cordon corduroy core cork corn corner cornhole corpse corral correlate corset cosplay cosponsor cosset cost costar costume cottage couch cough counsel count countdown countenance counterattack counterbalance counterbid counterbore countercheck counterclaim counterflow countermand countermarch countermove counteroffer counterpicket counterplot counterpoint counterpoise counterpressure counterpunch countersign countersink counterstain counterstrike counterweight couple courier course court covenant cow cowboy cowgirl cox crab crackle cradle craft cram cramp crane crankle crate crater crawfish crawl crayon craze creak creampie crease credit creed creep creosote crescendo crest crew crib crick cricket crimp cringe crinkle critique crizzle croak crochet crock crome crop croquet crossbreed crosscheck crossclaim crosscut crossfade crossgrade crosshatch crosslink crosspost crossref crossruff crotchet crouch crow crowbar crowd cruise crumb crumble crumple crunch crusade crush crust cry cryosection cryptograph cub cube cuckold cuddle cudgel cue cuff culch cull culls cully culture cuntfuck cup curate curb curd cure curl curlicue curmur curry currycomb curse cursor curtain curtsey curve cushion cwtch cyberattack cyberbully cybersex cycle cyclostyle cypher dado dag dally dam damage damages dance dander dangle dap dare dart dash dashboard database date dateline daub dawn daydream daylight daytrade daze deaccession deacon deadbolt deadhead deadlift deadlink deadlock deathmatch debate debauch debouch debut decay decease deck decline decoke decontrol deconvert decoupage decoy decrease decree decrement decypher dee deed deejay deekies deem default defeat defect defilade defile defy deke delay delayer dele delegate delete delight deluge delve demagogue demand demanufacture demean demise demo demur den denizen dent deposit dequeue derail descant desert design desire desk desolvate despair despatch detail detent detour detox devel deviate devil devise devvel dew diadem diagram dial dialogue diaper diaphragm dibble dibs dice dick dicker dictate diddle die diesel diet diff difference dig digest dike dildo dill dime dimension dimple din dinge dint dip diplomate dirk dirt disaccord disadvantage disarray discard discharge discipline disco discomfort disconnect discord discourse disdain disease disengage disfavor disfavour disgrace disguise disgust dish dishonor dishonour disillusion disinterest dislike dismay dismount disparage dispatch display disposition dispute disregard disrelish disrepute disrespect diss dissent dissolve distance distaste distemper distress district distrust disuse disvalue ditch divide divorce divvy diy dob dock docket doctor document dodder dodge dog dogear dogfight dogfood dogleg dogpile dogsled dole doll dollop dolly dom domesticate dominate don donk doodle doom door doorbell doorstep dosado dose dot dote dots doublecross doubt douche dough dought dove dovetail dower downgrade downlink download downvote dowse dox doze drabble drag dragoon drain drape draw drawbore drawl dreadlock dreads dream dredge drench dress dribble drift driftnet drill drink drip drive drivel drizzle drone drool droop drop dropkick drove drowse drudge drug drum druther drydock drywall dub duchess duck duct duel duet dug duke dummy dump dunch dung dunk dunker dunt duodecimate dupe dusk dust dwell dye dynamite eagle earmark earplug earth earthscape earwig ease eats eavesdrop echelon echo eckle eclipse ecoculture eddy edge edit eel eep effect efflux effort egg egocast egress eisegete ejaculate eject elbow electroplate electroshock electrotype ellipse email embarge embargo embrace emcee employ enamel encore encounter encroach end endeavor endeavour endplay enfilade engineer entail enter entrail entrance entreat enucleate environs envy equipoise ermine ern errand error escalade escape escheat escort escrow espalier esquire essay esteem estimate ethoxylate ettle euchre evidence example excerpt exchange excise excuse exegete exercise exfiltrate exhaust exhibit exile exit expense experience experiment exploit exploiter expose extract eye eyeball eyewitness fable fabulate face facebook facelift facemail facepalm faceplant facet facsimile factor fade fadge fag fail falcon fall falsecard falter fame fan fandango fang fansub fantasy fap fard fare farm farrow farspeak fart fartarse fash fashion fate father fathom fatigue fatwa fatwah fault favor favour fearmonger feast feather featherbed feature feck fecks feddle feed feedback feedforward fellowship felt fence fend ferment ferret ferry fess festoon fetch fete fetter fettle feud fianchetto fib fid fiddle fidget field figger fight figure file filetype filibuster filigree fill fillet fillip film filter filtrate fin finance finch finesse finger fingerbang fingerpaint fingerpick fingerprint finish fink fire firebolt firebomb firehose firewalk firewall fishtail fission fissure fist fistfight fisticuff fix fixture fizz fizzle flabbergast flack flag flail flake flambee flap flare flatline flavor flavour flaw fleck fleece flesh fletch flex flick flicker flimflam flinch flint flipflop flipper flite float flob flock flood floodlight floor floss flounce flounder flour flourish flow flower flox flub fluff fluke flump flurry flurt flute flutter flux flyer foal foam fob focus fog foil foist fold fondue fool foot footer footle footnote footslog foozle forage foray forbear forbisen forbode force ford forearm forecast foredoom foreflow forefoot foreground forehold foreken forelook foremind foreread foresmell forest foretaste foretoken forewalk forewit forfeit forflutter forge fork forklift form format fortress founder fountain fourpeat fowl fox foxhunt foxtrot fraction fracture frag fragment frame franchise fratch fray freckle freebase freecycle freefall freeroll freestyle freewheel freeze freight fresco fret fricassee friend frieze frig frill frisbee frith fritter fritz frivol frizz frob frock frog frogmarch frosh frost frostbite frot froth frother frottage frounce frown frowst fruit fry ftp fuddle fudge fuel fulminate fumble fume function fund funk funnel fur furlough furnace furnish furrow fuse fusillade fuss futz fuze fuzz gab gad gaff gaffle gag gage gaggle gaincome gait gall gallop gallows gam gamahuche gamble gambol gamemaster gamemasters gammon gander gang gangbang gangrape gaol gap gape garage garb garbage gargle garland garner garnett garnish garnishee garotte garrison garrote garrotte garter gasconade gash gaslight gasp gat gate gatekeep gather gauge gaum gauze gavage gavel gawk gaze gazette gazunder gear gedge gee geek gel geld gelt gender genlock genotype geocache geranylate gerbil germ gerrymander gesture getter gherao ghost gib gibber gibbet gibe gift gig giggle gillie gillnet gilravage gimlet gimme gimmick gin ginn gird girdle girt giss git glance glare glass glaze gleam gleek gleg glide glimmer glimpse glint glissade glisten glister glitch glitter gloat glob globe glomp gloom gloop glop glory gloss glove glow glower gloze glue glug glut glutch glycate gnar gnarl goad goat gob god godfather goggle goggles goldbrick golf golly gong goo goof google googlewhore goose gore gossip gouge governess gown grab grace grade graffiti graft grain gralloch grandfather grandstand grant graph grapple grasp grass grate gravel graylist graze grease greenwash greets greylist grid griddle grief grieve grift grig grimace grime grin grind grip gripe groan groin groom groove grope grouch groundfish group grout growl grub grubstake grudge grumble grump grundle grunt guarantee guard guerdon guess guesstimate guest guestimate guff guffaw guggle guide guile guillotine guilt guitar gull gulp gum gummer gunge gunzel gurgle gurn gush gust guy guzzle gybe gyp gyre habit hack hackle hacksaw hade haemorrhage haft hail haint hale halftone hallelujah hallmark hallo halloo halo halt halter ham hammer hamper hance hand handbag handball handbrake handcraft handcuff handicap handle handplant handsel handwave hang hansel hap haplotype harangue harbinger harbor harbour hare harm harnass harness harp harpoon harrow harrumph harumph harvest hassle hasta haste hatch hatchet hate haul haunt haven haver haves havoc haw hawk haxor hay hazard haze headbutt headline heaf heap hearse heart hearthstone heat heave hedge heed heel heft heist helicopter heliograph helm help hem hemorrhage hemstitch herald herd heterograft hex hiccough hiccup hick hickup hide hie highball highjack highlight hijack hike hikoi hilite hinge hinny hint hire hiss histogram hit hitch hive hoard hoax hob hobble hobnob hobo hock hockle hoe hog hoik hoist hoke hold hole holiday holler hollo holster holystone homebrew homer homeschool homestead hone honeycomb honeymoon honk honor honour hoodoo hoof hook hoon hoop hooray hoot hoover hop hope hopscotch horlicks horn hornpipe horse horseplay horseshoe horsewhip hose host hotbox hotdog hothouse hotline hotlist houdini hough hound house housemaid hovel howl hoy huck huckster huddle huff hug huggle hull hum humbug humor humour hump hunch hunger hunker hunt hurdle hurl hurrah hurry hurtle husband hush husk hustle huswife hut huzza huzzah hydrate hydroplane hymn hype hyperlink hypertexture hypertrophy hyphenate ice icq illuminate image immunoblot imp impact implant implement import impress imprint inbeat inblow inbreak inbuild incense inch incline inconvenience increase increment incross indent indenture index indite indulgence inebriate infare infill infix influence ingress initiate ink inkle inlay inlead inosculate input insert inset instal install instance institute instream instructs instrument insuck insult intake interact intercept interchange intercrop intercross interdict interest interface interfix interflow interlace interleaf interlink interlock interlude intermix intern internetwork interplay interrupt interspace interview interwind intrigue intro inventory invert invest invite invoice inwheel inwork irc ire iris island isolate isotope issue itch iterate ixnay jab jabber jack jackal jackaroo jackass jacket jackhammer jackknife jackrabbit jacuzzi jag jail jailbreak jam jambok jangle japan jape jar jaundice jaunt jaup jaw jawbone jazz jedge jeer jell jelly jerk jerkoff jess jetski jettison jew jib jibe jig jigger jiggle jigsaw jill jilt jimmy jingle jink jinx jit jitter jitterbug jive jizz job jock jockey jog join joist joke jol jolt jones jook josh jostle jot jounce journal journey joust joy joyride joystick judder judge jug juggle juice juke julienne jumar jumble jump jumpstart junk junket jupe jury jut juxtaposition kabob kalsomine karyotype kayak kayo kaypoh kazoo kebab keck kedge keek keel keep keeve ken kennel kerb kern ketch kettle keyboard keyframe keynote keypunch keyword kibble kick kickflip kickstart kid kidnap kill killfile kiln kilt kink kip kipe kipper kiss kist kite kiteboard kitemark kitten kleptoparasite kludge knack knacker knag knap knapsack knee kneecap knell knife knight knob knock knoll knot knout know knuckle knuckleball knurl kotow kowtow label labor labour labyrinth lace lack lackey lacquer lacquey lactate ladder ladle laff lair lake lallygag lam lamb lament laminate lamp lampoon lance landfill landmark landscape lant lap lapper lapse lard larf lark larrup laser lasso latch lathe lather laud laugh launch launder lavage lave lawyer layaway layer leach leaf leaflet league leak leam leap leapfrog lear leash leave leaven lech lecture leech leg lek lens lesion lessee lesson let letter lever leverage levy libel licence license lick lickspittle lid lie lien lift lilt limb limewash line link linker lip liposuction liquor lisp list lithograph litter liveblog livescan load loaf loan loanshark lob lobby lock lockpick lodge loft lollygag longboard longe look lookbook loom loop loophole loot lop lope lopper lord losings lounge louse lout love lowball lube luck luff lug luge lull lumber lump lunch lunge lurch lure lurk lurv lurve lust luster lute luv maas mace macerate machete machine machinegun mack macule malfunction malky mallet malloc malt mambo man manacle manage mandate manet maneuver mangle manicure manifesto manoeuver manoeuvre manscape mantle manufacture manure manwhore map mar marble marcot margin marinade mark marker marl marmalade marmite marshal martyr marvel marver mascara mash mask masker mason masquerade massacre massage mast mastermind mat match mate matter maul mawn maximin maze meal meander measure medal medevac medivac medley meed megaphone meld melt memo menace mend mense mention mentor meow merchandise merchandize merge merit mesh mess message messenger met metablog metal metaphrase mete meter methylate metre mezzotint miaou miaow mic microblog microchip microcrack microfilm micropattern microphone microprogram microsoft microtome microwave midwife miff mike mildew milk mill mime mimeograph mimic mince mind mindfuck mindwipe mine minimax miniprep minister minnow mire mirror misbeat misbid misconduct misconjugate misconnect miscopy miscue miscure misdate misdeal misfall misfield misfire misfit mishit miskick mismatch misnomer misparse misprint misrhyme misrule miss mission missort misstep mist mistake mistell misthrow mistle mistrust misuse misyield miter mither mitre mix mizzle moan mob moblog mod moil mold molder mollycoddle molt monger monitor monkey monogram monograph monolog monologue montage moo mooch moon moonlight moonwalk moor mop mope morph mortar mortgage mortice mortise mosquito moss mote moth mothball mother motion motorbike motorboat motorcycle mottle mould moulder moult mound mount mountainboard mountebank mourn mouse mousetrap mousse mouth move mow muck mud muddle muff muffle mug muggle mulch mulct mull muller multiload mumble mummy munch mung murder murmur muscle muse mush muss muster mutiny mutter mux muzzle myspace nag nail name namespace nance nanny nanoimprint nap napalm nape narc nark narrowcast narrows natter neck necromance necropsy need needle neglect neigh neighbor neighbour nerve nest netsplit nettle network neuroimage nevermind newspaper nibble nick nickel nicker nickname niggle nightclub nim ninja nip nitrate nix nock nod nog noise nom nonplus nonsense nonsuit noodge noodle noogie noose norm nose nosedive nosegrind noseprint noseslide nosh notch note notice noun nudge nudzh nuke nurdle nurl nurse nursemaid nurture nut nutmeg nutshell oar oath object occasion octavate offcast offer officer offload offset offstand ogle oil oink ollie omen oncome onde onfall ontake oompah ooze opinion option orb orbit order orgasm orienteer ornament outbox outbreak outburst outcaste outcross outcry outdent outfall outfire outfit outflux outgo outlaw outlay outleap outline outpour output outrage outreach outride outsend outshow outskin outspan outtake outthrust outwork overbet overbid overburden overcall overcommit overdesign overdose overdraw overdub overfall overfill overflow overgo overhang overhaul overhold overissue overkill overlap overlay overleverage overline overload overmake overman overmatch overorder overpass overpressure overprint overpull overreach override overruff overrun oversample overshoot oversit overspill oversteer overstitch overstock oversupply overtalk overthrow overtype overuse overview overvote overwatch overwear overwork overwrap oxidate ozonate pack package packet pad paddle paddock padlock page pain paint paintball pair pal palaver palimpsest palisade pall palm palp pam pamphleteer pan pancake pander pandy panel pang panhandle pant pantomime parachute parade paraffin paragon paragraph paraphrase parasail parbuckle parcel pardon parent parget park parlay parley parleyvoo parody parole parp parquet parrot parry parse partition partner party pash pasquinade pass passage passenger password paste pastiche pastime pastor pasture patch patchwork patrol patronage patter pattern paunch pause pave pavilion paw pawl pawn pay pcr pdf peak peal pearl pebble peck pedestal pedicure pee peel peen peep peer peeve peg peise pellet pelt pen pencil pend penny pension pep pepper perch percolate perfume peril periphrase periscope perk perm permaban permablock permit peroxide peruse perv pervert pestle pet petard peter petition phagocyte phase phenocopy phenotype phial philander philibuster phish phone phosphate photo photocopy photoduplicate photograph photomap photometer photoset photostat phrase phreak phrensy physic picaroon pick pickax pickaxe picket pickle pickpocket picnic picture piddle pie piece piffle pig pigeon pigeonhole pigment pike pikey pile pill pillage pillar pillory pillow pilm pin pinball pinch pincushion pine pinfold pinion pinnacle pinprick pinwheel pioneer pip pipe pipeclay pipeline pipet pique pirouette piss pistol pit pitch pitchfork pith piton pitter pittle pity pivot pize placard place plague plait plan plank plant plash plaster plasterboard plat plate plateau platform platoon plaw play playfight playlist pleasure pleat pledge plight plink plip plod plop plot plotter plough plow pluck plug plume plummet plunder plunge ply pock pod podcast podium podreel pogo point poise poison poke pole poleaxe police polka pollard pollock polyadenylate polygraph pomade pommel pompador pompadour ponce pond pong poniard pontificate poo pooch poof pooka pool poop poot pootle popple pore pork porpoise portage porter portion portscan pose posit position posset postcode postfix postil postlude postmark postulate posture pot potter pouch pounce pound pour poussette pout powder power powerpoint powwow practice praise prance prang prank prate pratfall prattle prawn prebake precancel precaution precis precondition preculture predate predecease predicate preface prefilter prefix preform prejudice prelease prelude premiere premise premix prep preposition preprint preread presage presence preserve preshow presoak press pressure pretest pretext preview prevision prewash prewrite prey price prick prickle pride prig prink prison priss privateer prize probate probe proceeds process procession prod produce proffer profile profit profiteer program progress project prolapse promenade promise pronk prop proportion proposition prose proselyte prospect prostitute protest prototype provision prune prusik pry psalm psyche pub pucker puddle puff puggle pule pull pulp pulse pumice pump pun punch puncture punt pup purchase puree purfle purge purl purport purpose purr purse push pushbike put putt putter putz puzzle pwn pyrograph quaere quaff quahog quail quake quarantine quarrel quarry quarterback quaver quay queef queen quell quench query quest question queue quibble quicken quicklime quicksort quickstep quid quiff quill quilt quine quinella quip quire quirt quitch quitclaim quitter quiver quiz quonk quote rabbet rabbit race rack racketeer raconteur radar raddle radio radioassay radiobroadcast radiolabel raffle raft rag rage raid raik rail railbank railroad rain raise rake rally ram ramble ramp rampage rampart ramraid ramrod ranch range rankshift ransom rant rap rape rappel rapture rase rasp rat rataplan ratchet rate rathole ration ratoon rattle ravage rave rawk ray razor razz reach read readies ream reap reason reattempt reaudit rebate rebel rebleed rebluff reboot rebrand rebuff rebuffer rebuild rebuke rebuy rec recall recanvass recap recaption recapture recast receipt recess rechallenge recharge recharter recheck reclaim recoat recoil recompense recon reconnoiter reconnoitre record recount recover recross recruit redbait redd reddle redesign redirect rediscount redline redo redraft redraw redress redrum redshirt redub reduct reecho reef reek reel reencounter reeve referee reference refill refit reflux reform refrain refresh refund refurb regale regard regas regen regift regiment register regraft regress regret rehab rehash reheat reign reimport rein reissue reject rejoinder rekick relapse relaunch relay release relegate relent relet relish relook remain remake remand remark rematch remedy remise remit remix remortgage remount remove render rendezvous rendition renounce rent rentback reoffer rep repaint repair repartee repartition repast repatriate repeal repeat replay replevin reply report repose repress reprieve reprimand reprint reprise reproach repulse repurchase repute request requisition reraise rerecord rerelease rerun rescue research reserve reserves reset reshoot reshuffle resist resit resolve resort resource respite respond respray rest restart restreak restrike result resume resupply resync retake retard retcon retest retire retort retouch retrace retread retreat retrieve retrospect retry return reuse reveal revel revenge revere reverence revert review revise revisit revoke revolt revote reward rewash rewind rework rewrite rez rhyme rib ribbit ribbon rice rick rickshaw ricochet riddle ride ridge ridicule riff riffle rifle rift rig rim rinse riot rip riposte ripple ripsaw rise risk rival rive river rivet rmgroup roadblock roadshow roar robe robocall robotrip rock rocket rode roleplay roll rollback rollerblade romp roof rook roop roost roostertail root rope roquet rort roshambo rosin roster rot rotoscope roughcast roughhouse roughneck roundhouse roup rouse rout route router row rowel rub rubberneck ruck ruddle rue ruff ruffle rufie ruin rule rumba rumble rummage rumor rumormonger rumourmonger rupture rust rustle rut sabotage sabre sac sack sacrifice saddle safeguard sag sail sailboard saint salaam salamander salary sally salsa salute salvage salve sam samba sample sanction sandbag sandboard sandbox sandpaper sap sarge sarse sashay sass sat sate sauce sauna saunter savor savour saw say scab scaffold scag scale scallop scalp scam scamp scamper scan scapegoat scar scare scaremonger scarf scat scene scent scepter sceptre schedule scheme schlep schlepp schlomp schmooze school schoolmaster schuss schvitz scissor scissors sclate scoff scollop scone scoop scoot scooter scope scorch score scorn scourge scours scout scow scowl scrag scram scramble scrap scrapbook scrape scrawl scream scree screech screed screen screenshot screeve screw scribble scribe scrimmage scrimshander scrimshaw script scrobble scrod scroll scrounge scruff scruffle scrummage scrunch scrunt scruple scrutineer scuba scuffle scull sculpture scum scumber scumble scummer scunner scupper scut scutch scuttle scythe seajack seal sealift seam sear search season seat secretary section sed sediment seel seep segfault segment segue segway seine seiyuu sell sellotape semaphore semiquote sense sent sentence sentinel sepulcher sepulchre sequence serenade serotype serve service settle sex sext shack shackle shade shadow shadowbox shaft shag shake shale shambles shame shampoo shanghai shape shard share shave sheaf shear sheath sheave shed sheet sheetrock shell shellac shellack shelter shelve shemozzle shepherd sherpa shield shift shill shim shimmer shimmy shin shine shingle shinny ship shipwreck shirk shitcan shiv shiver shlep shock shoe shoegaze shoehorn shook shoot shop shore shoulder shout shove shovel shovelbum show showboat showcase shower shrank shred shriek shrimp shrine shrink shrinkwrap shroom shroud shrug shuck shudder shuffle shuggle shunt shut shutter shuttle shuttlecock shvitz shylock side sideline sidestep sideswipe sidetrack sidle siege sieve sigh sight sign signpost silence silhouette silkscreen silo silt simmer simper simulcast singe sink sinter sip sipe siphon sir sire sister sit site size sizz sizzle sjambok skank skate skateboard skeet skell skelp sketch skewer ski skiboard skid skin skink skip skipper skirmish skirt skit skitter skittle skive skrike skulk skull skunk sky skydive skylark skyline skyrocket slab slabber slag slalom slam slander slang slant slash slat slather slaughter slave slaver sled sledge sledgehammer sleep sleet sleeve sleigh sleuth slew slice slide slime slingshot slip slipstream slit slive sliver slobber slog sloganeer sloosh slop slope slosh slot slouch slough slowplay slub slubber sludge slue slug sluice slum slumber slump slunk slur slurp slut smail smarm smarts smash smatch smear smell smelt smile smirk smithy smog smooch smother smouch sms smudge smurf smush smut smutch snack snaffle snag snaggle snake snap snapshot snare snark snarl snatch sneak sneck sneer sneeze snib snick snicker sniff sniffle snigger snip snipe snirt snitch snivel snog snood snook snooker snoop snooze snore snorkel snort snout snow snowball snowblade snowboard snowdrop snowmobile snowplow snowshoe snuff snuffle snuggle soak soap soapbox soar soccer sock sod softsoap soil sojourn solace solder soldier soliloquy solvate somersault soogee sook soother sop sophisticate sorb sorrow sort sortie sot sough soundtrack soup source souse sow space spacewalk spackle spad spade spall spam span spancel spangle spank spar spark sparkle spasm spat spatchcock spawn spay spaz spazz speak spear spearfish spearhead spec speckle speed speedrun speedskate speel spell spellcheck spelt spend spew spider spiderweb spiel spiff spike spile spill spindle spire spirit spit spitball spitchcock spite splash splat splatter splice splint splinter splish splodge splotch splurge spoil spoils spoke sponge sponsor spoof spooge spook spool spoon spoor spore spork spot spotface spotlight spouse spout spraddle sprain sprawl spray spread sprig springboard springle sprinkle sprint spritz sprog sprout spud spume spunk spur spurn spurt spurtle sputter spy squabble squall squash squawk squeak squeal squee squeegee squeeze squelch squib squick squidge squiggle squinch squint squire squirm squirrel squirt squish squitter squizz squop squush ssh stab stack staddle staff stage stagger stain stake stalemate stalk stall stammer stamp stampede stanchion standby standoff staple star starburst stare start startle stash state statement station stave stay staycation stead steal steals steamroller steek steel steeple steer stell stem stencil stenograph step stereotype stet stevedore steven stevvon stew steward stick sticker stickybeak stifle stilt stim stimy stink stint stip stipple stir stirfry stitch stockade stockpile stodge stoke stole stomach stomp stonk stook stoop stoor stopper stopple store storm storyboard stot stove straddle strafe strain straitjacket strand strap streak stream streamline stress stretch stretcher stride strike strikethrough strip stripe striptease strobe stroke stroll strop structure struggle strum strut stub stucco study stuff stum stumble stump stunt stutter sty style stymie stymy subclass subclone subculture subgrant subgroup sublease sublet sublicense submeter subnet subpoena subsample subsign substitute subtitle subtotal subtype subvert subway succor succour suck sucker suffix sugar suicide suit suitcase suitor sulfate sulfonate sulk sulphate sulphur sum summer summit summons sump sun sunburn sunscald sunset suntan sup supercalender superclass supercoil supercruise superglue supersede supershift superstrate supertitle supertype supper supplement support surcease surcharge surf surface surfboard surfeit surge surmise surname surprise surrender surround surrounds surtitle survey sustain suture sux swab swag swage swagger swallow swamp swan swap swarm swash swat swathe sway swear sweat sweep swelter swig swill swim swindle swingle swipe swirl switch switchback swivel swizz swizzle swoon swoop swoosh swop swot syllable symbol symlink synapse sync synch syndicate syphon syringe sysop tab table tack tackle tag tail tailgate tailor taint take tale talk tallyho tamper tang tangle tango tank tap tape taper tapestry tar tare target tariff tarmac tarnish tarp taser task tassel taste tat tatter tatters tattle tattoo taunt taw tawn tax taxi tchick tea teabag team tear teargas tease teasel ted tee teen teetertotter telecast telecine teleconference telefax telegram telegraph telemonitor telephone teleprint telescope teletype telework telex tell telnet telpher temp temper tempest template tenant tenon tension tent tenter tenure term terp terrace tetch tether text texture thack thatch thaw therapy thew thimblerig think thirst thole thorn thort thou thought thrall thrash thread threap threepeat thrill throb throne throng throttle throw thrum thrust thrutch thud thumb thumbnail thumbshot thumbtack thump thunder thwack thwart tick ticket tide tie tier tiff tile tiller tilt time timeline timestamp timetable tincture tinge tingle tinker tinkle tinplate tint tip tipple tiptoe tire titer tithe title titre titter tittup titwank toady toast toboggan toe toenail toepoke tog toggle toil toilet toke toll tomahawk tomato tomb tombstone tomcat tone tong tongue tonsure tool toot toothbrush topline topspin topstitch torch torment torpedo torque torture toss tot tote totter touch tour touse tout tow towel tower toy trace track trademark traffic trail trailer train traipse tram trammel tramp trample trampoline transect transfer transfix transform transit transition translate transplant transport transpose trap trapeze trash travail travel traverse travesty trawl tray tread treadle treasure treat tree trek tremble tremor trench trend trepan trephine trespass tress triage tribotest trice trickle tricycle trifle trigger trike trill trindle triplicate triumph troat troll trolley trollop troop trope trot trouble trough troupe trouser trout trowel truckle trudge trump trumpet trundle truss trust trustee try tryst tub tube tuck tucker tuft tug tumble tump tune tunnel tup turf turn turtle tush tusk tussle tut tutor twaddle twang twat tweak tween tweet twerk twig twine twinge twink twinkle twirl twist twit twitch twitter twizzle twonk type typo ultracentrifuge umbrage umlaut ump umpire underbet underbid undercast undercoat undercut underdose underestimate underhang underhold underkeep underlay underlead underlook underorder underplant underplate underplay underrate underruff underscore underseal underset underspend understeer understock understudy underuse underwire underwork undress unfriend unicycle unknot unreason upbreak upchuck upcome update upfault upgrade upkeep upload uppercut uprate uprush upsend upsert upshift upstand upsurge upsweep upswell upthrow upthrust uptilt upturn upvalue upvote urge use usher vacation vacuum vagabond valet value valve vamp vang vanpool vapor vapour varnish vasal vaseline vat vault vaunt vector veel veer veil velcro velvet veneer vent venture verb verge vermicompost verse vest vet veto vial vibe vibrate victory victual vidcast viddy video videocast videoconference videotape view vignette vill vinegar vision visit vitriol vittles viva vocalise vodcast vogue voice volley volplane volunteer vom vomit voodoo vote vouch voucher vow voyage vurp wad waddle wade waffle waft wag wage wager waggle waggon wagon wail wain wainscot wait waitress waiver wake wakeboard wale walk wall waller wallop wallpaper waltz wamble wand wander wane wang wangle wank want wanter war warble ward wardrive warehouse wark warp warrant warranty wash wassail watch watchdog watchlist water waterboard waterfall waterflood watermark waterski wattle watusi wave waveguide waver waw wean wear weasel weather weatherstrip weave web webcast wedge weds weight welch weld welt wend wester wether wetnurse whack whale wham whap wheek wheel wheeze whelp whicker whid whiffle whig whimper whine whinge whinny whip whiplash whipsaw whipstitch whir whirl whirr whish whisk whisper whistle whitelist whitemail whitewash whittle whiz whizz whoop whoosh whop whore whorl whump wibble widow wig wiggle wigwag wiki wikipedia wildcraft wildfowl wile wilt wimble wimp wimple win wince winch wind windmill windproofs wine wink winnow winter winterfeed winterkill wipe wire wireframe wiretap wisecrack wit witch withers witness woad wobble wog wok wolf woman womble won wonder woodshed woof woos word wordsmith wore work workshop world worm worry worship woulder wound wow wrack wrangle wrap wreath wreck wrench wrestle wriggle wrinkle writhe wuffle wunner wuv wyte xenograft xeriscape xerox xor xylograph yabby yacht yack yak yakka yammer yandy yang yank yap yard yarm yarn yatter yaw yawl yawn yawp yeast yed yell yelm yelp yen yeuk yield yiff yip yodel yoik yoke yomp youtube yowl yoyo zag zap zed zest zig zinc zip zipper zizz zone zonk zoom zorb zot zouk 4340 N aal aar abdabs abdal abducens abettal abhal abraxas abuttal academicals acalephae acarminative accouterments accroides accrual accusal acephal acetable acetal achar achimenes acibenzolar acinaces acinetae acquittal acrocephaly acromegaly acrostic activewear acylal adeling adeps adidas admiral advergaming advertorial aedes aegilops aelotropic aeolotropic aequative aerobraking aerocolpos aeromechanic aeromodelling aerophilately aerotowing aerotrekking affixative afterburning aftercooling afterdeal afterings afterpotential afterpulsing afters agal agar agaric agogic agonistes agremens agrichemical agrochemical agueweed ailing airbed airconditioning airshed airspeed airwaves ajapsandal ajvar akonting akropolises alatae albicanal alcazar alegar alembic alexanders alkermes alkynal allenylphosphonates alleygating allheal alligatoring allobar allobarbital allodizing allografting alloparenting alloplastic allseed alluvials alms almsdeed almsgiving alphametic alphos altar ambages aminal aminodeoxysugar aminopropanal ammonal amobarbital amphiboly analects analloerotic analvos anamonic ananas anencephaly aneolithic aneurismatic angolar angries anhydrosugar animatic animelles aniseed anisophylly annal anomaly anopheles antbear antialiasing antialigning antianginal antiar antibunching anticommons anticounterfeiting antiderivative antidiagonal antifogmatic antifundamental antigropeloes antigropelos antiking antimacassar antimusic antinarrative anting antiphasing antiphonar antipodes antipruritic antisceptic antiscreening antistar anycasting apar apehangers apikoros appliable applicatorful appraisal apprisal approval apronful arachnodactyly arbelos arborvitae arcading archbishopric archcriminal archgrounds archrival arctophily argininal aries arisings arkful armful armorsmithing armoursmithing arousal arras arrear arrival arsenal arsenosugar arsinous arsoles artic artmaking ascar ascites ashing ashlar ashweed asperges assembly asterids astragal astrophilately atar atgar atheling athleticwear atlas atled attar attokatal aughts aulos auriculars aurochs autoblanking autoboxing autocephaly autochthones autoclitic autodial autodocking autogas autogating autoindexing autolearning automagic automaking automapping autonumbering autopartitioning autopoisoning autopositioning autoprocessing autorenewal autoreply autoscanning autoscattering autoscrolling autoshaping autotools aval avatar avens averral avgas avowal awning azasugar azidosugar azkal azygos babalaas babbelas babycakes babyproofing babywear backbenches backcrossing backloading backmasking backsies backstepping backswing backtesting badderlocks badders badfic badgemaking badlands bagful bagmaking bagpipes baldric balkar balletwear ballhandling ballocks balmoral balthazar bandpassing banns bantling barbering barbital barbitos barcoding barebacking bareboating barefooting barfly barful barkeeping barleymeal barnstar barrelful barristering barwalking barytes baseboarding baserunning basinful basketful basketweaving bathful bathos bathydemersal batwing bauks bayes bazaar beable beachcombing beachful beachgoing beachwear beakerful beakful beamforming beanmeal beanspilling beastings beatmatching beavering bedclothes bedful bedspring bedwetting beechdrops beehive beekeeping beermaking beestings beeswing begar beggarticks beheadal bejabbers bejeebers bellbottoms bellmaking bellringing bellyful belowstairs beltful benchmarketing bengal benthos benzobarbital bequeathal beremeal bestowal betrayal betrothal beylic bezoar bhuddas bialy biceps biclustering bicrystal biestings bifocals bigos bikeshed bikeshedding bikewear bilberrying bilboes billboarding billpaying billposting billy bindweed bing binocs binoculars binormal bioadhesive biobanking biobed bioceramic biochar biocomputing bioengineering biofabric biofouling biogas biogeneric biohacking bioimaging bioleaching biologicals biomanufacturing biomaterial biometal biomineral biomixing biomodelling biomonitoring biomusic bionanomaterial biopharmaceutical biopharming biopic bioplastic bioprinting bioprocessing bioprospecting biosensing biosignal biosimilar biotherapeutic biovar biped biradical birdcatching birdfeed birding birdkeeping birdling birdseed birdwatching birdwing bishopric bishopsweed bitstring bitterling bitters bitts bivocal blackberrying blackbirding blackfly blackfriar blanketweed blazar blessing blewits bling blinkenlights blockbusting blogoholic blogworking bloodletting bloodred bloodshed bloodshedding blowfly blueberrying bluecurls bluejeans blueshifting bluesnarfing bluestocking blundering blutchers boar boardsailing boardshorts boatbuilding boatful bocal bodybuilding bodyguarding bodyless boerewors boing bolivar bollocking bombmaking bonefishing bonemeal bongoes bookbinding bookful bookmaking bookselling boondocks boonies boosies bootmaking borating bordar boresighting borstal bosal bossnapping bossyboots bostal botfly bottlefly bottleful botts bouldering bowhunting bowlful bowstring boxcar boxful boxspring boyar boyloving boyshorts boyswear brachycephaly brachydactyly brae braies brainwashing brambling brandcasting brandling branks branmeal bratling breadmaking breadwinning breakables breakdancing breastful breeching breeks brekkers brending briar bribetaking bricklaying brickmaking brickworks bridalwear brinelling brinjal brisling bristols britches brittlestar broadwing broguing brolly bromal bromosugar bronzemaking bronzewing bronzeworking brushbar brushmaking bubkes bucketful buckjumping buckskins budgerigar bugbear bugleweed buildering bulerias bulgar bullbaiting bullfighting bullring bumsters bunburying bunkbed bunning buntal bupkes burglar burial bursar busbar bushing bushranging bushwalking businesswear busybodying butanal butenal butterfingers butyral bvds bwoys bygones cabal caballing cabbaling cabbeling cabbing cabdriving cabinetmaking cablecar cabrales cacoethes caddisfly caerphilly caesar cageling cahoots caic cajal cajones cakemaking calcar calends calipers callicarpenal callipers calvados cambric camcording camiknickers camming campanulids candlemaking candlemas candyflipping canful cannibal cantal cantar cantharides canuding canyoneering canyoning capful capias cappabar capperbar car caracal caramoussal caravanning carbophos cardiomegaly cardmaking cardplaying cardtable caregiving caretaking carful caricae caries carling carmaking carnassial carnitas carnival carotenal carousal carpal carpentering cartful cartonful cartophily carwashing caseful castanets castful castlebuilding castling casualwear catacaustic catchfly caterpillar catfighting cathar catharping cathedral catholicos cauldronful caviar cazic cedar ceiling cellpadding cellspacing celly centenar centennial centikatal centroiding ceramal ceras cereal cerevisiae chadar chaddar chaffweed chainring chairmaking chamar chamets champers chandlering changeling chantefable chantilly chaos chaparral chappal charas chazal chebs checkstring cheesemaking cheffing chemorepellent chemosignal chemovar chequing chervonets chesed chessboxing chestful chesticles chewings chicharrones chickenfeed chickling chickweed childbed childraising childrearing childrenswear chinar ching chinos chipmaking chipmusic chiromegaly chiropractic chital chitlins chitterlings chive chlamys chleuasmos chloral chlorethoxyfos chlorfenvinphos chlorosugar chlorpyrifos chocaholic chocoholic chokedar cholent choros chowkidar christmas chubes chuddar chuddies chulent chumar cicely cidermaking cigar cigarmaking cilly cinefilming circs circumambages cirriped citeable citral citronellal civies civils civitas civvies cks claes clamdiggers clarithmetic clas classloading classroomful clearcutting clearwing cleric clerkling cleverclogs clickjacking cling clinic clitic clockmaking closetful clothesmaking clothmaking cloudbusting cls clubwear cmos coachbuilding coachful coachwhipping coalbed coalheaving coaming coassembly coasteering cobbing cobblestoning cobinding cochineal coclustering cocrystal codebreaking codemaking codiverged codling codoping coffeehousing coffeemaking cognisances cognos cogwheeling cohousing coinflipping cojones coking collapsar collins colluvies collywobbles columbusing combings combjelly commissar commital communitas companding comptrolling concepting conferral confirmities confucianisms confusopoly congeries congratudolences conibear connegative constable construal containerful contradancing contragestive contrapositive contretemps contumely conveyancing coolibar cooly cootling copacking copal cophasing copolymerizes copperas copperbars coppersmithing copperworks copyediting cording cordovans corduroys cornflakes cornicular cornmeal corps corsetmaking corsive cortinar corydoras cosmaceutical cosmeceutical cosmos cotes cottaging cottar cottonseed cottonweed cotunneling cotunnelling cougar coumaphos counterappeal counterconditioning counterflashing counterinitiative counterkilling countermeeting counteroffensive counterprogramming counterproposal counterrally counterspying countertactic counterwar cous couscous covariable coveralls coving cowling coworking cowshed cracklins craic cranberrying cranefly crateful creamcups cred creekbed cremains crimebusting crimefighting cringeling critic crofting croplands crossbar crossbenches crossbones crossbracing crosscoupling crossfostering crowdfunding crowdsourcing crudites cruisewear cryocooling cryoelectroncs cryofocusing cryosampling cryosectioning cryotrapping cryovial cryptomaterial cryptoprocessing crystal csardas cts ctvhcs cudweed culottes cultivar cuntlicking cuntlips cupboardful cupful curlies cusping custumal cyberbanking cybercapital cybercheating cybercounseling cybercriminal cyberczar cyberdating cyberdetective cyberequivalent cyberflirting cybergambling cybergaming cyberissues cyberlearning cyberloafing cybermarketing cybermentoring cybernews cyberoperations cyberpal cybershopping cyberslacking cyberspying cybersquatting cyberstudies cybersurfing cyberteaching cybervandal cyberwar cyberwear cyberwedding cyclewear cyclops cymar cymbal cymbaling cynocephaly cysteinal cytomegaly czar czardas daal dactyly daffodowndilly daggering dagmar dahling dairying dal daled dalmatic damar dampproofing damselfly danceaholic dancemaking dancewear darbar daric datacasting daybed daylily daysailing daystar daywear dealloying dealmaking dealy deasphalting deathbed deathfic deathstar debiasing deblending deblurring debunching decakatal decal decasyllable dechanneling decikatal decisionmaking declawing declustering decompensated decrial dedal deeksies deferral definiens definitioneering defrayal degumming dehors dehubbing dehydriding delative delts demurral denar denial denims denimwear denoising deodar deoxysugar depairing dephasing depinning depointing deprival deschooling deshelving deshielding deshopping desiderative designerwear desolventizing despisal dessertspoonful detective determinans determinative dethreading detwinning deviless dewar dhal dhobying diabetes diadumenos dialectic diapositive diaromatic dichlorvos dickens dickweed dicrotophos diddly didemnaketal dideoxysugar diflunisal diking dillseed dimictic dinar ding dingaling dinnerwear diplegic dipperful diradical disapproval disassembly disavowal disbudding disbursal discowear discretionaries dishful dishwashing disincentive dismissal disobeyal disordering dispersal disposal dissavings dissyllable disyllable dithioacetal dithiohemiacetal dithioketal divewear divvers dobsonfly docklands dockworking dodecasyllable doeling dogballs dognapping doily doings doldrums dollar dollmaking dolos domaining dominos doos douar doughmaking downfolding downlighting downsampling downsizings downswing downwelling dragonfly drainings drawbar drawerful drawfiling drawgear drawspring drawstring dreadlocks dregs dressmaking drins dromos droppings dropseed droughting drugtaking drumbeating drumful druthers dryas dsms duar duckling duckweed duds dumpling dundrearies dungarees duniwassal dunking duopoly durbar duxelles dwarfling dyirbal dyking ear earful earing earlies earmuffs earnings earring earthling earthstar earwear easting eaves eburones ecliptic ecocritic ecodesigning econocar ecowar ectocommensal ectotympanic edgebanding editioning eelspear efaproxiral eggar egosurfing eic einherjar ejective elative elbowful elderberrying elding electroblotting electroceramic electrocoating electrofishing electroforming electroloading electropolishing electrorefining electrospinning electrospraying electrowetting electrowinning elevenses elevensies elotropic emotronic emptins enal encaustic enclitic encyclical endive endocannibal enhydros enquires enriched ensanguining ensembling entertailing entomophily entrails entremets eolotropic epanodos epiboly epizoodic equipartitioning erastes eric erlking eromenos eros errorbar erysipelas escargots eschar eschewal escolar espial espousal etaloning eteostic ethanal ethanoic ethic ethnomusic ethos eudicotyledons euouae eurodollar eurostar eutely eveningwear eventing everclear evildoing exakatal excretable excusal execs exemplar exergaming exocannibal exophthalmos explanans extrados extrudites exuviae eyas eyebar eyeful eyering eyewear fabids fabric faceful facesitting facetiae facies fackins factfinding factorial faeces fafrotskies faggoting fagmosexual fagoting fairyfly fal falderal fambly fancypants fanfic fanlisting fantasylands fanwear faravahar farthing fasces fasciating fatling fatliquoring faujdar fauxmosexual fauxtatoes fawnlily fbs feces feldspar fellwalking felspar femtoengineering femtokatal fenks ferrometal fetishwear fibreglassing fic fictionmaking fiftysomething filesharing filly filmgoing filmmaking filmstar financials finching fingerful fingerling fingerpointing fingerspelling finial finings finning firefighting firefly firehosing fireweed fireworks fishfinding fishfly fishkeeping fishmeal fishmongering fisking fistful fiveling fivestones fixings flamewar flanging flaskful flatcar flatlands flaunching flavouring flaxseed fledgeling fleming fleshfly fleshings flews flexecutive flexihours flexwing flightseeing fling flitterjigs flixweed floodwaters floorless floorplanning flowcharting flowerbed flowerfly fluorimaging fluorochemical fluorosugar fluorspar flyboarding flyfishing flyspecking flyting folar folksinging folly foobar foodaholic foodshed footbed footbinding footdragging footgear footing footprinting footwear footwriting forceps forebear foredeal foreking forewing forkful formalwear formfeed formfilling forslitting forthdeal fortunetelling fortysomething fosterling foundationwear foundling fracas fracing frameshifting framily freebanding freebirthing freediving freerunning freeskiing freethinking freewriting friar frogling frontrunning frugging fruitfly fryling fulmar fumblefingers funbags funboarding fundable fundholding fundraising furfural fustic futsal fynbos gable gadfly gaincoming gaingiving gainsharing gal galanas galangal galashiels galimatias galletting gallfly gallinaceous galluses gally galpal gamekeeping gar gardenful garlic gasfitting gasworks gathering gavial gaybar gaydar gaywings gazar gbs gcns geas geekwear genderbending genetive gengineering genitals geniting genomovar gens gentlefolks geocaching geoengineering geomaterial geophily geopotential geranial gerundive gharial ghazal ghostbusting ghosthunting ghosting gibbs giblets gigakatal gigapascal gigayear gimbal ginsing girlswear girlwatching girning giros gisaring glacading glaive glamping glanders glassblowing glassful glassmaking glasswashing glassworking glassworks gleed glenzing glimms gloaming gloated globemaking glossohyal gloveful glucal glycal glyceral glycinal glycopeptidomimetic glyoxal goal goalkeeping goalscoring goatling gobar gobful godling godmoding godsakes godspeed golddiggers goldenseal goldilocks goldsmithing gomeral goniolens gonys googlewhacking goolies gooseberrying goral gosling gossipmongering goutweed goyal grammar gramps grandmothering grantmaking grapeseed grasscutting gravastar graveclothes graverobbing graviscalar gravitas grayling greed greedyguts greenfeed greenfly greengrocing greenkeeping greenling greenskeeping greenweed gribenes gridding grolies grossular groundling grounds groundskeeping gruds grundies gts guar gubbins guestmeal guidwilly gujjar gully gummies gunkholing gunmetal gunrunning gunsmithing gurning gutful gwas haar habdabs habeas haemoderivative hagseed haircutting hairdressing hairpulling hairsplitting hairspring hairstyling hairwashing halfbreed halfling halfsies halmos haloaromatic halosugar halvans hamadryas hamal hamets hammal hammochrysos hammocking hamstring handcar handclapping handful handholding handlebar handspring handwashing handweaving handwringing hangar hanimal haras harddrive hardstanding harmal harmdoing harns harpings harras hartal hashbrowns hashtable hatchling hatelisting hatemongering hatful hatmaking hatred havable havildar hawaladar hawkweed haymaking hayseed hayshed hazing headcollar headgear headies headlighting headphones headquarters headshaking headspring headwaters headwear heapings heartcutting heartful heartstring heartstrings heavyhanded hectokatal hectopascal hed heelies heightening heliboarding heliskiing hellenismos hemiacetal hemiaminal hemiketal hemimegaloencephaly hemoderivative hempseed hendecasyllable hendiadys hepatomegaly hepatopancreas hepatosplenomegaly heptanal heresthetic heretic herpes herring heterophylly heteroradical heteroring heterostyly heuretic hexacoral hiccoughs hieroglyphed higgs highlands highlining hijinks hilding hillbilly hillclimbing hillwalking hindwing hiphuggers hippocras hireling hirsuties histogramming histostaining hobelar hobilar hocketing hodening hogweed holidaymaking hollands holliers holly holming holoprosencephaly hols homebuilding homebuying homecoming homemaking homeschooling homeshoring homesourcing homewares homeworking homewrecking homily hommos homocoupling homophily honeymaking hongweibing hoodening hornfels horsefeathers horsefly horseracing horseriding horseweed hosannahing hospital hospodar hosteling hostelling hostessing hotbed hotdesking hoteling hotelling hotlinking hotpants hots hotting hoummos hoummous houmous housebuilding housebuying housecar housefly houseful househunting housekeeping houselights housepainting housewares housewarming hoverboarding hovercar hoverfly huanglongbing huevos hundial hundred hurdies hurling hussar husting hustings hydriding hydroblading hydrocephaly hydrochronic hydrodewaxing hydroengineering hydrofining hydroforming hydrofracking hydrofracturing hydrometrocolpos hydropillar hydroprocessing hydrops hydroseeding hydroxymethylfurfural hylleraas hyperarousal hyperchaos hypercinnabar hypercritic hyperdactyly hyperdrive hypergraphic hyperlens hypermiling hyperscalar hyperspeed hypnobirthing hypospadias iceboating icemaking ichnofacies ichthys idear iftar iliopsoas illderly illogic imagemapping iminosugar immunoassaying immunoblotting immunocontraceptive immunoediting immunoimaging immunophenotyping immunostaining immunotyping impatiens imping inbetweening inbreaking incentive incunable inerting infeed inferencing inferognathal infighting infodemic infographic infoholic infomercial infommercial informercial infowar ing inholding iniencephaly injunctive inkling inning innkeeping inpainting inpouring inshoring instar instreaming interbeing interiorscaping interlining internals internegative interoceanic interposal interpositive interspersal interstacking intertrons interval intervising interwebs interworking intrados introverting invar investigable iodosugar ironmaking ironmongering ironsmithing ironweed ironworking ironworks irreconcileable islandful isobar isopycnal isoscalar isoscaling isoseismal iwar jacal jacamar jackpudding jacktar jacobs jaggies jaghirdar jaguar jamadar jameed jamjar jandal janitoring janjaweed jankers japanning jarful javascripting jeanswear jegging jeggings jellybelly jemadar jemidar jeos jetsetting jewelweed jharal jibbing jimjams jimsonweed jingal jobseeking jodhpurs jodies jogpants johannes jointing jointweed jonkmanskas joual jougs jubbly judas jugful juggins jumpseed kafal kahal kairos kajal kalends kamal kamees kantar karbovanets karting kashkaval katal kaval kecks ked keepalive kees keftedes kegful keks kermes kes ketal kettledrumming kettleful kettling kevlar keybinding keyboarding keylogging keymapping keypal keyring keytar khachkar khaddar khanjar khedive khimar khitmatgar khitmutgar khoums kickboxing kicksled kidswear kiladar kilobar kilocal kilokatal kilopascal kiloyear king kingmaking kirtankar kitchenful kiteboarding kitemaking kittening klackers klismos knapweed knar kneecapping knickerbockers knickers knicks knifemaking knitwear knotweed kobzar kogal kommos kotwal kouros kourotrophos kouskous kraal kriging krumping ksar kunjoos kunming kursaal kvas kymys labiovelar laborshed labourshed labrys lacemaking lacewing laches ladieswear ladyparts lagering lahar lakebed lambic lamiids lammas lampas lamping lancers lanczos landholding langar laniquidar lantibiotic lapwing lar largened largening largens larimar lascar latchstring latexwear latic lative lats launchings lawbreaking lawing lawmaking lawnmowing lawyering lazar lazybones leafcasting leafleteering leapling leathergoods leathermaking leatherwear leatherworking leatherworks leavings lebesgue_stieltjes legwear leisurewear lekvar lemming lennard_jones leptomeninges letteral leucinal leudes liar lias lidar lifecasting lifeguarding lifehacking lifestreaming lightbar lighting lightspeed lightyear lignicolous lineaging linebacking linefeed ling linseed lisencephaly lissencephaly listmaking listwashing litas lithal lithofacies lithops litotes litterboxes loadstar loblolly lobscows lockpicking lockring locksmithing locoweed lodestar lodging loggets logic logodaedaly logrolling lolly longboarding longhauling longjohns longlining lookalike lordling lorryful loukoumades loungewear loutrophoros loveling lovemaking lowriding lucas lues luggable lungful lupanar lustmaking lynching maar machosexual macrocephaly macrocracking macrodiagonal macrofamily macroing macromixing macroprogramming macropteres macroradical macroseeding madras madrigal maecenas mafficking magar magnetar mahal maimings mainspring maizemeal makar mal malling mallomar malternative malvertising mammal manas mandyas mangal manimal maniped mansplaining manyplies maoming mapmaking mapvertising marae marans marathoning marechal mareschal marketeering masdar mastic matchboarding materfamilias maths matins matric maxilliped mayfly maying mayweed measles meatpacking meatworks mebos mechanic mechanicals mechanosensing mecuricals medfly mediamaking medic medivacking medlar medmal meeting megabuilding megadeal megakatal megamusical megapascal megaportal megasiemens megastar megatrial megayear mehmandar menses menswear menubar menuing mephobarbital mereswines meroving merrymaking mescal mesoclitic mesonephros metacinnabar metagrammar metaheuristic metalens metalogic metalworking metamaterial metamodeling metamodelling metanarrative metaperspective metar metareasoning metastring metatable metathinking methamidophos methamphetamines methanal methohexital methylal methylglyoxal methylphenobarbital metic metical metrosexual mezcal microalloying microbar microbleed microbrewing microbunching microcar microcephaly microcharcoal microcomputing microcosmos microcrystal microdistilling microdrive microengineering microfabric microfinancing microforceps microinjecting microkatal microlearning microlending microlens microlensing microlidar micromachining micromanufacturing micromaterial micromineral micromixing micromosaic micropillar micropositioning microprinting microprocessing microquasar microremains microring microseed microseeding microsensing microstamping microtargeting microtear microtubing microwear midding middlings midmeeting midmorning midteens midyear migradollar milkbar milkweed milletmeal millful millibar milliequivalent millikatal millipascal millisiemens millworks mimbar minbar minesweeping mineworking ming minibar minicanal minicar minicomputing miniepic minifacial minifestival minimusical miniretrospective miniserial miniseries minispiral minisupercomputing minitrial miniwar mipmapping mips mirrorshades misandric misassembly misbidding mischmetal misconstrual misdeed miseryguts misfiling misgendering misgiving mishandling misincentive miskal mispriming missal missive misspeaking mistal mistrafficking mistral mistrial mithqal modacrylic mogas molding molly moly monal moneylending monial monkeywrenching monkies monocrotophos monocrystal monodactyly monoderivative monophyly monopoly monosyllable monotal monotasking monothioacetal monothiohemiacetal mons monthling moondial moongazing moonseed moonshining mores morgellons morning morningstar morphospecies morphotyping mosaicking motorboating motorcar moulding mountainboarding mountaineering mouthbrooding mouthful moval moviemaking msys mudsled mudslinging mudwrestling mugful mugging muggins mujahed mukhtar mulligrubs multibillions multibooting multibranding multibuffering multicasting multicrystal multihoming multilayering multipathing multipotential multiprocessing multisampling multiskilling multiskills multisourcing multithreading multitracking mumps munchies municycling mural music musicing mustanging muttonbirding muttonchops muttonheaded mylar mythmaking mythos nabal nachos nads nailbed nakharar namaskar namevoting nanobunching nanocable nanoceramic nanocoating nanocomputing nanocosmetic nanocrystal nanodielectric nanoengineering nanoequivalent nanofocusing nanoforging nanofractal nanokatal nanolensing nanomanufacturing nanomaterial nanometal nanomoulding nanopatterning nanopharmaceuticals nanopillar nanopositioning nanoprobing nanopublishing nanoring nanosiemens nanostring nanostructuring nanotweezers naos narcodollar nariyal narwhal nasheed nates natting navbar navier_stokes navigates naxarar nebuchadnezzar necessaries neckwear necrophily nectar ned needleful needleworking nekropolises nenuphar neoconservative nephromegaly nephros nephs nerdic netbeans netful nethers netminding netraising netroots neuromarketing neuticles neutraceutical news newsfeed newsweekly newton_cotes nibling nibral niding nightclothes nightdreaming nightgear nighthawking nightjar nightwear nilas nilradical nitpicking nitriding nitrofural nixtamal nomos nonagesimal nonally nonanal nonanalgesic nonantibiotic nonarousal nonarrival nonbeing nonbereaved nonbias nonbully noncannibal nonchaos noncompos noncritic nondiabetes nones nongas nonking nonliar nonmammal nonmeaning nonmetal nonnational nonplastic nonproposal nonrefusal nonrenewal nonreply nonscandal nonsceptic nonscholar nonsibling nonsked nonskeptic nonsports nonstar nonsugar nonsuperstar nontalent nonworkaholic nootropic nopal nopales northing nosebleed nosebleeding noseful noshoring notaphily notetaking nothospecies notifying noughties nous nowcasting nucleofecting nullisomic numbnuts numeral nuptials nursling nutraceutical nylons nymshifted nymshifting nymshifts oakling oarweed oathbreaking obsequies octavofinal octocoral octosyllable odds oddsmaking oersted offal officeholding offroading offscouring offspring ogive oilseed oilskins oleocanthal oleochemical oligohydramnios oligopoly olisbos olivegrowing omkar omphalos onboarding ontos oodles opal opisthenar opisthodomos ops opticals orbifolding orbital orcharding orcos ordeal organometal orienteering orling orofecal oscar osmosensing osteocartilaginous othering oughties ouroboros oustering outbreeding outbuilding outcoupling outcropping outerwear outlands outpouching outpouring outswing overbar overcooling overdelivering overdrive overhedging overhunting overling overlining overlogging overparenting overplanning overpotential oversocks overswing overthrowal overtrousers overyielding overzeal owling oxfords oxyradical oysterbed oysterling pachymeninges padkos pageful pailful paintmaking pairbreaking pairforming pajamas paladar palatovelar palmas palmreading pamphleteering pancreas pandal panegyric paneling panful panoply panpipes pansharpening pantalets pantalettes pantaloons paperhanging papermaking parable paracrystal parados paragraphos paralegal parallelepiped paramedic paramotoring paraoptometric paraphily paraphyly pararealgar parascending paratroops paregoric pargeting paries parseval parthanatos partywear pascal pasilaly passcodes passepied pastrymaking patas patchouly paterfamilias pathfinding pathic pathing pathos pathovar pathworking patternmaking pawful pawnbroking payables paytable peacebuilding peacekeeping peacemaking peacemongering peagrowing pear peating ped pedlar peds peening peierls pelike pemetrexed penates pencilmaking pendentive penmaking pennyroyal penpal pentadactyly pental penthos pentobarbital pentothal peplos peptidomimetic pergal perusal pes petakatal petal petrichloral petrodollar petroholic phal pharming phasetrafficking phelloplastic phenobarbital phenotyping philately philharmonic philippic pholas phosphoimaging phosphomimetic phosphorimaging photoaging photoblinking photoceramic photocoupling photocrosslinking photocuring photodarkening photofading photofinishing photoheating photoimaging photokilling photolabeling photolabelling photomosaic photomural photopatterning photoreversal photoswitching phototuning phototypesetting phragmites phrasemaking phytobezoar phytomining pibal pic pickerelweed picokatal picosiemens piemaking pigling pigopoly pigweed pilates pilliwinks ping pingas pinstriping pipeful piperonal pipesmoking piridosal pisces pissabed pisspants pitful placeshifting plagiocephaly plakous planeful planetesimal planimetric plateful platterful playgoing playmaking plaything playwear playwrighting playwriting pleuroperitoneal pling plowing pls plumbing pocahontas pocketful podagric podfading podslurping poes poffertjes pointling poitrinal pokedollar pokeweed polestar policlinic policyholding policymaking poltergeistic polyacetal polyclinic polycrystal polydactyly polyderivative polydrugs polyforming polyhydramnios polyking polyphyly polyradical polysyllable pondweed pons popcorning poplar poppyseed popstar pornstar portal porteous portrayal portugal postprocessing potables potbelly potful potholing pothos pothunting potjiekos potscaping pouchful poundal pous powerboating powerbroking powerlifting powersharing practic preapproval preassembly prebaiting prebuttal preclamping precleaning preclear precoding prediabetes predrinks preincubating preionizes premed premelting premetric premolar prenursing prephilately preplanetesimal preplanning preplating prepotential preschooling presulfiding pretargeting priar prilling primorial princeling printmaking printworks prizefighting prizzly proadjective proclitic proferens prokinetic promwear pronaos pronephros propanal propedeutic propenal propenoic prophases prophesied propheteering proposal proseminar proslambanomenos prosopagnosic protanomaly proteomimetic prothetely protomammal protostar prototyping protuberancies proxenos prybar pseudocereal pseudocoding pseudocoloring pseudocolouring pseudofaeces pseudofeces pseudoideal pseudointellectual pseudologic pseudomonas pseudopotential pseudoradical pseudoscalar pseudosibling pseudostuttering pseudotyping psoas psogos psychobilly psychopharmaceutical psyops psywar pubbing publands puckhandling puddening pudding pufferbelly pullikins pully pulsar pumpkinseed punding punies punkabilly punkling puppeteering pursestring pyjamas pyknic pyramiding pyridoxal pyrosequencing qadar qantar qawwal qindar qintar qiyas qlipothic qsar quadrans quadrantal quadric quadriceps quadriplegic quadrisyllable quadrivial quadruped quadruplexing quaily qual qualificative quantic quarterfinal quartzing quas quasar quasicrystal quasipolynomial quasispecies quasistar quetzal quilling quinquesyllable quintal quisling quiverful quotative raajmahal rabies racebending racecar racewear rackabones radiometal radiopharmaceutical radiopulsar radioscanning radiosounding radiotracking radiowaves ragweed railbed railcar railfanning railful railworks raines raingear rainmaking rainwear rakshas raltitrexed rangering rantings rapeseed rascal rastering ravewear raycasting raytracing realgar reappraisal reapproval reassembly rebar rebinding rebirthing rebrightening reburial rebuttal recessional rechipping recital recombineering recordkeeping recusal redbed redbelly redcedar redshifting redwing reed reedbed reeding refarming referral refreshaholic refusal refutal reggae regimentals registrar rehearsal reimbursal reinking relic relvar remittal remoting removal rendezvoused renditioning renewal repointing reposal repricing reprisal reproval republic requital rereading reredos rereferral res rescattering resequencing reshoring resilencing resourcing respacing ressaldar restauranteering restaurateuring restoral retable retiral retrial retrieval retrocomputing retrogaming retrosexual revers reversal reviewal revisal revival rewetting rezoning rhetoric rhinoceros rial ricemeal ricercar riches rickets ridesharing ridgeling ridgewalking ridgling riesling rillettes rims ring risped rissaldar riverbed rixdollar riyal rms roadbed roastnear robemaking rockabilly rockhounding rockstar rogering roguelike rollbar romanichal rompers rooibos rooigras roomful ropemaking rorqual rosemaling roundheels roundtable rtos rubberwear rubric ruching rugging rulebreaking ruminates rupes russies ryemeal sabal sabellic sackful saddlebred sads safebreaking safecracking safekeeping safranal saggar sahidic sahiwal saibling saic sailboarding sailboating sailmaking saintling sakkos sal salading salal salicional salmanazar saloonkeeping salopettes saltcellar saltmaking saltworks salubrinal salwar sambal sambar samovar sandal sandbar sandboarding sanderling sandfly sanguinivorous sanies sapiens sapling sarking saros sashichigal sassafras satchelful satcomms satcoms saucerful saunders sausagemaking sawbones sawfly scabies scaffolding scally scandal scandalmongering scanties scantling scaphocephaly sceptic sceptically schilling schizodactyly schmear schnapps scholar schooldays schoolteaching schoolwear scimitar scoopful scorekeeping scorpionfly scorpionweed scouting scoutmastering scratchings screencasting screenful screenreading screenwriting scripophily scriptwriting scrollbar sculpting scumming seabed seakeeping sealegs seamstressing seastar seaweed secateurs secobarbital sectoring seedbed seizings selfassembling selfassembly selfdual selfheal selfing selfquenching semiacetal semifinal semiketal semimetal seminar semiochemical semiring semirural semisyllable semitutorial sendal seneschal sepal sequellae serdar series seronegative serovar serval setar sevenless seventysomething sewadar sewering sexaholic sexdactyly sferic shabbos shadowboxing shadowcasting shaheed shalwar shamal shammes shampers shants shaobing shapewear sharwal shaveling sheading shealing shearling sheeling sheepherding sheepshearing sheerlegs sheetful sheeting shegging sherryvallies shieling shikar shillyshallying shipbroking shipbuilding shipful shirting shirtmaking shive shockvertising shoegear shoelacing shoemaking shoestring shoewear shofar shoofly shopaholic shopful shopkeeping shoreweed shoring shortalls shortcoming shortfalling shortribs shotmaking shovelful showjumping shreddies sial sibling siccative sickbed sidebar sideburns sidecar siemens sieveful signboarding signwriting silkwear silverling silversmithing silverweed simar sing sinkerballing sirdar sirkar sisal sitar sizar sked skeevies skeezicks skeiling skelly skeptic skibobbing skimboarding skinful skinnymalinks skiwear skopos skraeling skully skunkweed skunkworks skurfing skyfarming skyful skysurfing skywriting slacklining slapsies sleepdriving sleepwear sleevenotes sleighful sling sliotar slippering slivovic slugabed slurring slyboots smackeroonies smallclothes smallgoods smallholding smalls smartweed smartypants smellies smirting smithing smores snakefly snakeling snakeweed snappily sneakers sneezeweed snookums snootful snowbear snowbilly snowmaking snowmobiling snowshed snuggums soapmaking soapstar sobersides sociative sockful socred sofabed sofar softlifting solebar solubles sombrely sonar songfic songwriting soothsaying sordes sorites sortes sos soukous soundalike soundbar soundpainting soupspoonful sourbelly southing sowar sowbelly spacebar spacegoing spacelegs spaceling spacewear spadeful spalting spamdexing spankies sparable sparagmos sparsening sparsing spearfishing spearphishing species spectatoring speechmaking speechreading speechwriting speedboarding speedboating speedskating speedsolving spelling speltmeal spendaholic speos sphereing sphering sphugmicks spic spinar sping spiroacetal spiroketal spittal spitted spivias splenomegaly spoligotyping spondulic spondulicks spoonbending spoonful sportscar sportscasting sportswear sportswriting spreadsheeting spring springhaas spriting squarial squegging stadial staffing stageful stagewear stakebuilding stakeholding standardbred stapes starling starveling stationkeeping stats steamfitting steelmaking steelworking steelworks steeplechasing stepfamily stepparenting stepsibling stereometamaterial sterndrive sternsheets stickfighting stickweed stieltjes stillsons sting stinkweed stipes stirling stockbroking stockfeed stockholding stockingful stockjobbing stocktaking stolly stomachful stonefly stooly stoozing stoping storekeeping storytelling stovies streambed streetcar streetfighting streetful streetlighting streetwalking streetwear streptomyces strewing string sts studentizing studentships stymphalides subadar subassembly subceiling subcooling subcycling subderivative subdual subedar subfamily subflooring subgoal subheading subinterval sublative sublogic submittal subring subsampling subspecies substring subtable subtelomeric subtopic subvertising suffers sugarally sugarholic sugarolly sugging suitcaseful sukkos sulfiding sulfonal suling sulphonal summerful summerwear sunbed sundae sundial sundowning sundrops sungazing sunglasses sunseed superarrival superbeing supercar superclimbing supercoiling supercollapsar supercomputing supercriminal superdetective superembedding superessive superfactorial superfamily superfatting superficies superfly superglobal superharmonic superhumeral superhumping superlens supermusical superpositioning superpotential supersedeas superspecies superspinar superstitial superstring supertonic supervisal superweed surbahar surfriding surrebuttal surreply surroyal survival suspenders swanling swapsies swaybar sweatpants sweethearting sweetling sweetlips swillking swimwear swing swishing switchgear swordmaking swordsmithing symboled symboling symbolled symbolling symbrachydactyly syndactyly syndic syngas synophrys tabes tableful tablespoonful tableting tabletting tacops takable talebearing talent talipes tallevas talonas talukdar taluqdar tamal tankful tanling tapas tapesponding taring tariquidar tartar tarweed tas taskbar tasselseed tatar tavernkeeping tbs tchervonets tcs tdrs teacupful teamaking teambuilding teaspoonful technocritic technofear technomusic technopoly teddybear teddybears tehsildar teinds telebanking telecomputing telegaming teleheating telemarketing telementoring telepersonals telepresencing teleprinting teleprocessing teleprogramming telesales teleseminar teleshopping teletutoring telly temefos temenos temephos templar tennies tentful tepal terakatal teras tercentennial tertial testbed testimonial tetraarsenic tetraplegic tetrasyllable texas textaholic thanadar thanatos thanksgiving theatergoing thenar thermocycling thermohardening thermophily thermoprinting thermos thial thickening thimbleful thimerosal thing thining thinnings thioacetal thiohemiacetal thiohemiketal thioketal thiomersal thiopental thneed tholos thomas thornproofs threadjacking thresholding thrifting thrips throughgoing thrushling thugging thunking thymos tic ticketing tiddlywinks tiding tidytips tightlacing tights tilemaking tilly timar timbal timbering timekeeping timeserving timesharing timeshifting tinful ting tinsmithing tiswas titanides toastmastering toches toeprinting togemans toileting tokhes tolar tolerancing tollbar tomling toolbar toolmaking toolshed toolsmithing toothypegs topic topos torchmaking tournedos towbar townful townwear toxophily toxotes toymaking tracing trackbar trackbed tracklisting tradewinds trailerful trainful trainspotting tramcar transexual transferal transferral transfugitive transhistorical transmittal trapshooting traversal trayful treadmilling treadwear treatymaking treemapping treggings trendspotting trevally trews tribar tribbing tribunal triceps triceratops trichobezoar trichording tridactyly triens triflic trifluoroacetic trifocals trimmings trional trioval tripos triradical trisyllable trocar troosers troublemaking troupial trousers troutling trowelful truckbed trucking truckmaking truffling truing trunkful trunking trupial trustbusting truthmaking truthtelling tryscoring tsar tsimmes tsores tubful tuches tulwar tumblerful tunesmithing tunic tureenful turmeric turntable turps tweed tweens tweezers twentysomething twilling twining twinling twosies twothirds tymbal tympanites typebar typosquatting tzar tzimmes uae uglies ultradiscretizing ultramarathoning ultraradical underbar underbelly underbuilding underclothes underclothing undercrackers underdrawers underdrawing underfilling underhedging underling undermatching underoos underpainting underpants underpotential underpredicting undersampling undershorts understairs understanding underthing undertrial underwear underwebbing underwing undies unicasting uniped unmakable unmentionables unnecessaries unranking unsatisfiable unschooling unsoiling upas upbringing upheaping upheaval uproar uprootal upscattering upskirting upspring upswimming upswing upwelling urial urinal urnful utas valeral valuables vanful vanitas varchar varifocals vas vaseful vates vaultful veal vectorpotential veepstakes vegies veining ventriculomegaly verballing veritas veronal versal versemaking versioning vertexing ves vespers vetchling viaticals vicar vidding videodating videogaming videomaking videorecording viewsers viewshed viking vinbarbital vintenar violinmaking virial vishing vitals voguing volatiles vortal vortexing vraic vrykolakas vsic vtable vysar wabs wadding wadmal wagonful wainscoting waisting wakeboarding walkies wallcovering wallcrossing wallhacking wally warblefly wardriving warehouseful warfighting wargaming warlording warning warragal warrigal wartweed warwalking watchkeeping watchmaking watchstanding waterbed waterboarding waterlily watershed waterskiing waterweed waterworks wattleseed wattling wavetable waxwing waxworking wayfinding waymarking weal weanling weaponsmithing weatherboarding weatherstripping webbing webcomic webfeed webinar weblogging webring websquatting weightlifting wellbeing wellderly wellies wellspring welly wels werebear westing wheal wheatear wheatmeal wherewithal whimperative whing whipmaking whiskering whistleblowing whiteboarding whitecedar whitefly whitegoods whitening whiteprinting whitesmithing whitewing whiting whitling whoremongering wicketkeeping wikiholic wiking wildcarding wildling willy windfarming windowful windowing windowmaking windpants windspeed winebar wineglassful winegrowing winemaking winetasting wing wingding winkers winnings wintersports winterwear wiremaking wirewalking wireweed witblits witchweed withdrawal witherling witling wolfling womenfolks womenswear woodcarving woodchipping woodcutting woodshaving woodturning woodworking woolens woolgathering woollens woolshed wordbuilding wordprocessing workalike worktable workwear worldbuilding worldling wormseed worryguts worrylines wors wrongdoing wurly xenophanes xenygloxal xiphias xyloketal yaar yachtful yardful yeanling year yearful yearling yellowbelly yellowlegs yellowshanks yestermorning yesteryear yngling yoctokatal yogalates yonks yottakatal ysterbos zaatar zaildar zamindar zeal zemindar zenzizenzic zenzizenzizenzic zing ziplining zoar zoografting zookeeping zoophily zoophorous zorbing zosuquidar zygodactylae zzzs 1 OPV times 5 ORV blazes forwards needs tops winters 10 OR balls days een fridays lots mondays nights noons probs summers 3501 OV aahs abandons abates abends abjects ablegates abodes abords aborts abrupts abscesses abseils abstracts abuses accents accessions acclaims accolades accompts accords accounts accreases acronyms acrospires actions acts acupunctures addicts addresses adds adducts adlibs advances advantages adventures adverts advocates adzes affects affixes affrays affrights affronts ages aggregates aids ails aims airbrushes airdrops airlifts airs ajars alerts aliens aliments allies alloys alternates ambles ambuscades ambushes amels amens amounts anagrams analyses anastomoses anchors anchours angles anguishes annexes annoys anticrosses antics appeals appends applauds appliques apprentices approaches arbitrages arches archetypes archives arcs arms arses assarts assaults assays assegais assents assfucks assieges assigns assists associates asterisks attacks attempts attributes auctions auditions audits augers augurs authors autocancels autoclaves autographs automobiles avails avalanches avaunts awaits baas babbitts babies backbites backchannels backchats backcrosses backfills backfires backflushes backgrounds backhands backheels backpacks backs backscatters backspaces backstitches backstops backstrokes backwaters badgers badges bags baits balances balloons ballots ballparks ballyhoos bams bandages bandishes bands banes bangs bankrolls banks banquets barbecues barbers barbs barges barks barneys barracks barrels barricades bars barters bases bashes baskets bassoons bastinadoes batches baths batiks batters battles baulks bays beaches beacons beagles beaks beams beans beards bears beatboxes beats beds beelines beeps beetles beggars begs belays belches bellies bellows bellyaches benches benchmarks bends benefits berms berries berths besoms bests betas bets betters bevels bevers biases biasses bicycles bids bields biffs biggers bikes bilges billets billows bills bimbles binds binges bins biopsies birches birdies bisects bitches bitchslaps bites bivouacs blabbers blackballs blackboards blackjacks blamestorms blankets blanks blares blasphemes blasts blazons bleaches bleeps blegs blemishes blends blidgets blimps blindfolds blinds blinkers blips bloats blockades blocks blogs bloods blooms blossoms blotches blots blows blowtorches bludgeons blueprints blues bluescreens bluewashes bluffs blunders blurs blushes blusters boards boasts bobbles bobs bobsleds bobtails bodes bodyboards bodychecks bogarts bogeys bogs boils boldfaces bollocks bolsters bolts bombards bombs bonds bones bongs bonks boogies bookends bookmarks books boomerangs booms boos boosts bootjacks boots bops borders bores borgs borns borrows bosses botches bothers bottlenecks bottles bottoms bounds bowls bows boxes boycotts braais brackets braids brails brainstorms brakes branches brandies brands brangles braves brawls breaches breads breakdances breakfasts breaks breasts breaststrokes breedes breeds breezes brews brickfilms bridesmaids bridges bridles briefs brigues bristles broaches broadcasts broadsides brobs brocades brocks broils brokers bronzes broods brooks brooms brownnoses browns bruises brunches brushes bubbles buccans buckles buddies buddles budgets buds buffaloes buffers buffs buggers bugles bugs bulks bullies bulwarks bumbles bumps bunches bundles bungles bungs bunks bunts buoys burdens burls burns burps burrows bursts buses busks busses bustles busts butchers buttfucks buttons buttresses butts buys buzzes bypasses cables cackles caddies cadences cadges cakes calcimines calendars calenders calks calls calluses calms calves camos camouflages campaigns camps campuses canaries cancels candies canes cankers cannonballs cannons canoes cans canters cants canvases canvasses caparisons capers caps captains captures caravans careers cares caresses caroms carpets carpools carps carries cartoons cartwheels cascades caseates cases cashiers casts catalogs catalyses catcalls catches caters catnaps cats caucuses causes cautions caves caws censors censours centerpunches centers centres cesses chains chairs challenges chambers chamfers champions chances changes channels chants chaperones chaperons chaps charges charioteers charks charms charts chats chaunts chaws cheats checkers checkmates checks cheddars cheeps cheers cheeses chevrons chews chibs chicanes chickens chills chimes chinks chins chirps chirrs chisels chits chivies chivs chivvies chocks chomps chops chores chortles choruses chronicles chucks chuffs chugs chums chunks churns cinches cinctures circles circumfixes cites citrates claims clamors clamours clamps clangors clangours clangs clanks clashes classes clatters clauses claws clays cleans cleats clems clerks clicks climaxes clings clinks clips cloaks clobbers clocks clogs cloisters clomps clonks clops closets clots clouds clowns clubs cludges clues clunks clutches coaches coals coauthors cobbles cockblocks cockles cocks cockteases cocoons cocultures coffins cohosts coiffes coifs coils coins collages collapses collars collects collies colors colours combats combines comforts commands comments commissions compacts companies complements composites compounds compresses compromises concaves concentrates concerns concertinas conches concords conditions conducts confects conferences confixes conflicts congas conjectures conjugates conks conquests cons conscripts consents conserves consoles consorts constructs consults contacts contents contests contracts controls converts convicts convoys cooks coops coordinates copays copes copies cops copypastas copyrights coquets cores corks corkscrews corners corpses corrals corsets cosies cosponsors costars costs costumes couches coughs counsels counterattacks counterbids counterchecks countermarches counterpickets counterpoints counterpoises counterpressures counterpunches counters countersigns countersinks counterstains counts couples couriers courses courts covenants cows coys cozies crabs crackles cracks crafts cramps cranes cranks craps crashes craters crates cravens crawls creaks creams creases credits creeps creosotes crescendoes crests cries cringes crinkles crisscrosses croaks crochets cromes crooks crops crosschecks crossclaims crosses crossfades crossgrades crosshatches crosslinks crossposts crossruffs crouches croups crowbars crowds crowns crows crumbles crunches crusades crushes cubes cuckolds cuddles cudgels cues cultures curds cures curls currycombs curses curtains curtseys curtsies curves cushions cuts cyberbullies dabs dadoes dallies damns dams dances dapples daps dares dashes dates daubs dawns dazes deaccessions deadheads deadlifts deadlinks deadlocks deals debauches debits debouches debuts decks declines decons decontrols deconverts decreases decrees decrescendos decyphers deeds defaults defeats defects defies defiles degenerates dekes delayers delays deletes delights delipidates deluges demagogues demands demises denizens dents deposits dequeues descants designates designs desires desks desolvates despatches details detours detoxes deviates diadems diagnoses diagrams dials diamonds diapers dibbles dices dicks dictates dies diets diffs digests digs dimensions dings dinks dins diplomates dips dirks disadvantages discharges disciplines discomforts discords disfavours dishes disillusions dislikes dismounts disorders dispatches displays dispositions disputes dissents disses distances districts ditches dive dives divorces divvies djs dockets docks doctors documents dodges dogears dogfights dogfoods doglegs dogpiles dogs donks dons doodles doorbells dopes doses dotes doublecrosses doubles doubts douches dovetails dowers downgrades downlinks downloads downs dowses dozes drafts dragoons drags drains drapes drawls draws dreams dredges dresses drfs dribbles dries driftnets drifts drills drinks drives drools dropkicks drops drugs drums dubs dumps dungs dunkers dunks duns dusts dwarfs eagles ears earwigs eavesdrops ebbs echoes eclipses edges edits eeps effects eggs egocasts elbows electrophoreses electroplates embargoes embraces empties enamels encores encounters endeavors endeavours ends enfilades engineers ensamples entails entrances entreats enucleates envies epoxies equals errands errors escheats escorts escrows espaliers essays ethoxylates evens evidences excerpts excommunicates excuses exegetes exempts exercises exes exfiltrates exhausts exhibits exits expenses experiments exploits exposes expresses extracts eyeballs eyes fabs facebooks facelifts faceplants faces facets factors fades fadges fallows falls fancies fans farms farrows farts fashes fasts fates fathers fathoms fatigues favors favours fawns faxes fears featherbeds features feddles feedbacks feedforwards feeds feels feints fells fences ferments ferrets ferries festoons fetes fets fetters fettles fiddles fidgets fields figgers fights figures files filetypes filibusters filigrees fillets fills films filters finances fines fingerpaints fingerpicks fingerprints fingers finishes finks firebombs fires firewalks firks firms fishes fishtails fissures fistfights fists fits fixes fizzes flabbergasts flacks flails flambees flambes flames flaps flares flashes flatters flavours fleets fletches flexes flickers flies flings flints flipflops flips flirts flites flits floats flocks floodlights floors flops flosses flourishes flowers flows fluffs flumps flurries flushes flutters flyers focuses fogs folds fools footnotes footslogs forays forbears forces foregrounds forelooks foreminds foreshows forests forfeits forks formats forms fortunes fosters fouls founders fountains fowls foxhunts foxtrots fractures fragments frags frails frames franks frays freaks freecycles freerolls frees freezes frets fricassees fridges fries frigs fringes frisbees fritters frobs frogmarches frogs fronts frowns frowsts fruits fucks fudges fuels fulminates fumes functions funds funnels furloughs furrows fuses fusillades fusses fuzes gads gaffs gaggles gags gains gallops gambles games gams gangbangs gangs gaols gaps garages gardens garlands garners garnishes gasconades gases gashes gasps gasses gates gathers gavels gears gees gelds genders genotypes geranylates gerbils gerrymanders gestures getters gheraos ghosts giggles gigs gillnets gimlets gimmicks gimps gins girdles girds girts glances glazes gleams glimmers glimpses glitches gloats gloops glories glouts glozes glutches gluts glycates gnarls gnars goads gobs gods goldbricks gongs googles googolplexes goos gooses gores gorges gossips gouges gowns grabs graces grades graduates grandfathers grandstands graphs grapples grasps grasses graylists grays greeks greens greylists griddles grids grieves grifts grills grimaces grinds gripes grips grits grizzles groans grooms grooves gropes grosses grouches groups grubs grumbles grunts guarantees guaranties guerdons guesses guffaws guggles guides guillotines gulches gulls gulps gummers guns gurns gushes gusts guts gutters habits hackneys hacks hacksaws hades haemorrhages hafts hallows halos halters halts halves hammers hampers hances handcrafts handcuffs handles hands haplotypes haps harangues harbours hares harms harnasses harnesses harpoons harrows harrumphs harumphs harvests hatches hates haunts havers hawks haws haxors hays hazards hazops headbutts heads heaps hearses hearts heaves hedges heeds hefts heists heliographs helps hemstitches heralds herds hexes hiccups hides highjacks highlights hijacks hikes hilites hinges hinnies hints hisses hitches hits hives hoards hoaxes hobbles hocks hoes hogs hokes holes holidays hollows holsters holystones homebrews homes hones honeycombs honks honours hoods hoofs hooks hoops hoorays hoots hoovers hopes hops horses horseshoes horsewhips hoses hosts hotdogs hothouses houghs hounds housemaids houses hoys hucksters hucs huddles huffs hugs hulls humbugs humours humps hums hunches hungers hunkers hunts hurdles hurries husbands husks hydrates hydrolyses hymns hyperlinks icqs images imagines impacts implants implements imports impresses imprints inboards inches inconveniences increases incrosses incuses indents indexes inebriates infills influences initiates inlays inputs inserts instances institutes insults intakes intercepts intercrosses interdicts interests interfixes interlocks intermixes interrupts interviews interwikis intimates intrigues inventories inverses inverts invites involutes irons isolates issues itches jackals jackets jackhammers jacuzzies jacuzzis jades jags jailbreaks jails jamboks jams japes jarks jars jaunts jawbones jazzes jeers jellies jerks jesses jests jets jetskis jettisons jigs jilts jimmies jinks jitters jives jockeys jogs joins jollies jolts joneses jostles journals journeys joyrides joys juggles jugs jumbles jumps jumpstarts junkets junks jupes justs juts kalsomines karyotypes kayoes kazoos keeks keels keens keeps kens kerns keyboards keys kibbles kicks kickstarts kids kills kilns kinks kipes kips kisses kists kludges knackers knacks knags knapsacks knees knells knifes knocks knolls knots knouts knuckles knurls kotows kvetches labels labors labours laces lacks ladles laffs lakes lames lams lances landfills landmarks lands landscapes lappers laps lapses larfs larps lashes lasts latches laterals lathes lauds laughs launches launders lawyers layers lays leaches leads leafs leagues leaks leashes leavens leaves lectures leeches leers lefts legs lesions lets letters levants levels levers levies libels librates licences licenses licks lifts lights likes lilts limbers limewashes limits limps lines links liquours lisps lists lithographs litters liveblogs liveries lives loafs loansharks lobsters lockpicks locks lodges lofts logs longs looks looms loops lopes lops lords lounges louses louts loves lowballs lows luffs lugs lulls lunches lunges lurches lushes luvs luvz macerates maces machetes machines mackles maeanders mails malfunctions mambos mammocks mandates maneuvers manicures manifestos manifests manoeuvers manoeuvres mans manscapes manufactures maps marbles marches marcots marinades markers marks marmites maroons marshals marvels marvers masks masquerades masses masterminds matches matters mauls maunches mawns meanders means measures medals medevacs medivacs meets megaphones memorates memos menaces mends mentors meows merges merits meshes messages messengers messes metablogs metals metamorphoses metaphrases meters metes methylates metres mew miaous miaows microblogs microcracks microfilms micropatterns microphones microwaves midwives miffs mikes milks mills mimeographs mimes mimics minces mindfucks minds mines minimaxes ministers mints mirrors mirrours mirvs misconducts misconnects miscopies miscues misdeals misfires misfits mishits miskicks mismatches misnomers misprints misrhymes misses missions missorts mistakes mistells misthrows mists misuses mithers mixes moans mobs mocks models moils molders molts moments mongers monitors monkeys monograms monologs monologues moons moors moos moots mops morphs mortars mortgages mortices mortises motions motorbikes motorcycles motors moulds mounds mountebanks mounts mouses mousetraps mousses mouths mows muddles muffles muffs mulches mulcts mules mulls multiplexes munches murmurs murthers muscles muses mushes musters mutinies mutters muzzles myspaces names nanoimprints naps narcs narks narrowcasts natters neaps necks necromances necroses needles neighbors neighbours neighs nerves nests nets neuroimages neuters newspapers nibbles nicks niggles nightclubs nips noises noodges noodles nopes nosedives noshes notches notices noughts nourishes nudzhes nukes nulls numbers nursemaids nurses nutmegs oars objects octavates offers offloads offprints oils oinks oks omens oozes opens opiates options orbits orders orgasms ornaments orphans osmoses outcrosses outlaws outlines outpours outrages outreaches outrides outthrusts overbets overburdens overcalls overdoses overdubs overfalls overflows overhangs overhauls overholds overloads overmatches overnights overorders overpasses overprints overreaches overrides overruffs oversamples oversteers overstocks oversupplies overswings overvotes oxidates ozonates paces packages packets packs paddles paddocks padlocks pads pages pains paintballs paints pairs pales palimpsests palls palms pals palsies pandars panders pandies pangs panics pantomimes papers paps parades paralyses paraphrases parasails parcels pardons parents parks parlays parodies parries parrots parties partitions parts pashes passages passes pastes pastours pasts pastures patches patents pauses pawns peaches peaks peals pearls pebbles pecks pedals peels peeps peers pees peeves pegs peises pellets pens pensions people peoples peps perches percolates perfumes periphrases perks permabans permablocks permits perms peroxides perpends perverts pervs pestles peters pets phials philanders phones photocopies photographs photolyses phrases phreaks picaroons pickaxes pickets pickles picks picnics pictures piddles pieces pies pigeonholes pigments pikeys pillories pills pimps pinches pincushions pines pinfolds pings pinions pinnacles pinpoints pins pinwheels pioneers pipes pirouettes pitches pitters placards places plagues plaits planes plans plants plasters playfights pleasures pleats plies plights plinks plonks plops plots plows plugs plumbs plummets plums pms pockets podcasts podreels points poisons pokes polishes polkas polls polygraphs pomades pommels pongs poniards pookas poops poos pootles pops pores porpoises portages porters portscans positions posits possets postcodes postfixes postmarks posts postulates pots pouches pounds pouts powders powerpoints powers practices praecipitates praedicates praefaces praejudices praeludes praeserves praises prances prangs pranks prates prawns precasts precultures predates predeceases predicates prefaces prefilters prefixes preforms preleases premieres premiers prepositions preprints preps prereads presages preseeds presents preserves presoaks pretties previews previsions prewashes prices prickles pricks prides primes prints prisons privateers privileges probates probes processes processions prods proffers profits programs projects prolapses promises prompts proportions propositions props prospects protests provisions prunes prusiks puckers puddles pukes pules pulls pulps pumps punches punctures punks puns punts purchases purees purls purposes purrs pushes putters putties putts puzzles pyrographs pyrolyses quacks quadruplicates quaeries quaffs quails quarrels quarterbacks quats quavers queefs queens queers quells queries questions quests queues quicksorts quiets quilts quintuplicates quips quires quirts quivers quizzes quotes rabbets races racketeers radges radios raffles rafts rags raids raiks railbanks railroads rains rakes rambles ramps ramraids ramrods rams ranges ranks rants rapes rappels raps raptures rasps rataplans ratholes ratoons rats rattles ravages raves reaches reams reanalyses rears reasons reattempts reaudits rebates rebels reboots rebounds rebrands rebuffers rebuffs rebuys recalls recanvasses recaps recaptures recces receipts recesses recharters rechecks recoats reconnoiters recoopers records recounts recrosses recruits redds redesigns redirects rediscounts redlines redrafts redresses redubs reducts reechos reefs reencounters references refills reforms refrains refunds refurbs regards regens regifts regiments registers regrafts regrets rehabs rehashes reheats reigns reimports reins reissues rejects relays releases relents relishes remainders remakes remarks rematches remedies remises remortgages remounts removes rencounters renders renditions rents reoffers repairs repartees repartitions repasts repeals repeats replevins replies reports reprieves reprimands reprints reproaches reprobates repulses requisitions reraises rescues researches resets reshoots reshuffles resists resorts respects respites responds resprays restarts restrikes rests resumes resyncs retakes retards retcons retests retorts retouches retreads retreats retries retrofits reverses reverts reviews revises revisits revolts rewards rewrites rhymes ribbits ribs rices ricks ricochets riddles rides riffles riffs rifles rifts rigs rimes rings riots ripples rips ripsaws risks rivals rivers rives rivets rmgroups roadblocks roars roasts rocks rollerblades rolls romances romps roofs rooks rooms roops roostertails roosts ropes roquets rorts roses rosins rosters rots roughs rounds roups rouses routers routes routs rows rubs rues ruffles ruins rules rumbas rumbles rumormongers runs ruptures rustles rvs sacks sacres sacrifices saddles safeguards sails saints salaams sallies salts sambas samples sanctions sandpapers sands sandwiches sarcles sarses sauces saunters saves savors savours scags scales scalps scamps scans scapegoats scapes scarfs scars schemes schmoozes schools schusses sclates scoffs sconces scoops scooters scoots scopes scorches scores scotches scourges scouts scowls scows scrambles scrapbooks scrapes scraps scratches scrawls screams screeches screeds screens screeves screws scribbles scrimmages scrimps scripts scrobbles scrolls scruffles scrummages scrunts scruples scrutineers scuffles scunners scuppers scuttles seals seams searches seasons seats seconds secretaries secrets sections seeps sees segfaults seines selects sells semiquotes senses sentences separates septimates sequences serves sets sexes sexts shacks shades shadowboxes shadows shafts shakes shales shampoos shanks shapes shards shares sharps shaves shears sheds sheers shells shelves shepherds sherpas shews shields shies shifts shills shimmers shims shins ships shites shits shivs shoals shocks shoehorns shoots shops shores shotguns shoulders shouts shovelbums shoves showboats showcases showers shrieks shrieves shrouds shucks shudders shuffles shunts shuts shuttlecocks shylocks sidearms sides sidesteps sideswipes sidles sieves sighs sights signals signs sikes silences silhouettes silkscreens simpers simples simulcasts singes sings sinks sins siphons sires sits sizzles skanks skateboards skates sketches skewers skids skies skins skips skirmishes skirts skives skunks skylarks slacks slags slanders slants slaps slashes slates slathers slats slavers sleds sleeps sleighs sleuths slices slights slimes slings slips slipstreams slits slivers sloganeers slopes slots slouches sloughs slowplays slubbers slubs slugs slumbers slums slurps slurries slurs sluts smacks smarms smashes smells smelts smiles smirks smokes smooches smoothes smooths smothers smouches smses smurfs smutches snacks snags snakes snaps snares snarls snatches snecks sneezes snickers sniffs snipes snips snitches snites snookers snoops snoozes snorts snowballs snowboards snows snowshoes snubs snuggles snugs soaks soaps soars sobs socks soils sojourns solaces solders soldiers solvates somersaults sops sorrows sorties sorts sounds sources sours sows spaces spacewalks spades spads spams spangs spanks spans spares sparkles sparks spars spasms spatchcocks spearheads spears speedruns speeds speedskates spellchecks spells spice spiels spies spiffs spikes spills spins spires spirits spits splashes splats splatters splices splints splits sponges sponsors spoofs spooks spools spoons spores sports spotfaces spotlights spots sprains springs sprinkles spritzes sprouts spruces spurns spurs spurts squabbles squalls squares squashes squawks squeals squeezes squelches squibs squicks squints squires squirts squishes squizzes squushes stabs stacks staffs stages staggers stains stakes stalemates stalks stalls stammers stamps stanchions stand stands staples starches stars startles starts stashes states stations staves stays steads steamrollers steels steeples steers stems stents steps stews sties stifles stills stimies stims stings stinks stints stips stirfries stirs stitches stocks stodges stomachs stomps stones stonewalls stonks stoops stops storms storyboards stounds straddles strains strands straps strays streaks streams stresses stretches strides strikes stripes strips strobes strokes strolls structures struggles struts stubs stumbles stumps stums stunts stutters styles stymies subclasses subclones subcultures subgrants subjects sublets submarines submeters subordinates subpoenas subs subsets substitutes subtotals subverts sucks sugars suicides suitors suits sulfates sulfonates sulfurs sulks sulphates sulphurs summonses sumps sums sunburns suntans superglues supershifts superstrates suppers supplements supplies supports surfaces surfeits surnames surrenders surveys suspects sustains swabs swages swallows swamps swaps swarms swathes swats sways swears sweats sweeps swelters swigs swims swindles swirls swishes switches swoops swooshes swots swounds synapses syncs syphons tables tabs tackles tacks tags tails taints talks tallies tangoes tangos tantamounts tapestries taps targets tarries tars tartans tarts tasers tasks tastes tats taunts taws taxes taxies tchicks teams teargases tears teds telegrams telemonitors telephones teleprints teletypes telexes tempers templates temps tenants tenders tenons tenses tensions tensors tests tethers texts thatches thaws therapies thews thieves thimblerigs thinks thins thirds thirls thirsts thralls thrills throbs thromboses throngs throttles throws thrums thrusts thrutches thumbs thumps thwacks thwarts ticks tiers ties tiffs tiles tillers tilts timelines timeouts timestamps tingles tinkers tins tints tipples tips tires tithes toadies toasts toboggans toenails toggles togs toils tolls tomahawks tombs tongs tongues tools toots toplines torches torments torpedoes tosses totals totters touches tourneys tours touts towels towers toys traces tracks trademarks trades trails trains traitors tramples tramps transects transfers transfixes transforms transgenders transits translates transports traps travails travels traverses trays treads treasures trees treks trellises trembles tremors trenches trends trephines trespasses tresses tribotests trices trickles tricycles tries trifles triggers trills trims triples trips trists triumphs troats trobles trolleys trolls troops trots troubles trouts trucks trumpets trumps trundles trusses trusts trysts tubes tubs tuckers tucks tufts tugs tunes turfs turnkeys turns turtles tussles tutors twangs twats tweaks tweets twerks twigs twinges twinks twins twirls twists twitches twits twitters twizzles twonks types umbraids umlauts umps underbets undercasts undercuts underdoses undergrounds underleads underorders underplates underruffs underscores underseals understeers understudies underwaters underwires unfavorites updates upfaults upgazes upgrades upgushes uplifts uploads uppercuts uprates ups upsets upshifts upsurges upsweeps upswells upturns upvalues urges uses vacuums vails vamps vasals vaselines vats vaults vaunts vectors velvets veneers vents verbals verbs verges vermicomposts vests vetoes vials vibes victories victuals vidcasts videocasts videoconferences videos views vignettes visits vitriols voices voids votes vouchers vouches vows voyages waddles wades wagers wages waggons wags wails wainscots waits waivers waives wakeboards wakes wales walks wallers wallops wallpapers wallpresses walls wambles wanders wanes wanks wantons wardrives wards warehouses warisons warranties warrants wars washes wastes watchdogs watches watchlists waterboards waterfalls waterfloods watermarks waters waterskis watusis wavers waves waxes wears weaves wedges weeds weekends weights weirds welches welcomes welds wells welts wends wetnurses wets whacks whales whams wheeks wheels wheezes whelps whickers whiffles whiffs whigs whimpers whinges whinnies whips whirrs whishes whispers whistles whitemails whitewashes whizzes whoises wholesales whoops whooshes whops whores whumps wicks widows wiggles wigwags wikipedias wildcrafts wills wilts winches windmills winds wines wings winks winnows wins wires wiretaps wisecracks witnesses wizards wobbles wonders wones woods woodsheds words works worms worries worships wounds wrangles wreaths wrecks wrenches writhes wrongs xeriscapes xors yachts yacks yandies yanks yaps yarns yatters yawps yaws yellows yells yelms yelps yeuks yields yiffs yips yodels yoiks yokes yomps youtubes yowls zaps zeroes zests zigs zigzags zings zones 3397 O aaliis aartis abaci abacisci abaculi abassis abazis abecedaria abisetaoshis aboideaus aboideaux aboiteaus aboiteaux abomasa abomasi abortogenics abstandsprachen abstracta academics acais acajous acanthi acari acatalectics acataleptics acciaccature acephali acervuli acetabula acinaci acini acroamata acrocentrics acrocephalics acromegalics acropodia acropoleis acropoli acrostics acroteria acrylics actinobacteria actinotrichia addenda adenomata adieus adieux adivasis admen adpeople adwomen adynata adzukis aecia aecidia aedeagi aegagri aeromechanics aesthetics afficionadi afghanis afghanistanis aficionadi agarics agenda agnomina agnostics agogics agoraphobics agoroth agoutis agribusinessmen agrimis agrypnotics ahis ahlspiessen ahmadis aidmen aiolis aircraft aircraftmen aircraftsmen aircraftswomen aircraftwomen aircrewmen airmen airwomen ais akiapolaaus akousmata albarelli albumina alcaics alcoholics aldermen alderpeople alderwomen alembics alexiterics alhajis alibis aliphatics aliyot alkalis allodia alloplastics alluvia almiquis almsmen alphametics alphaproteobacteria altocumuli altostrati alumni alveoli amakhosi amakosi amakwerekwere amapakatis amatis ambulacra ambulancemen ambulancewomen ameli ameloblastomata amenorrheics amenorrhoeics amenta amici amnesics amnia amoretti amphibia anabolics anacoloutha anacolutha anacreontics anaesthetics analeptics analgesics anamonics anaphora anapodota anastasis anasyrmata anathemata anchormen anchorpeople anchorwomen ancone androecia anecdota anesthetics angioleiomyomata angiomata anhidrotics anionics anis annuli anorectics anorexics anorexigenics anosmics antarthritics antasthmatics antependia anthelmintics anthemia antheridia anthocauli anthropophagi antiallergenics antiangiogenics antiarrhythmics antiarthritics antiasthmatics antibiotics antibrachia anticatholics anticholinergics antidiuretics antiemetics antiepileptics antifibrinolytics antifibrotics antifogmatics antigalactics antihelminthics antihemorrhagics antiherpetics antihistaminics antihyperglycemics antileukaemics antileukemics antilipidemics antilithics antiluetics antimicrobics antimitotics antimuscarinics antimusics antimycotics antineoplastics antinephritics antinicotinics antinuclei antiparasitics antipasti antiphlogistics antipruritics antipsoriatics antipsychotics antipyretics antirachitics antirheumatics antiromantics antis antisceptics antiscia antiscorbutics antiseptics antisera antispasmatics antispasmodics antispastics antisyphilitics antithrombotics antitragi antoniniani antra anxiolytics apemen aphasics apiculi apikorsim apis apocalyptics apocolpia apodeictics apopemptics apotreptics apparachiki apparatchiki appletinis appressoria apronsful aprosdoketa aptychi aquaholics aquamanilia aquaria arboreta arcana archaea archaebacteria archaics archbishoprics archebacteria archegonia archei archencephala archentera archmagi areg argumenta arie arithmetics armamentaria armsful arnis aromatics arthritics artics artillerymen ascetics asci ascomata ashkenazim aspergilla aspersoria aspics assemblymen assemblywomen associahedra asterisci asthmata asthmatics astragali asyndeta ataractics ataris atheromata atria attackmen attics auditoria aulics auloi aurar aurei aurochsen ausbausprachen autistics autobahnen autoclitics automata automatics autopodia avocadi awqaf axemen axiomata axmen azerbaijanis azeris babassus babus bacilli backfische backmen backwoodsmen bacteria bacula badfics badmen baggagemen baghdadis bagmen bagsful bahrainis bahus bahuvrihis baijis bailsmen bajaus balanghais baldrics ballotechnics baloi balsamaria baltis bandeaus bandeaux bandsmen bangladeshis barbitoi barfis bargemen bargewomen barmen barramundis barrelsful baryonia baseis basemen basenjis basewomen bashkortostanis basicrania basics basidia basidiomata basipterygia basketsful basotho batmen batsmen batswana batswomen baymen bayous beakersful beaus beaux beedis beggarmen beggarwomen bellinis bellmen beltsful bengalis bergamaschi berimbaus betamimetics bhajis bhangis bhelpuris bhikkhus bhikshus bhindis bicyclics biennia bigorexics bijous bikinis bildungsromane biminis binbashis bindiis bindis binmen binomina bioceramics biofabrics biogenerics biologics biopics bioplastics biotherapeutics bipkwele birdmen birdwomen birianis biriyanis biryanis bis biscottis bishoprics bispectra bitumina bivis blackfeet blastoise blastomata blinis blogoholics bluesmen blueswomen boatmen boatsful boatsmen bogeymen bogeywomen bogymen boilermen bondmen bondsmen bondswomen bondwomen bonesmen bonsais boogeymen boogiemen boogymen booklice bookmen borborygmi bordereaux borzois bostangis bostanjis bottlesful bottomonia boubous bouzoukis bowlsful bowmen boyaus boychildren brachia brachycephalics braggadocii brainchildren brakemen branzini bregmata brennschlusse brewskis brickmen bridesmen brindisis brinksmen broccolis bronchi brothermen bryozoa btus bucketsful buckteeth bucolics bucrania bulbospongiosi bulimics bungus bureaus bureaux burkinis burnous burqinis bushmen bushwomen businessmen businesspeople businesswomen busmen buttinskis buttonmen cabassous cabmen cacti cadis caducei caeca cafetoria calcanea calcanei calculi caldaria caliculi calpollis calpoltin calyculi camaieus cambia cameramen camerawomen camis campi canaliculi cancelli candelabra candirus candrabindus candymen cannolis canoemen cansful cantatrici canthari canthi capitula capitulationer capitulationest capsful caravansarais caravanserais carcajous carcinomata carcinosarcomata carcinostatics cardecus caribous carmen carpi carpometacarpi carsful cartmen cartonsful cartsful carus castellani castrati catacaustics cataleptics catechus catfishermen cathari cathartics catheti catholics catoptrics cattlemen cattlewomen cauldronsful cauris caustics cavalrymen cavalrywomen cavemen cavewomen caxixis cazics cebus ceca cecidia cedis ceilidhean cellaria cellarmen celli cembali centermen centra centremen ceramics cerata cerci cerebella cerebra ceromata cerumenolytics cgis chaddis chadris chainmen chairmen chairpeople chairwomen chalazia chalumeaux chantis chapatis chapattis chapeaus chapeaux chapmen chaprassis characteristics charismata charismatics charizard charmonia charwomen chasmata chateaus chateaux checkweighmen chederim chedis cheilocystidia chemodectomata chemophobics chemoprophylactics chemotherapeutics cherubim chervontsy chessmen chestsful chiantis chiasmata chiasmi chibis chics chilis chillis chillun chimichurris chinamen chis chloralkalis chocaholics chocoholics choleretics cholesteatomata cholesterics cholinomimetics cholis chondrosarcomata choonz chordomata chorioangiomata choriocarcinomata choristomata chromonemata chubis chunnis chuppot churchmen churchpeople churchwomen ciceroni cics cilia cipollinis circumradii cirri cismen ciswomen citharai clansmen classics classroomsful claustrophobics clawfeet cleistothecia clergymen clergypeople clergywomen clerics cleroteria climacterics clinics clitics closetsful clubfeet clubmen clypei coachmen coachwomen coalmen coastguardsmen coatimundis coatis cocci cocksmen coelomata coemeteria coenoecia cognomina cognoscenti colics colloquia colluvia collyria colobomata colonics colormen colossi colourmen coltsfeet columbaria combis comedogenics comedolytics comics comitadjis commata committeemen committeewomen compacta compendia conatus concerti concreta congressmen congresspeople congresswomen conidia conmen conopss consiglieri consortia conspecifics containersful continua contrafacta contralti conundra convolvuli conwomen coquis corgis corgwn coria cornermen cornishmen cornishwomen corpora corpsmen corrigenda coryphaei cosmoi cosmopoleis councilmen councilwomen countermen countertactics counterwomen countrymen countrywomen cowmen cowpeople coypus cpus cracksmen craftsmen craftspeople craftswomen cragsmen crania craniopagi cratesful crayfishermen crematoria creminis crenarchaea crescendi crewmen criminis criteria critics croci crorepatis crossbowmen crura crus crustacea cryptics cryptococci cubics cubicula cuboctahedra cudighis cumuli cumulonimbi cuniculi cunjevois cupboardsful cupsful curricula cyanobacteria cybermen cynganeddion cynics cysticerci cystidia cytostatics cywyddau dactylics dagestanis daggermen daiquiris dairymen dairywomen dalasis dalesmen dalmatics damakzevkis danceaholics dangermen darbaris dashikis data daysmen dcis dcss deadmen deathfics deathsmen decahedra decennia decrescendi defencemen defensemen definienda definientia degus deictics deliria delis deliverymen deliverypeople deltaproteobacteria deltohedra demesmen demis demoi denari denarii denis derrickmen desiderata designata deskmen dessertspoonsful detrita devadasis dhakis dhimmis dhobis dholkis dhonis dhotis diabetics diacaustics diacritics diagnostics dialectics diaphoretics diaromatics diastemata diatomics dicta didactics didicois didjeridus dielectrics diencephala dihedra dilemmata dilettanti dioptrics dipinti diplegics diplococci diplomata dippersful discoboli disequilibria disir disyllabics dithyrambics diuretics diverticula dizis djelis djinnis docus dodecadodecahedra dodecahedra dogmata dogmen dolia domatia domestics doofi doormen doorpeople doorwomen dorgis dormice doubleyous doufus doujinshis douroucoulis drachmai draftsmen draftspeople draftswomen dragomen dramata drapur draughtsmen draughtspeople draughtswomen drawersful draymen dreamchildren dromoi drumsful drusen dsis dumky duodena dupondii durbaris durukulis durzis dustmen dutchmen duumviri dyslectics dyslexics dyspeptics dyspraxics dysthymics dziggetais ealdormen earsful earthmen earthsmen earthwomen ebbermen ecbolics eccentrics ecclesiastics eclectics ecliptics ecocritics ecstatics ecthymata ecumenopoleis ecus eczemata edemata effendis effluvia efis egocentrics eidola eigenspectra einsatzgruppen eisteddfodau elastics electroceramics electrophori elemis elytra emacsen emalangeni embola emboli emeriti emetics emeus emiratis empirics emplastics emporia empyrics emus enanthema encaustics encephala enchiridia enclitics encomia endarteria endemics endobacteria endocardia endocrania endometria endomysia endoplasma endosporia endostea endothecia endothelia endotheliomata enemata enginemen englishmen englishwomen englynion enigmata enokis enterobacteria enterococci entozoa envois ephebi ephemera epicardia epicedia epics epidemics epigastria epileptics epilimnia epimanikia epiphaenomena epiphenomena epirrhemata epis epistemai epithalamia epithelia epithelialisation epitomai epizootics eponychia epsila epyllia equilibria equiseta erastai erhus erics eristics eroge eromenoi errata erratics eruvim erythemata erythrodermata escharotics esophagi eteostics ethanoicer ethanoicest ethe ethea ethnica ethnics ethnika ethoi etuis etyma eubacteria eucalypti eugeroics eukarya eurosceptics euroskeptics eutectics eutrophics everymen everywomen exanthemata excisemen exempla exopoda exotica exotics exozodis explananda expressmen extrema eyen eyesful eyeteeth fabliaux fabrics facemen famuli fanatics fanbois fanfics fantis fasciculi fascina fatawa fedayeen feet feiseanna fellahin fellowmen feminazis femora ferraris ferroelectrics ferryboatmen ferrymen ferrywomen festschriften fianchetti fiaschi fiasci fibromata fichus fics fideicommissa fieldmice fila filipodia filopodia fingersful firemen firepeople firewomen fishermen fisherpeople fisherwomen fishwomen fistsful flagella flagmen flambeaux flambergen flatfeet flatus flavobacteria flittermice flocci flokatis floorpeople florilegia flumina fluoroaromatics flus flyfishermen flymen foci foederati foemen foeti fogous foodaholics footmen fora foramina forefeet foremen forepeople foreteeth foretopmen forewomen forgemen forksful formicaria fornicatoria foundrymen fraenula frangipanis fraus freedmen freemen frenchwomen frenula freshmen freshpeople freshwomen fretmen frigidaria frogmen frolics frontiersmen frontierswomen frontmen frontwomen froufrous frusta fsherwomen fuglemen fulcra fumetti fungi funnymen furfen fyrdmen gabbais gadgetbahnen galge gametangia gametogonia gammaproteobacteria ganglia ganglioneuromata gaohus gardai gardensful garibaldis garlics gasmen gastrinomata gastrocnemii gastrokinetics gateaus gateaux gatemen gatewomen gdis geese geis gemachim geminis genera generics genii genioglossi genizoth gennelmen gentlemen gentlepeople gentlewomen geodesics geriatrics ghazis ghiblis gilgais gilgulim girlchildren gladioli glassesful gleemen gleewomen glioblastomata gliomata glissandi glomeruli glovemen glovesmen glutaei gnaborretnis gnostics gnus gobsful godchildren godis gomesis gonadoblastomata gonangia gonococci gonopodia goodmen gooris gothics gouramis gownsmen goyim grana grandchildren granthis granulomata gravamina grocerymen groomsmen groszy groundsmen groundswomen guardsmen guardswomen guarris gubernacula guembris gunbais gunmen gunwomen gurrnkis gurujis gurus guslis gutsful gwarris gymnasia gynoecia gyri gyroradii hackmen hadhramautis hadjis hadramautis haematomata haeretics haflis haiku haikus hajis hajjis halachot halachoth halfpence halloumis hallucinogenics haloaromatics halobacteria halonuclei hamantaschen hamantashen hamentaschen hamentashen hammermen hamuli handakuten handcraftsmen handicraftmen handicraftsmen handsful handymen handypeople handywomen hanghang hangmen happis haptonemata haptotropics hapukus hardmen hardwaremen harkis harmonics harvestmen hassidim hatchetmen hatchmen hatsful hausfrauen hausfraus haustoria headmen headsful headsmen heartsful hebrephrenics heliobacteria helminthics helmsmen helmswomen hemangiopericytomata henchmen henchpeople henchwomen hentai hepatics hepatomata hepatopancreata heptahedra heptaparallelohedra herbaria herdmen herdsmen herdswomen heretics heroa herrenvolker hetairai heteroaromatics heteroclitics heterocyclics heterospecifics hetime heuretics hexahedra hexecontahedra hibachis hibernacula hieroglyphics highlandmen highmen highwaymen highwaywomen hillsmen hindian hindus hindustanis hippocampi hippopotami hirdmen hispanics hitmen hitwomen hodmen hokkus holyhedra homunculi honoraria honorifics honus hordeola hormogonia horsemen horsewomen hosen houdinis houndsteeth houris housebois housemen housesful huhus humeri huntsmen huntspeople huntswomen husbandmen hydrocholeretics hydroecia hylics hymenia hypaspistai hypemen hyperbata hypergeometrics hypergraphics hypernuclei hypnotics hypochondria hypocoristics hypodermics hypogaea hypogea hypoglycemics hypomanics hyponychia hypoptila hypothalami iambics icemen ichnogenera ichthyosauri icosahedra icosidodecadodecahedra icosidodecahedra icositetrahedra idiomata idlis idola idyllics ignorami ignostics ilea ilia imartis imbroglii immunotherapeutics imparisyllabics impedimenta imperia impluvia imprimantur impromptus improvisatori improvisatrici inconnus incubi incunabula indolics indusia infantrymen infodemics infographics infoholics infraphyla infundibula inia inkosis innuendis inorganics inradii inss insulinomata intermetallics interstitia interwebz intrichi inukshuit inuksuit invadopodia ious ipus iqalummiut irishmen irishwomen ironmen irukandjis ischia ischiocavernosi isocola isometrics isopycnics isostatics israelis isthmi italics ithyphalli izibongo izimbizo izinyanga jabirus jaborandis jackmen jaguarondis jaguarundis jalfrezis jambeaux jambus jamdanis jarsful jazzmen jazzwomen jehadis jehus jejuna jellia jerseymen jhampanis jiaozis jidaigekis jigglypuff jihadis jinnis jivanmuktis jndis jnis jokis josekis journeymen journeypeople journeywomen jtwis judogis jugsful jugula jujus jukskeis junkmen jurymen jurywomen jus kabaddis kabassous kaffeeklatschen kagus kahaus kaikis kaisekis kajis kakis kalamkaris kana kangris karahis karelis kashmiris kathakalis katis kauris kazakhstanis kazis kegsful keiretsus kemonomimis kendis kepis keratoacanthomata kerugmata kerygmata kettlesful ketubbot ketubot khachapuris khasis khatris khazis kibbutzim kibeis kidsmen kielbasis kikois kimono kincajous kingsmen kinkajous kinocilia kinsmen kinspeople kinswomen kippot kipunjis kiwis klansmen klanswomen kleroteria klezmorim klismoi knifemen knifesmen kobzari kohlrabis kokoretsis kolkhozy kolkozy komondorok kongonis kooris korun kouroi kourotrophoi kovshi kowhais krais kroner kronor kronur krooni kudus kudzus kuffar kufis kukis kukris kukuis kulfis kulichi kumazemis kunstlerromane kurdistanis kuvaszok kuwaitis kyus labara labella lacemen lactobacilli lactococci lagerstatten lahmajous laics lais lambics lamborghinis lamellipodia lamellopodia lanais landaus landmen landsmen lantibiotics lantzmen lasagne lassis latera lathis lati laundrymen laundrywomen lawmen laymen laypeople laywomen leadfeet leadsmen leathermen lebensraume lebenswelten leetmen legendaria legmen lei leiomyomata leiomyosarcomata leis lemmata leprosaria lepta leptocephali leptocystidia leptomata lesspeople lettermen leucodermata leucomata leukomata leva levermen lexeis lexica leylandiis libretti lice lieder liegemen liegewomen liftmen lightermen lightweighter lightweightest linemen linesmen linespeople lineswomen linkmen lire lisente litai litchis lithophyta litui liulis liverymen lizardmen lobstermen lobsterwomen loci locomen loculi logaoedics logia logics logistics lolis longbowmen longshoremen longshorewomen loreleis loti lotis lovechildren lrne luaus lubki lulus lumbermen lumina lunatics lungis lungsful lustra lymphangiomata lymphatics lymphoedemata lymphoepitheliomata lymphomata lymphonodi lyrics maare macaronics machiavellis machzorim macra macroconidia macronuclei madmen madwomen maestri mafiosi maggidim magi magsmen maguaris maharanis maharishis mahmudis mahzorim mailmen mailpeople mailwomen makis makuta mala malayalis malibus malihinis mallei malleoli mallus maloti maltmen mamudis manatiq manchildren manchus manicous manitous manjis mankinis manteaus manubria maoris mapaus maqamat marabous maravedis maria mariachis mariengroschen markkaa markmen marksmen markspeople markswomen marsupia martinis martyria mashgichim masseboth mastercraftsmen mastics mastmen masus matatus matrics matronymics matsuris matzot matzoth mausolea maxima maxis mazandaranis mazanderanis mazzeboth mbaris mealmen meatmen mechanics media mediastina medics mediostrata meese megafeet megalopoleis megalopoli megapoleis megara megatsunamis meharis melancholics melanomata melics melismata melodramata memoranda men menaia menchildren meningococci menisci menologia menoroth menschen menstrua menus meowth merchantmen merchantwomen merchildren meristics mermen merpeople merwomen meseraics mesocephalics mesoclitics mesonephroi mesotheliomata metacarpi metacentrics metadata metaheuristics metallics metalogics metalorganics metaphysics metapodia metatarsi meticais metics metoeci metrics metropoleis metropolia mewtwo mezuzot mezuzoth miasmaler miasmalest miasmata mice microcephalics microconidia microcosmoi microelectronics microemboli microminis micromosaics micronuclei microphenomena microsporidia microvilli mics middlemen middlewomen midis midshipmen mikveot milieus milieux militiamen militiawomen milkmen milkwomen millenia millennia mimetics miniepics miniloci minima minis minshukus minutemen minyanim mipss misandrics miscellanea missingno mitochondria mitzvot mitzvoth mmapis mmis mnemonics mochis mocktinis modacrylics modica moduli modulini mogwais mohelim mokihis momenta monastics moneymen mongeese monoaromatics monogenics monokinis monophyla monosyllabics monsignori moolis moonchildren moose moratoria morioris moronis mortaria mortarmen mosaics moshavim moshavot motormen motorsportsmen mottis mousambis mouthsful mss mucolytics mueslis muftis mugsful muhajireen muhajirun mujtahidun multiethnics multiferroics munis muri musaea musclemen musclewomen musculotropics musea musics muskoxen mussulmen mutanda muthammanis muumuus muzungus mycelia mycobacteria mydriatics myelomata myocardia myocloni myomata myopics myrmecodomatia mystics mythoi mythopoeics myxobacteria mzungus nacroleptics naevi nanobacteria nanoceramics nanocosmetics nanotori narcissi narcoleptics narcotics nasturtia natatoria natriuretics nauplii nautili nazis nebulosi necropoleis needlewomen nematics neostriata neoterics nephritics nephroi nestohedra netsful neura neurocrania neuroepithelia neurofibromata neurofibrosarcomata neuroleptics neuromata neurosarcomata neurotics nevi newsmen newspapermen newspaperwomen newspeople newswomen nexus ngonis nidi nidopallia niggaz nighantus nightwatchmen nightwatchwomen nikis nilgais nilghais nimbi niqaab nitroaromatics nitrobacteria nivkhi noblemen noblewomen noemata noetics nonacademics nonalcoholics nonanalgesics nonanesthetics nonantibiotics nonaromatics nonasthmatics nonceramics noncharismatics nonchildren nonclergymen noncritics nondiabetics nondyslexics nonepileptics nonequilibria nonetti nonis nonmen nonmystics nonnarcotics nonneurotics nonpeople nonphobics nonplastics nonpsychics nonpsychotics nonrepublics nonsalesmen nonsceptics nonschizophrenics nonskeptics nonwomen nonworkaholics noobz nootropics nordics norsewomen northmen nostalgics nostra noumena novelle noyaus noypis nozzlemen ntamanis nubcakez nuclei nucleoli nuis nullisomics numina nunavummiut nunchakus nuristanis nurserymen nurserywomen nychthemera nycthemera nyepis nymphaea nymphomanics oarsmen oarswomen obeli obis oboloi occipita oceanaria ocelli octahedra octics octopi oculi odea oeconomi oedemata oesophagi oestri oidia oilmen okapis olisboi omasa ombudsmen ombudspeople ombudswomen omegala omenta omicra ommatidia omophoria omphaloskeptics onagri oncomice oneirocritics onia ooecia oogonia oolitics opera operanda opercula opia optics optima orangemen orangewomen orchardmen organics organometallics oribis origamis orthorexics orthotetrahedra orthotics oscula osmotica ossa osteosarcomata ostinati ostraca ostraka otakus otalgics otoconia ouakaris ouroboroi ous outdoorsmen outdoorswomen ova overmen overweeningness owsen oxen oxymora oxytocics oystermen pacemen pacis packmen paczkis pagatis pagesful pagris paharis pailsful paise pakistanis pali palladia pallia pancreata pandemics pandemonia panegyrics paninis panjabis panni pansful panthea pantrymen paparazze paparazzi pappi papyri parablepsia parabolics paradigmata paragangliomata paralytics paramecia paramedics paramoecia paraoptometrics parapegmata paraphilics paraphyla paraplegics parapodia pararescuemen parasitics parasympatholytics parasympathomimetics paregorics parhelia parsis parvenus passersby pastophori pastramis patagia pathics patrolmen patrolwomen patronymics pawsful peevishlyer peevishlyest pelmenis pence pendula pengulus penii penmen pentahedra penwomen pepperonis pepsis peptidomimetics pericardia peridia perihelia perikarya perinaea perinea perineuria perioeci periostraca peripatetics peripli periploi peris perithecia peritonaea peritonea permutohedra pessima petroholics petrolea pfennige phaenomena phaeochromocytomata phalli phantasmata phaseoli phenolics phenomena pheochromocytomata philerass philharmonics philippics philodendra philtra phis phobics phocomeli phoeti photini photobacteria photomosaics photostimuli phthisics phyla phytotelmata pianissimi pianoforti picalillis piccalillis pichvais picocyanobacteria pics piemen pierogis piewomen pigsnie pikachu pikachus pikemen pilaus pilgarlics pili pilotis pinealomata pineoblastomata pineta pipemen pipesful pirogis pis pitchmen pitchwomen pitmen pitohuis pitsful pivotmen pizze pizzelle placemen plainclothesmen plainsmen plainswomen plana planaria planesful planetaria plasmalemmata plasmodesmata plasmodia plastics plateaux platemen platesful plattersful platypi platysmata plectra plena pleopoda plethra pleura pleurocystidia ploughmen plowmen pluralia pneumococci pocketsful pocula podagrics podia poleis policemen policepeople policewomen policlinics pollinia poltergeister poltfeet polyacrylics polyaromatics polyclinics polycyclics polyhedra polymethacrylicer polymethacrylicest polyphenolics polypi polyptota polysomics polyspectra polysyllabics polytechnics polyzoa polyzoaria polyzoics ponceaus pooris portmanteaus portmanteaux portmen positronia possibilia postcrania postmen postpeople postscripta postulata postwomen potawatomis potmen potpourris potsful poultrymen poultrywomen pracademics practica praefixa praemia praenomina prahus prediabetics prefixa premia presidia pressmen pretecta primordia probiotics problemata problematics probosci procambia proclitics prognostics prokinetics prolactinomata prolegomena pronuclei prooemia propaedeutics prophylactics propionibacteria proscenia prosciutti prosopagnosics prospermatogonia prosthetics protei proteinomimetics proteobacteria proteomimetics prothalli prothallia protonemata protozoa protreptics proventriculi proxeni proxenoi prutot prytanea prytaneis psalteria pseudanthia pseudopodia pseudothecia psoai psoi psus psychedelics psychics psychoneurotics psychotics psychotomimetics psychotropics ptarmics pterygia publics pudenda puerperia pulaskis pulik pulis pulvini puncta punjabis punnais puris purlieus putamina putti pygidia pyknics pylori pyodermata pyramidia pyrectics pyritohedra pyroelectrics pyromantics pyrosoma pyrotics pyrrhics pysanky qadis qataris qawwalis qazis qindarka qinghaosus qis quadratics quadrennia quadrics quadriplegics quadrivia qualia quanta quantics quarkonia quarrymen quartics quasimomenta questmen quindecemviri quinquennia quinqueviri quintics quipus quiversful quora rabbis radarmen raddlemen radialia radii radiolaria radioli radiomen raftsmen ragmen ragus railwaymen rajkumaris rakhis rakis rakshasis rami ranchmen ranchwomen ranis ranunculi rapakivis rastamen raviolis reais rebetika recta recti reddlemen referenda regatte regimina regna reguli reikis reinsmen relata relics remaindermen repairmen repairwomen representamina reptilia republics rescuemen residua retiari retiarii retinoblastomata rewritemen rhetorics rheumatics rhinoceri rhinoceroi rhizobacteria rhizobia rhombi rhombohedra rhonchi riflemen riflewomen rishis rmis roadmen rodmen rokurokubi romantics rondeaus rondeaux roomsful ropesmen rosaria rostis rostra roundsmen rsis rttis rubrics ruckmen rumina rusalki rusalky russkis rustics saamis sabzis sacella sacksful sacra sacraria sadgurus sadhus saepta safaris saffis sahaba sahrawis saics sailormen sailorwomen saimiris sajous saketinis sakkoi salamis salarymen salesmen salespeople saleswomen saliceta salivaria salmagundis salmis saltarelli salukis saluretics salvis samis sampis samurais sanatoria sandmen sandwichmen sanitaria sanitoria sanseis santokus sarangis sarcomata sarcophagi saris sartorii sashimis sastrugi satchelsful satgurus saucersful saudis sawteeth scallopinis scaloppini scenaria scenarii scenics sceptics schemata schematics scherzi schismatics schizophasics schizophrenics scholastics scholia schoolchildren schoolmen schwannomata sclerotia scoopsful scotchmen scotchwomen scotomata screensful scriptoria scrota scrubwomen seamen seamice seaquaria seedsmen selectmen selectwomen semantra semata semiautomatics seminomata senitis senryus senseis sensilla sephardim sephirot sephiroth septa sequuntur sera seraphim seris servicemen servicepeople servicewomen sestertii sewermen sexaholics sferics shakuhachis shamen shangani shaomais shearmen sheep sheepmen sheetsmen shekalim shellfishermen shentlemen sheqalim sherwanis shieldmen shieldsmen shikaris shinobis shipmen shipsful shittim shiurim shkotzim shochetim shofroth shopaholics shopmen showmen shrewmice shtetlach shuftis sicilici sidemen sidesmen sievesful sifus sigla signalmen signalwomen signori signorine silkmen silkwomen silphia similia simulacra sinfonie sistra skeptics skiesful skis skus slaughtermen smectics snafus snaggleteeth sne snorlax snowmen snowpeople snowwomen sociopathics soferim solaria solatia solidi somalis somata somnolytics somonis songfics soporifics soredia soum soundmen sous souvlakis sox spacemen spacewomen spadesful spahis spastics spearmen spearsmen spearwomen specifics specimina spectra spectrahedra specula spendaholics spermatagonia spermatogonia spermatozoa spheria spics spicula spinosauri spissati splayfeet spokesmen spokespeople spokeswomen spoonsful sporangia sporogonia sportsmen sportspeople sportswomen spreiten spumonis sputa stadia stamina staphylococci statesmen stateswomen statistics status staus steamboatmen steersmen stegosauri stemmata stepchildren stepgrandchildren stereocilia sterigmata sterna steroidogenicer steroidogenicest stewardii stickmen sticksmen stigmata stigmatics stimuli stockingfeet stockmen stoics stomata stomia stomodea storemen stotinki strangeonia strata strategi strati streetsful streptococci stromata strongmen strongwomen stuntmen stuntpeople stuntwomen styli stylobata styptics subashis subepithelia subgenera subharmonics sublemmata sublogics submenus subphyla subregna subsellia subspectra substrata subtaxa subtonics subtopics succedanea succubi sudokus sudorifics sufganiyot sugarmen suitcasesful sulci sulus supercilia supercolossi supercontinua superharmonics supermen supermice superminis superpeople superphenomena superphyla superplastics superregna supersalesmen superstimuli superstrata supertaxa supertonics supertori superwomen suppedanea supraspinati suprema surfaris surilis surrogata sushis suzanis svarabhaktis svengalis swagmen swamis swatis sweese swingmen switchmen swordsmen swordswomen sylis syllabi syllabics symbiotics sympatholytics sympathomimetics symposia synandria syncitia syncytia syndics synoptics syntagmata synthetics syphilitics tableaus tableaux tablesful tablespoonsful tabus tacksmen tactics tafoni tagmata taijis takfiris talesmen tali talismen tallymen talwege tankinis tanookis tanukis tapus tarakihis targumim tarsi tarsometatarsi tatakis tatamis taus taxa taxis taxmen taxwomen tchervontsy teacupsful teaspoonsful technics technocritics technopoleis tecta teeth teethbrush tefillin tegus telebureaus telebureaux teledus telencephala teletsunamis temenoi tempi tenderfeet tendus tengus tentoria tentsful tepidaria teppanyakis terais terata teratogenics teratomata teriyakis termini terraria tessiture tetani tetrahedra tetrahemihexahedra tetralemmata tetramethylammonia tetraplegics tetrevangelia teus textaholics thais thalami thalis thalli thalwege thankyous thecia thematics theorics thermoplastics thesauri thesaurusi thimblesful thingmen tholoi thrombi thugz thymi thyrsi tics tikis tillermen timbermen timpanis tinamous tinmen tinsful tintinnabula tipis tiramisus titis titmen titmice tocolytics tofinus tohubohus tokajis tolais tomenta tonics topics topmen topoi toponia toquis torchmen tori torsi tortonis townsful townsmen townspeople townswomen toxotai toymen toywomen trackmen tradesmen tradeswomen tragi transgenics transmen transwomen trapezia trapezii trapezohedra trashmen traumata travaux trax traysful tremata trenchermen triacontahedra tribesmen tribeswomen trichobothria tricola triennia triggermen trihedra trikinis triskaidekaphobics triskelia trispectra trisyllabics tritocerebra triumviri trivia tropics trousseaus trousseaux trowelsful truchmen trumeaus tsarevichi tsitsiyoth tsotsis tsunamis tucuxis tuis tulkus tumblersful tumuli tunics tureensful turmerics tuttis tutus tympana tyrannosauri tzatzikis uakaris ubermenschen ulstermen ultimata umbilici umlaute umus uncini underclassmen understrata underworkmen undulipodia unis univocalics unpeople untermenschen upperclassmen upsila uraei uranisci uredinia urnsful ursprachen urtis ushabtis ushabtiu uteri uterotonics utilitymen uzis vacua vagi variora vatus vaus vela veniremen ventis ventriculi verfremdungseffekte vestrymen viatica vicechairmen vici victoriati videmus villi vincula virelais virgalieus viri virii virostatics virtuosi viscera vivaria vizslak vleis vodkatinis vomitoria wadis wagemen wagonsful wahabis wahhabis wais waitpeople walis walkthrus walrusser wanderjahre wangteeth wapitis waragis warehousemen warehousesful waris wasabis washermen washerwomen washwomen watchmen watchwomen watermen wazungu wealdsmen wealsmen weathermen weatherpeople weatherwomen webcomics webfeet weighmen welchmen welshmen welshwomen weltanschauungen whalemen whanaus wheelmen whipmen wikiholics wikis wildmen windowsful wineglassesful wingmen wiremen wolfmen women wonderchildren wonderwomen woodlice woodmen woodmice woodsmen woodswomen workaholics workingmen workingwomen workmen workpeople workwomen wunderkinder xanthelasmata xanthogranulomata xanthomata xenobiotics xenodocheia xenodochia xenophobics xerophytics xiphiplastra xiphisterna xiphopagi xis xoana xus xylostromata xysti yachtsmen yachtspeople yachtswomen yadim yagis yagouarondis yagouarundis yaguarondis yaguarundis yalis yandere yangmeis yaravis yardmen yarramen yashikis yearmen yearsmen yeggmen yemenis yeomen yeowomen yeshivot yesmen yetis ynambus yoginis yogis yonis yorkshiremen yorkshirewomen yous yuzus zadruge zafus zaibatsus zakouski zakuski zambonis zamindaris zamis zanzibaris zastrugi zebus zeitgeister zemindaris zemis zemstva zeppole zetetics zeugmata zionazis zlotych zoa zoili zonohedra zoocytia zoodendria zooecia zoosporangia zoris zucchinis zugzwange zulus zunis zuzim zuzzim zyga zygantra zygomata zygomatici 5 GP bating excepting excluding including regarding 2 GR awing bleeping 4 U and or versus vs 1 B between 1 F from 4 I for in of on 2 PRV affor nigh 23 PR abaft aboard aboon afore agin agyen along alongside apart astride atop ayein ayen ayond ayont below beneath besides endlong forbye imell notwithstanding throughout 2 PV belong except 75 P abaht aboot about acrost aftah afther against ago ahn aka amid amidst among amongst anear apres arter at athwart atwix befo behither bencath benorth beside betune betwixt bewest bove by chez circa down during ere faw fer foreby furth gainst intiv into mauger neath off offa onto ontop out outta outwith per pon pre rel since than thru til toward towards twixt umb umbe under until up upon via wid wif with within without wiv 1 Q as 1 T to 17 RV abraid abroach bareback belive bereft betides caught chugalug dooced hyar ish multiply please pray rather sic whither 644 R aback abask abed ablings ablins abloom aborad abread abreast abuilding aburst acapella acock acockbill adagissimo adance afar affrettando afield aflare afloat afoot aforehand afoul afresh aft afterhind afterward afterwards again agewise aglee agley ahead ahold ahorseback aht ahull aiblins aight ajog ake aland alee aliter allargando allegretto allegrissimo allus aloft already also altogether always alwuz amain amidship amidships amock amok amuck anaphorical ance andantino anew anglewise antispinward anyhoo anyhow anymore anyplace anyroad anyway anyways anywhen anywhence anywhither anywho anywise apace apiece aport approx apriori arco arguendo aright arriswise artwise asahp asaic asap ashore assai assward asswards astraddle astray asunder aswell aswirl atcha athwartship athwartships atiptoe attacca aways aweather awhile awluz ayelp babywise barebacked barwise batspit battleward bce beachward beachwards bedeen bedward bedwards beforehand beggarwise belowdecks bendways bendwise betime betimes bimeby boldlier bookwise boxwise breadthways brushwise bulkwise businesswise capriccioso careerwise carpetward cashwise catwise certes chairward chevronwise churchward citywards classward cloudwise colorwise colourwise combwise comodo contrariwise cornerwise crescentwise crosslots crossways cuntward cupboardwise cupwise cyberstyle daint deasil deff deffo defo deosil deskward deuced disregardless divint doggo dogwise dolente dollarwise doosed downcourt downright downsection downwards downwind dreamward dreckley dropwise duncy eastwards ectad edgeways edgewise eliminable elsewhen elsewhence elsewhither elsewise endlang endways endwise enside entad ergo espressivo etc evar evermore everso everyplace everytime everyway everywhen everywhere facedown facefirst faceup featurewise fesswise flatwise foodwise foothot forasmuch forevermore fornigh forrard forthwith forthy freshlier frice fulltime furioso furthermore gatewise goalside goalwards godwards golfwise greenward groinward growthwise guisto halfway harshlier harshliest headforemost headling healthwise hellward hence henceforth henceforward hereabout hereabouts hereat hereaway hereby herein hereinabove hereinafter hereinbefore hereinto hereinunder hereish hereof hereon heretofore hereunder hereuntofore hereupon herewith hillwards hither hitherto hithertofore hoo hotelward however howso howsoever howsomdever iceward iinm imprimis inbye inchmeal indeed indeedie indeedy indoors infra insofar insomuch instanter instead inwards iow iwis jailward januarys jeah jildi jildy lacrimoso lamentoso landwards langsyne lapward lashwise leastaways leastways leastwise leftwards legerrio lief likewise limbmeal literatim loadsa longways longwise looard lookswise loverwise madonnawise maestoso makai manwise mapwise marcato mauka mayhaps mebbe mebby memberwise midbite midbow midleap midperformance midphrase midplay midpursuit midrun midset midships midstep midstretch midstride midtrip militarywise mirrorwise moar modificatory moneywise moonwise morendo moreover mouthward mouthwards natch nathless nauther nebber nerehonde nevah never nevermore nevertheless nobbut nohow nonetheless noo nopers noplace northwards not nowadays noway noways nowheres nowhile nuch obvi obvs offkey oft often oftener oftenest oftentime oftentimes ofter oftest ofttimes once onwards oop orad othertimes otherways otherwhere ottava outbye outwards overleaf pagemeal palewise parkward partway passim perchance perforce perhaps peripherad permyriad phantomwise phoneward phonewise pianississimo pickaback piecewise plankwise plantwise policywise portato posthaste praps precipitato profitwise pronto qua qualitywise quantitywise quindicessima quite rathering ratherish redhanded regretable riffwise rightwards ritardando roofward sackwise sacrad saddlewise saleswise saltirewise saturdays scarfwise scilicet scissorwise scotfree scrollwise seasonabliest seawards secus seldom seldomer seldomest selfward sempre seriatim shelfward shieldwise shipward shipwards shirtwise shopward shopwards shorewards shuttlewise sidewise sightwise simpliciter sinkward sizewise skyward sleepward sleepwise slopewise slowlier slowliest smorzando snakewise someday somehow someplace sometimes someway somewhat somewhen somewhere somewhither somewhy soonish sooo soooo soundwise southwards spaceward spadewise spinward spoonwise stageside starwards stationward sternwards storeward straightforth subito sundays sunwards sunwise supra swithe tableward tablewards tablewise talewise tastewise taxwise teamwise tentwise thataway thence thenceforth thenceforward thenceforwards thereabout thereabouts thereafter thereagainst therearound thereat thereatop therebefore therebetween therebeyond thereby therefor therefore therefrom therein thereinafter thereinbefore thereinunder thereof thereon thereover therethrough therethroughout theretofore thereunder thereupon therewith therewithal thighward thisaway thither tho thor though thrice thur thursdays thuswise timewise tomorn too townwards toyear trafficwise transitionary treeward truthwards ttr tuesdays tunicwise tuskwise twelvefold twice unawares unbeknownst underseas unoften unwares upcourt upriver upsection upward upwards valleywards varry verrry vicibus videlicet visionwise viz waterward waterwards weatherwise wedgewise wednesdays weightwise westwards whar whatsay whence whenceforth whencever whenever whensoever whereabout whereafter whereby wherefor wherein whereinto wheresoever whereunto wherever whitherever whithersoever whitherward whyever whysoever widdershins widelier wideliest withal withershins withinside yance yeah yeap yeppers yer yestereve yestermonth yfere yis youthward yowzah yuppers yus zillionfold 16377 V abacinate abacinates abalienate abalienates abands abase abases abash abashes abastard abastardize abastardizes abastards abbreviates abdicate abdicates abduce abduces abduct abducts abear abears aberrate aberrates aberrs aberuncates abet abets abhor abhors abide abides abies abirritate abirritates abite abjoint abjudge abjudges abjudicate abjudicates abjugates abjure abjures ablactate ablactates ablaqueate ablaqueates ablate ablates ables abligates abludes ablute ablutes abnegate abnegates abnormalise abnormalises abnormalize abnormalizes abolish abolishes abolitionize abolitionizes abominate abominates abomines abought abound abounds abrade abrades abraids abrases abray abreact abreacts abrenounces abridge abridges abroaches abrogate abrogates abrook abrooks abscind abscinds abscise abscises abscisses abscond absconds absents absinthiate absinthiates absists absolue absolutise absolutises absolutize absolutizes absolve absolves absorb absorbs absquatulate absquatulates abstain abstains absterge absterges absterse absterses abstractifies abstractify abstrict abstricts abstringe abstringes abstrude abstrudes absumes abut abuts abuy abvolate abvolates aby abye abyes academicize academicizes academize academizes accede accedes accelerates accend accends accentuate accentuates accept accepts accesses accessorise accessorises accessorize accessorizes accinges accites acclamate acclimate acclimates acclimatise acclimatises acclimatize acclimatizes accloy accloys accoasts accoil accoils accolls accommodate accommodates accompanies accompany accompanying accomplish accomplishes accorporates accosts accouche accouches accouple accouples accourages accourts accouter accouters accoutre accoutres accoys accredit accredits accresce accresces accretes accriminate accriminates accroach accroaches accrue accrues acculturate acculturates accumbers accumulates accurize accurse accurses accuse accuses accustom accustomize accustoms acerbates acervates acetifies acetify acetize acetizes acetylate acetylates achieve achieves achieving achromatise achromatises achromatize achromatizes acidifies acidify acidize acidizes acidulate acidulates acierate acknew acknow acknowledge acknowledges acknown acknows acquaint acquaints acquiesce acquiesces acquiets acquire acquires acquit acquits acronymize acronymized acronymizes acting activate activates actualise actualises actualize actualizes actuate actuates acuates acuminates acupunctuate acutes acylate acylates adapts addeem addeems addooms adduce adduces addulce addulces adeem adeems adempt adempts adenylates adhere adheres adhibit adhibits adjectivize adjoin adjoins adjourn adjourns adjudge adjudges adjudicate adjudicates adjure adjures adjust adjusts adjutes admeasure admeasures administer administers administrate administrates admire admires admit admits admix admixes admixt admonish admonishes adnominalize adnominalizes adolesce adolesces adonize adonizes adopt adopts adore adores adorest adorn adorns adrenalectomize adrenalectomizes adrenalise adrenalises adrenalize adrenalizes adsorb adsorbs adsorp adsorps adulate adulates adulterates adulters adultize adultizes adumbrate adumbrates advect advects advene advenes adverbialise adverbialises adverbialize adverbializes advertise advertises advertizes adviews advise advises advoke advokes aerate aerates aerifies aerify aerobicize aerobicizes aerosolise aerosolises aerosolize aerosolizes aesteems aestheticise aestheticises aestheticize aestheticizes aestivate aestivates afears affamishes affears affectest affectionates affeers affiance affiances affies affirm affirms afflict afflicts affoards affoords afforce afford affords afforest afforests affors affranchise affranchises affranchize affranchizes afoords africanise africanises africanize africanizes aftersee afterthink againbuy againsay againstand agatize agatizes aggerate aggerates agglomerates agglutinates aggrace aggraces aggrade aggrades aggrandise aggrandises aggrandize aggrandizes aggravate aggravates aggrege aggreges aggresses aggrieve aggrieves aggroes aggroups agist agists agitate agitates agnises agnizes agnominate agnominates agoes agone agonise agonises agonize agonizes agree agrees agriculturalize agriculturalizes agriculturize agrises agues aguises airdash airdashes airfreights airmails airt airts ajaxifies ajaxify akens akes akether aks albuminize alchemise alchemises alchemize alchemizes alcoholise alcoholises alcoholize alcoholizes algorithmize algorithmizes alibies alienates alights align aligns aline alines alit alkalifies alkalify alkalinise alkalinises alkalinize alkalinizes alkalize alkalizes alkylate alkylates allay allays allege alleges allegorise allegorises allegorize allegorizes alleviate alleviates allide allides alliterate alliterates allocate allocates allocute allocutes allot allots allow allows allude alludes allures alphabetise alphabetises alphabetize alphabetizes alter altercate altercates alters aluminise aluminises aluminize aluminizes aluminumize amalgamate amalgamates amass amasses amay amazes ambiguate ambiguates ambulate ambulates ameliorate ameliorates amend amerce amerces americanise americanises americanize americanizes ameses aminate aminates ammoniates ammonifies ammonify amortise amortises amortize amortizes amoves amplifies amplify amputate amputates amscray amuse amuses anaesthetise anaesthetises anaesthetize anaesthetized anaesthetizes anagrammatise anagrammatises anagrammatize anagrammatizes analogise analogises analogize analogizes analyse analyze analyzes anathematise anathematises anathematize anathematizes anatomise anatomises anatomize anatomizes anears aneles anesthetize anesthetizes angers anglicise anglicises anglicize anglicizes angsts angulates animadvert animadverts animalize animalizes animates ankylose ankyloses anneal anneals annihilate annihilates annoint annoints annotate annotates announce announces annualise annualises annualize annualizes annul annuls annunciate annunciates anodise anodises anodize anodizes anoint anoints anonymise anonymises anonymize anonymizes antagonise antagonises antagonize antagonizes antecede antecedes antecipate antecipates antedate antedates antes anthologise anthologises anthologize anthologizes anthropize anthropizes anthropomorphise anthropomorphises anthropomorphize anthropomorphizes antialias antialiases anticipate anticipates anticorrelate antioxidize antioxidizes antiquate antiquates antisepticise antisepticises antisepticize antisepticizes antithesize antithesizes aphorise aphorises aphorize aphorizes apocopates apodize apodizes apologise apologises apologize apologizes apostatise apostatize apostatizes apostemate apostrophise apostrophises apostrophize apostrophizes apotheosise apotheosises apotheosize apotheosizes appal appall appalls appals apparate apparels appeaches appear appears appease appeases apperceive apperceives appertain appertains appetise appetises appetize appetizes applaud applies applying appoint appoints apportion apportions appose apposes appraise appraises appreciate appreciates apprehend apprehends appress appretiate apprise apprises apprize apprizes approbate appropinquate appropriates approprinquates approve approves approximates aquacises arabise arabises arabize arabizes araises arbitrate arbitrates arborise arborises arborize arborizes archaize archaizes arcweld arcwelds argue argues argufies argufy arise arises arising arizes armors armours aroints aromatise aromatises aromatize aromatizes arose arouse arouses aroze arpeggiate arpeggiates arraign arraigns arrange arranges arrive arriven arrives arrogate arrogates arrove arterialize articulates artificialize artificializes artuate artuates ascend ascends ascerbates ascertain ascertains ascribe ascribes asearches asexualise asexualises asexualize asexualizes ashame ashames asks aslake aslakes asperates asperse asperses asphalts asphyxiate asphyxiates aspire aspires asplode asplodes assail assails assains assassinate assassinates assemble assembles asserts assess assesses asseverate asseverates assibilate assiege assimilate assimilates assoil assoils assoilzie assonate assonates assort assorts assoyle assoyles assran assrape assrun assruns assuage assuages assubjugates assume assumes assure assures asswages ast astonies astonish astonishes astound astounds astrict astricts astringe astringes astrogate astrogates astroturfs ate atheise atheises atheize atheizes athetize athetizes atomise atomises atomize atomizes atone atones atrede atren attach attaches attain attains attaints attask attemper attempers attend attends attenuates attest attests attires attitudinise attitudinises attitudinize attitudinizes attorn attorns attract attracts attrit attrites attrits attuite attuites attune attunes atwite augle augments aurifies aurify auscult auscultate auscultates auspicates austemper austempers austenitize austenitizes australianise australianises australianize australianizes australize australizes auth authenticate authenticates authorise authorises authorize authorizes auths autoactivate autoactivates autoamputate autoamputates autoboot autoboots autocatalyse autocatalyses autocatalyze autocomplete autocompletes autoconfigure autoconfigures autodelete autodeletes autodestructs autodetect autodetects autofocuses autofocusses autoformat autoformats autogenerate autogenerates autohid autohide autohides autoinhibit autoinhibits autoionize autoionizes autoload autoloads autolyse autolyses autolyze autolyzes automate automates automatised automatize automatizes automize automount automounts autophosphorylate autophosphorylates autoreact autoregulate autoregulates autosaves autoselect autoselects autostart autostarts autotune autotunes autoxidise autoxidises autoxidize autoxidizes avale avel avels aventres averruncate averruncates avers averses avert averts aviate aviates aviles avises avocates avoid avoids avouch avouches avow avows avulse await awaiteth awaken awakens awakes awarn awarns awent awes awhape awhapes awoke awroth axiomatise axiomatises axiomatize axiomatizes ayield azotise azotises azotizes azures babbles babelize babelizes babifies babify babysat babysit babysits bachs backbit backcasts backcheck backchecks backcomb backcombs backdate backdates backfoot backgammons backhauls backlists backload backloads backpedal backpedals backport backports backpropagate backpropagates backreact backread backreads backscratch backscratched backscratches backslap backslapped backslaps backslid backslide backslides backspun backstab backstabs backtalks backtest backtests backtracks backwound bacterize bacterizes bade badmouth badmouths baggs bagses bagsie bagsy bails bakes balkanise balkanises balkanize balkanizes balks ballasts bamboozle bamboozles bamfoozle bamfoozles banalise banalises banalize banalizes bandies bangalore bangalores banhammers banish banishes banjaxes bankrupts banninate banters baptise baptises baptize baptizes barbarize barbarizes bares barfs barhop barhops barnstorm barnstorms bartend bartends bask basks bastardise bastardises bastardize bastardizes baste bastes bastonade bates bathes bauf bawl bawls bbq bearing beath beatifies beatify beautifies beautify bebleed beblot beblubber beblur bebops bebother bebothers becall becalm becalms became bechances beckon beckons beclothes becloud beclouds become becomes becover becripple becue bedabble bedabbles bedare bedark bedarken bedarkens bedash bedaub bedaubs bedaze bedazes bedazzle bedazzles bedeck bedecks bedelve bedevil bedevils bedew bedews bediaper bedim bedims bedinner bedizens bedo bedoubt bedraggle bedraggles bedrops bedusts bedwet beeswaxes befalls befang befeather befeathers befell befie befight befile befind befit befits befitteth beflake beflatter beflay beflea beflee beflow befly befoam befog befogs befold befools befoul befouls befriend befriends befuddle befuddles began beganst begaud begay begem beget begets begink begins begird begirdle begirdles begirds beglooms begot begown begrave begrime begrimes begrudge begrudges beguile beguiles beguilty behap behappen behat behate behave behaves behead beheads behear beheart behell behelm behew behight behold beholds behoney behoove behooves behorn behove behoves behowl bejewel bejewels bejumble beken bekiss beknave beknight beknit beknow belabor belabors belabour belabours beladle belap belate belates belaud belave belaves belawgive belead beleaguer beleaguers beletter belick belie belies believe believes belifans belight belime belittle belittles belives bellycrawl bellyflop bellyflops belock belongs belord belout belove bemad bemask bemaze beme bemean bemerd bemerds bemete bemingle bemire bemires bemist bemoan bemoans bemourn bemud bemuds bemuse bemuses benames benegro benempt benet benight benights benote bentsh bentshes benumb benumbs bepaint bepaints bepat bepearl bepelt bepelts bepinch bepinches bepiss bepisses bepities beplaster beplasters bepommel bepommels bepowder bepowders bepraise bepraises beprose bepurple bepurples bequeath bequeaths bequiver bequivers berate berates beray berays bereave bereaves berhyme berhymes beribbon beribbons berime berimes bes bescatter bescreen besee beseech beseeches beseek beseems beset besets beshine beshrew beshrews beshroud beshut besiege besieges besit beskirts beslabber beslabbers beslave beslaver beslavers beslaves beslime beslimes beslobber beslobbers besmear besmears besmirch besmirches besmoke besmooth besmut besmutch besnow besnowball besnowballs besnows besnuff besoil besot besots besoul besouls besour bespangle bespangles bespatter bespatters bespawls bespeaks bespeckle bespeckles bespell bespells bespend bespit bespittle bespoil bespoils bespot bespread besprenges besprent besprinkles bestain bestand bestead besteads besteals bestialize bestializes bestick bestill bestir bestirs bestole bestood bestorm bestow bestows bestraddle bestreak bestrew bestrews bestride bestrides bestrode bestud beswaddle beswike beswinge beswink betag betail betake betakes betalk betallow betaught beteach betear beteem betell betells bethink bethinks bethought betide betine betoken betokens betold betook betray betrays betroth betroths bewail bewails bewake beware bewash beweep beweeps bewent bewept bewet bewets bewhisper bewhore bewield bewilder bewilders bewimple bewinter bewitch bewitches bework bewray bewrays bewreak bewreck bewrite bewrites bewrote bibble bibblebabbles bibbles bibulate bicker bickers bide bides bield bifurcates biggen bilk bilks bilocate bilocates binarise binarize bioaccumulate bioaccumulates bioactivate biodegrade biodegrades biographise biographises biographize biographizes biomagnifies biomagnify biomineralize biomineralizes bioremediate biosynthesise biosynthesises biosynthesize biosynthesizes birdsat birdsit birdsits birle bist bitbuckets bituminise bituminises bituminize bituminizes bivouacks blabs blacken blackens blackmails blackmark blackmarks blacktops blags blames blameshift blameshifts blanches blandifies blandify blandish blandishes blarneys blathers blats blatters blears bleats blech bleches bleeds blench blenches blenderize blenderizes bless blesses blet blets blew blights blithers blooden bloodens bloodies bloop bloops bloviate bloviates blub blubbers blubs bludges bluejack bluejacks blunge blunges blunk blurt blurts boak boaks bobars bobbars bobbitt bobbitts bodges bodyslams bodysurf bodysurfs boffs boggle boggles boink bolden boldens bolds bolix bolixes bolk bollixes bollockses bombinate bombinates bonjour boobytrap boobytraps boohoo boohoos bookcross bookcrosses bookkeep bootlick bootlicks boozes borks bornin bornt bose bosonise bosonises bosonize bosonizes botanise botanises botanize botanizes botrytize bought bouse bouses bowdlerise bowdlerises bowdlerize bowdlerizes bowge bowk bowkin bowks bowse bowses brachiates brags brainwashes brandishes brandwash brang brattle brattles brawns braze brazens brazes breadthen breadthens breastfeed breastfeeds breathalyse breathalyses breathalyze breathalyzes breathe breathes brenned brens brian brighten brightens brilliantines brines brings brivet brivets broaden broadens broddle broddles brode broiders brominate brominates brought browbeat browbeats browses browzes bruit bruits brumate brutalise brutalises brutalize brutalizes brux bruxes budge budges budnamed buffets bulbectomize bulbectomizes bulldoze bulldozered bulldozes bulletinize bulletinizes bulletproofs bullshat bullshits bullyrag bullyrags bumbazes bumfuzzle bumfuzzles bunds burbles bureaucratize bureaucratizes burgeon burglarise burglarises burglarize burglarizes burgle burgles buries burnish burnishes burnt bushbash bushwack bushwacks bushwhack bushwhacks busies busticate busticates buttle buttles buttonholes butylate butylates bycaught byheart cachinnate cacks cacumate cadgin caffeinate caffeinates cahoot cajole cajoles calcifies calcify calcinate calcine calcines calculate calculates calefy calendarize calendarizes calibrate calibrates calligraph calumnate calumniate calumniates calve cambers camcord camcords cameth canadianise canadianize canadianizes canalise canalises canalize canalizes cancans cancerate cannibalise cannibalises cannibalize cannibalizes cannulate cannulates canonicalize canonicalizes canonise canonises canonize canonizes canoodle canoodles cantillate capacitate capacitates capitalise capitalises capitalize capitalizes capitulate capitulates caponize caponizes capsize capsizes capsulize capsulizes captivate captivates carabine carabines caramelise caramelises caramelize caramelizes carboard carboards carbonatise carbonatises carbonatize carbonatizes carbonify carbonise carbonize carbonizes carbonylate carburet carburets carburize carburizes carcade carcades cardinalize cardiovert cardioverts careen careens carefront caress caretake caretakes caretook carjack carjacks carmelize carmelizes carnalize carnalizes carouse carouses carshare carshares cartelize cartelizes carve carves casefies casefy caseharden casehardens cashes castellate castigate castigates castrate castrates casualise casualises casualize casualizes catabolize catabolizes catalanize catalyse catalysize catalyze catalyzes catastrophize catastrophizes catechise catechises catechize catechizes categorifies categorify categorise categorises categorize categorizes catenate catenates cater catermaul catermauls caterwauls cathect catheterise catheterises catheterize catheterizes catsit catsits caulks cauponize cauterise cauterises cauterize cauterizes cavils cavitate cavitates cavort cavorts cease ceases cede cedes ceils celebrate celebrates celestialize cense censures centesimate centralise centralises centralize centralizes cerebralise cerebralises cerebralize cerebralizes cerebrate certifies certify chack chacks chafes chaffers chaffs chagrins chalks champs channelize channelizes channelled chaptalize characterise characterises characterize characterizes charbroil charbroils chargrill chargrills charlies chasten chastens chastise chastises chasts chatters chaulks chavel cheapen cheapens cheerlead cheerleads chelp chemisorb chemisorbs chemosorb chemosorbs cherish cherishes cherrypick cherrypicks chiack chiacks chide chides childmind childminds childproofs chillax chillaxes chillaxin chirally chitter chitters chlorinate chlorinates chlorinise chlorinises chlorinize chlorinizes chloroforms choose chooses chope chor choreograph choreographs chorrin chors chose chouse christen christens christianise christianises christianize christianizes chromes chronologise chronologize chugalugs chumble chumbles chunders chunter chunters chupse churr churrs chuses cicatrise cicatrize cimmerianize cimmerianizes cinched cinematise cinematises ciphers circularise circularises circularize circularizes circulate circulates circumambulate circumambulates circumcise circumcises circumcizes circumflect circumfuse circumfuses circumgyrate circumlocute circummure circummures circumnavigate circumnavigates circumnutate circumrotate circumscribe circumscribes circumstantiate circumstantiates circumundulate circumvallate circumvallates circumvent circumvents circumvolute circumvolve circumvolves cite citifies citify civilianize civilianizes civilise civilises civilize civilizes clabbers clad clads clags clamber clambers clarifies clarify classicalize classicise classicises classicize classicizes classifies classify clavers cleanse cleanses clears cleaves clenches clepes clicket clickjack cliffhang cliffhangs cliffhung climbs clinches clintonize clipt clitoridectomize closen closens closes clothe cloverleafs cloy cloys clubhaul clubhauls clucks cludged clumb clumps clutters cnawvshawl coact coacts coadsorb coagulates coalesce coalesces coalises coalizes coapplies coapply coarsen coarsens coarticulate coarticulates coassemble coassembles coasts coaxes cobrand cobrands cockneyfies cockneyfy cocreate cocreates cocrystallize coddle coddles codenature codesign codesigns codetermine codge codges codifies codify codisplay codiverge coedit coedits coeducate coeducates coelute coelutes coenrich coenriches coerce coerces coevolve coevolves coexert coexist coexists coexpose coexposes coexpress coexpresses coextend coextends cofire cofires cofound cofounds cogenerate cogenerates cogitate cogitates cognise cognises cognize cognizes cohabit cohabitate cohabitates cohabits cohaere cohaeres cohere coheres cohobate coiffe coimmunoprecipitate coimmunoprecipitates coincide coincides coinhabit coinhabits coinsure coinsures coldcock coldcocks coll collaborate collaborates collate collateralise collateralises collateralize collateralizes collates collectivise collectivises collectivize collectivizes collide collides colligate colligates collimate collimates collineate colliquate collocates colloquialize colloquializes colloquize colls collude colludes collusitate colocalised colocalize colocalizes colocate colocates colonise colonises colonize colonizes colorate colorize colorizes colourise colourises colourize colourizes colport colports columbaries columnize columnizes comarket comarkets combusts comes comigrate comigrates comixes commandeer commandeers commemorate commemorates commence commences commend commends commentate commentates commerces commercialise commercialises commercialize commercializes comminate comminates commingle commingles comminute comminutes commiserate commiserates commits commix commixes commodifies commodify commoditise commoditises commoditize commoditizes commonise commonises commonize commonizes commove commoves communalise communalize communicate communicates communifake communise communises communize communizes commute commutes comove comoves compactifies compactify compare compares compart compartmentalise compartmentalises compartmentalize compartmentalizes comparts compel compels compenetrate compensate compensates compete competes compilates compiles complain complains compleats complect complects completes complexifies complexify complicates complies comply componentize componentizes comport comports compose composes composts comprehend comprehends comprendo comprise comprises comprising compute computerise computerises computerize computerizes computes concatenate concatenates conceal conceals concede concedes conceive conceives concelebrate concenter concenters concentre conceptualise conceptualises conceptualize conceptualizes concertize concertizes concerts conciliate conciliates conclude concludes concluding concoct concocts concomitate concomitates concretes concretise concretises concretize concretizes concur concurs concuss concusses condemn condemns condense condenses condescend condescends conditionalize conditionalizes condole condoles condone condones conduce conduces confabulate confabulates confect confer conferruminate confers confess confesses confessionalise confessionalises confessionalize confide confides configure configures confirm confirms confiscate confiscates conflagrate conflagrates conflate conflates conform conforms confound confounds confront confronts confuddle confuscate confuse confuses confusticate confusticates confutes confuzzles congeal congeals congest congests conglobates conglobe conglobes conglobulate conglutinate conglutinates congratulate congratulates congregates conjects conjoin conjoins conjugating conjures conn connect connects connive connives connotate connotates connote connotes conns conquer conquers consecrate consecrates conservate conservates consider considering considers consign consigns consisting consists consolidate consolidates conspire conspires constate constellate consternate consternates consters constipate constipates constitute constitutes constitutionalise constitutionalises constitutionalize constitutionalizes constrain constrains constrict constricts constringe construes consume consumerize consumerizes consumes consummates contain containerise containerises containerize containerizes containing contains contaminate contaminates contemn contemns contemplate contemplates contemporize contend contends contextualise contextualised contextualises contextualize contextualizes continues contort contorts contracept contradict contradicts contradistinguish contradistinguishes contraindicate contraindicates contrasts contravene contravenes contribute contributes contrist contrists contrive contrives controvert controverts contuse contuses convalesce convalesces convect convects convene convenes conventionalise conventionalises conventionalize conventionalized conventionalizes converge converges conversate conversates converses convexify convey conveyorise conveyorize conveyorizes conveys convince convinces convoke convokes convolutes convolve convolved convolves convulse convulses cooccur cooccurs cools cooperate cooperates coopt coopts coos coown coowns copaid copolymerize copperfasten coprecipitate coprecipitates copresents coproduce copromote copromotes copublish copublishes copulate copulates copurifies copurify copyedit copyedits copylefts copyread copyreads copywrite copywrites copywrote coralise coralises coralize coralizes cornifies cornify cornute cornutes coronate coronates corotate corotates corporatise corporatises corporatize corporatizes corrade corrades corrects correspond corresponding corresponds corrivals corroborate corroborates corrode corrodes corrugate corrugates corrupts corruscate corruscates coruscate coruscates cosediment cosediments cosegregate cosegregates cosher coshers cosign cosigns cosleep cosleeps coslept cosplays costain cosupervise cosupervises cotransfect cotransfects couldest couldst counteract counteracts counterargue counterargues counterassert counterasserts counterattract counterattracts counterchange counterdraws counterdrew counterilluminate counterilluminates countermands countermine counterpose counterposes counterprogram counterprograms countersang countersank countersings counterstruck countersue countersues countervail countervails countifies countify countrifies countrify countryfies countryfy covariantize covariantizes covaries covary coventrate coventrates covet covets cowardize cower cowers cowrite cowrites cowritten cowrote cozens craigslist craigslists crapflood crapfloods crave craves crazes creaseproofs create creates credences creeds creepifies creepify cremate cremates crenelate crenelates crenellate crenellates creolise creolises creolize creolizes crepitate crept cretinise cretinises cretinize cretinizes cribble criminalise criminalises criminalize criminalizes criminate criminates crispen crispens criticise criticises criticizes croon croons croquets crossmatch crossreact crucifies crucify crunkle cryofocus cryofocuses cryopreserve cryopreserves cryoprotect cryoprotects crystalise crystalises crystalize crystalizes crystallise crystallises crystallize crystallizes cubiclize cubiclizes culminate culminates cultivate cultivates cumber cumbers cums cumulates curdle curdles curiousest curr curtail curtails curvet curvets cuss cusses customise customises customize customizes cutifies cutify cyberattacks cyberise cyberises cyberize cyberizes cybers cyberstalk cyberstalks cyclised cyclize cyclizes cyclodimerize cycloisomerize cyclomerize cyclotetramerize cyclotrimerize cytoreduce cytoreduces dabble dabbles daddle daddles daemonize daemonizes daintify damnifies damnify dampen dampens dampne dampproofs damps dandifies dandify dandle dandles dangles dangs daresay darken darkens darkle darns darraigns darrains dast daunt daunts daven davens dawdle dawdles dawt daydreamt daylit daysail daysails dazzle dazzles deacetylate deacetylates deacidifies deacidify deactivate deactivates deaden deadens deadenylate deadenylates deadpans deads deadsticks deaerate deaerates deafen deafens deafferents deagglomerate deagglomerates dealign dealigns dealkylate dealkylates deallocate deallocates dealt dealuminate dealuminates deamidate deamidates deaminate deaminates dearomatise dearomatises dearomatize dearomatizes dearrest dearrests deauthorise deauthorises deauthorize deauthorizes deaverage deaverages debag debags deballast deballasts debar debark debarks debarrass debarrasses debars debase debases debeak debeaks debeard debilitate debilitates deblend deblends debloat deblock deblocks deblur deblurs deboard deboards debond debonds debone debones deboss debosses debouche debounce debounces debranch debranches debride debrides debrief debriefs debrine debrines debruise debug debugs debulk debulks debunk debunks deburr deburrs decaffeinate decaffeinates decalcifies decalcify decalibrate decalibrates decamp decamps decant decants decapacitate decapacitates decapitalize decapitalizes decapitate decapitates decapsulate decarbonate decarbonates decarbonise decarbonises decarbonize decarbonizes decarbonylate decarbonylates decarboxylate decarboxylates decarburize decays deceases deceive deceives decelerate decelerates decellularise decellularize decellularizes decenter decenters decentralise decentralises decentralize decentralizes decentre decentres decertifies decertify dechlorinate dechlorinates dechristianize decide decides decimalise decimalises decimalize decimalizes decimate decimates decipher deciphers decivilise decivilises decivilize decivilizes declaim declaims declare declares declass declassifies declassify declaw declaws declimb decloak decloaks declolorise declutch declutter declutters decocainize decoct decocts decode decodes decohere decoheres decollate decollates decolonise decolonises decolonize decolonizes decolorise decolorises decolorize decolorizes decolourise decolourize decommission decommissions decommodifies decommodify decompactifies decompactify decompartmentalise decompartmentalises decompartmentalize decompartmentalizes decompensate decompile decompiles decompose decomposes decompress decompresses deconceptualise deconceptualises deconceptualize deconceptualizes decondition deconditions deconfine deconflict deconflicts decongest decongests deconsecrate deconsecrates deconstruct deconstructs decontaminate decontaminates decontextualise decontextualises decontextualize decontextualizes deconvolute deconvolutes deconvolve deconvolves decorate decorates decorrelate decorrelates decorticate decorticates decoupages decouple decouples decrements decreolize decreolizes decrepitate decries decriminalise decriminalises decriminalize decriminalizes decry decrypt decrypts deculturize deculturizes decumulate decunt decunts decussates dedicate dedicates dedifferentiate dedifferentiates dedisperse deduce deduces deduct deducts deduplicate deduplicates deein deek deekin deeks deeky deekyin deemphasise deemphasises deemphasize deemphasizes deems deepen deepens deepthroat deepthroats deescalate deescalated deescalates deexcite deface defaces defaecate defaecates defalcate defalcates defalks defame defames defamiliarise defamiliarises defamiliarization defamiliarize defamiliarizes defang defangs defat defatigate defats defecate defecates defeminise defeminises defeminize defeminizes defend defends defenestrate defenestrates defer defers defibrate defibrates defibrillate defibrillates defibrinate defibrinates defilades define defines defining definitize definitizes deflagrate deflagrates deflate deflates deflect deflects deflocculate deflocculates deflower deflowers defocus defocuses defog defoggers defogs defoliate defoliates deforest deforests deform deformalize deformalizes deforms defrag defragment defragments defrags defraud defrauds defray defrays defriend defriends defrizz defrizzes defrock defrocks defrost defrosts defund defunds defuse defuses defuzes degas degasses degauss degausses degazette degerm degerms deghettoize deghettoizes deglaciate deglaciates deglamorize deglamorizes deglaze deglazes deglobalise deglobalises deglobalize deglobalizes deglottalize deglottalizes deglove deglycosylate deglycosylates degrade degrades degranulate degranulates degrease degreases degum degums degunk degunks degust degustate degustates dehire dehires dehisce dehisces dehistoricize dehistoricizes dehook dehorn dehorns dehort dehorts dehull dehulls dehumanise dehumanises dehumanize dehumanizes dehumidifies dehumidify dehydrate dehydrates dehydrogenate dehydrogenise dehydrogenises dehydrogenize dehydrogenizes dehypnotise dehypnotises dehypnotize dehypnotizes deice deices deifies deify deign deigns dein deindex deindexes deindustrialise deindustrialises deindustrialize deindustrializes deinitialize deinitializes deink deinks deinstall deinstitutionalise deinstitutionalises deinstitutionalize deinstitutionalizes deinterlace deinterlaces deionise deionises deionize deionizes deject dejects dejunk dejunks delabialize delabializes delaminate delaminates delegalize delegalizes delegitimate delegitimates delegitimatise delegitimatises delegitimatize delegitimatizes delegitimise delegitimises delegitimize delegitimizes delevel delevels deleverage deleverages deliberates delicense delimb delimbs deliminate delimit delimitate delimitates delimits delineate delineates delink delinks delint delints deliquesce deliquesces delist delists deliver delivers delocalize delocalizes deloft delofts delouse delouses delude deludes deluster delustre delves demagnetise demagnetises demagnetize demagnetizes demanufactures demarcate demarcates demark demarket demarkets demarks demassify demast dematerialise dematerialises dematerialize dematerializes demaunds demeans demerge demerges demetallize demetallizes demethylate demethylates demilitarise demilitarises demilitarize demilitarizes demine demineralise demineralises demineralize demines demist demists demit demits demix demixes demob demobilise demobilises demobilize demobilizes demobs democratise democratises democratize democratizes demodulate demodulates demolish demolishes demonetise demonetises demonetize demonetizes demonise demonises demonize demonizes demonopolize demonstrate demonstrates demoralise demoralises demoralize demoralizes demosaic demosaiced demosaics demoss demosses demote demotes demotivate demotivates demulsifies demulsify demultiplex demultiplexes demutualise demutualises demyelinate demyelinates demystifies demystify demythologise demythologize demythologizes denasalize denasalizes denationalise denationalises denationalize denationalizes denaturalise denaturalize denaturalizes denature denatures denaturize denervate denib denibs denies denigrate denigrates denitrified denitrifies denitrify denitrogenate denitrogenates denominate denominates denormalise denormalises denormalize denormalizes denote denotes denounce denounces densifies densify denuclearise denuclearises denuclearize denuclearizes denude denudes deny deodorise deodorises deodorize deodorizes deodourise deodourises deoil deoils deop deops deoptimize deoptimizes deorbit deorbits deoxidise deoxidises deoxidize deoxidizes deoxygenate deoxygenates depacketize depacketizes depaint depaints depalletize depalletizes depanelize depanelizes depants depantses depart departmentalise departmentalises departmentalize departmentalizes departs depasture depastures depatriarchalize depatriarchalizes depauperates depave depaves depend depending depends depersonalise depersonalises depersonalize depersonalizes depetal depetals dephase dephases dephlogisticate dephlogisticates dephosphorylate dephosphorylates dephysicalize dephysicalizes depict depicts depigment depigments depilate depilates deplane deplanes deplete depletes deplore deplores deploy deploys depolarise depolarises depolarize depolarizes depolish depolishes depoliticalize depoliticise depoliticises depoliticize depoliticizes depolymerised depolymerize depolymerizes depone depopulate depopulates deport deports depose deposes deprave deprecate deprecates depreciate depreciates depredate depredates depress depresses depressure depressures depressurise depressurises depressurize depressurizes deprioritise deprioritises deprioritize deprioritizes deprivatize deprivatizes deprive deprives deprogram deprogramme deprograms deproject deprojects deprotect deprotects deproteinize deproteinizes deprotonate deprotonates depublish depucelates depurate depurates depute deputes deputise deputises deputize deputizes dequantize deracemize deracemizes deracinate deracinates deradicalise deradicalises deradicalize deradicalizes deraign deraigns derails derains derandomise derandomises derandomize derandomizes derange deranges derat derate derates derats derecognise derecognises derecognize derecognizes dereference dereferences deregister deregisters deregulate deregulates dereligionise dereligionises dereligionize dereligionizes derepress derepresses derequisition derequisitions deres derestrict derez derezz derezzes deride derides derivatize derive derives derogate derogates derograte derogrates deromanticise deromanticises deromanticize deromanticizes desacralize desacralizes desalinate desalinates desalinize desalinizes desalivate desalt desalts desand desands desat desats desaturate desaturates descale descales descend descends deschool descope descopes descramble descreen descreens describe describes describing descries descry deseasonalize deseasonalizes desecrate desecrates deseed deseeds desegregate desegregates deselect deselects desensationalize desensationalizes desensitise desensitises desensitize desensitizes deserialise deserialises deserialize deserializes desertify deserve deserves desex desexes desexualise desexualises desexualize desexualizes deshuffle deshuffles desiccate desiccates desiderate desiderates desilver desilvers desilylate desist desists deskew deskews deskill deskills desocialise desocialises desocialize desocializes desolates desolder desorb desorbs desoul despairs desparple desparples despeckle despeckles despise despises despoil despoils despond desponds desponsate desponsates desport desports desquamate desquamates dessay destabilise destabilises destabilize destabilizes destandardize destandardizes destem destems destigmatise destigmatises destigmatize destigmatizes destimulate destimulates destine destines destock destress destroy destroys destruct destructs destructure destructures desugar desugars desulfur desulfurise desulfurises desulfurize desulfurizes desulfurs desulphur desulphurise desulphurize desulphurizes desymmetrize desynchronize desynchronizes detach detaches detain detains detangle detangles detartrate detartrates detassel detassels detect detects deter deterge deteriorate deteriorates determine determines determinize determinizes deters detest detests detext dethatch dethatches dethaw dethaws dethrone dethrones detin detins detonate detonates detort detorts detoxifies detoxify detract detracts detraditionalise detraditionalize detraditionalizes detrain detrains detrend detrends detribalize detumesce detune detunes deubiquitinate deubiquitinates deubiquitylate deunionise deunionises deuterate devalorize devalorizes devaluate devaluates devalue devalues devastate devastates devein deveins develop developes develops deverbalise deverbalises deverbalize deverbalizes deviled devilize devilizes devitalize devitalizes devitrifies devitrify devive devives devoice devoices devolve devolves devote devotes devour devours dewater dewaters dewax dewet dewets dewikifies dewikify dewire dewires deworm deworms diabolizes diagnose diagonalise diagonalises diagonalize diagonalizes dialyse dialyze dialyzes diarise diarises diarize diarizes diazotise diazotises diazotize diazotizes dib dichotomise dichotomises dichotomize dichotomizes did didder diddles diecast diecasts dieselise dieselize differ differentiate differentiates differs diffract diffracts diffuses digitalise digitalises digitalize digitalizes digitise digitises digitize digitizes dignifies dignify digress digresses dilacerate dilacerates dilapidate dilapidates dilatates dilate dillydallies dillydally dilutes dimensionalise dimensionalises dimensionalize dimensionalizes dimerise dimerises dimerize dimerizes diminish diminishes dims dine dines diphthongise diphthongises diphthongize diphthongizes directs dirempt dirempts dirties disable disables disabuse disabuses disaccustom disacknowledge disacknowledges disaffect disaffects disaffiliate disaffiliates disaffirm disafforest disafforests disaggregates disagree disagrees disallow disallows disambiguate disambiguates disannex disannexes disannul disannuls disapparate disapparates disappear disappears disapply disappoint disappoints disappropriate disappropriates disapprove disapproves disarm disarms disarrange disarranges disarticulate disassemble disassembles disassociate disassociates disavail disavails disavow disavows disband disbands disbar disbars disbelieve disbelieves disbowel disbowels disbud disbuds disburden disburdens disburse disburses discern discerns discides disclaim disclaims disclose discloses disclude discludes discolor discolors discolour discolours discombobulate discombobulates discomfit discomfits discommend discommends discommode discommodes discompose discomposes disconcert disconcerts disconfirm disconfirms discontinue discontinues discountenance discountenances discounts discourage discourages discover discovers discredit discredits discretise discretises discretize discretizes discriminate discriminates discrown discrowns discuss discusses disdains disembark disembarks disembarrass disembodies disembody disembogue disembogues disembowel disembowels disembroil disembroils disemburden disemburdens disemploy disemploys disempower disempowers disemvowel disemvowels disenchant disenchants disencumber disencumbers disenfranchise disenfranchises disennoble disennobles disenrol disenroll disenrolls disenrols disentangle disentangles disenthral disenthrall disenthralls disenthrals disenthrone disenthrones disentitle disentomb disentombs disentrance disentrances disequalize disestablish disestablishes disesteem disesteems disfellowship disfellowshiped disfellowships disfigure disfigures disforest disfranchise disfranchises disfrock disfrocks disgorge disgorges disgruntle disgruntles disgusts dishabituate dishabituates disharmonize disharmonizes dishearten disheartens dishevel dishevels dishonorest dishonoreth dishonors dishonours disillusionise disillusionises disillusionize disillusionizes disimprove disincarcerates disincarnates disincentivise disincentivize disincline disinclines disincorporate disincorporates disinfect disinfects disinfest disinfests disinform disinforms disinherit disinherits disinhibit disinhibits disintegrate disintegrates disinter disinterests disintermediate disintermediates disinters disinthral disinthrals disinvent disinvest disinvests disinvite disinvites disjoin disjoins disjoints disleaf disleafs disleave disleaves dislimb dislimbs dislocate dislocates dislodge dislodges dismantle dismantles dismask dismasks dismast dismasts dismays dismember dismembers dismiss dismisses disneyfies disneyfy disobey disobeys disoblige disobliges disordain disorganise disorganises disorganize disorganizes disorient disorientate disorientates disorients disown disowns disparages disparks dispart dispel dispels dispends dispense dispenses dispeople dispeoples disperse disperses dispirit dispirits dispises displace displaces displant displants displease displeases displume displumes dispone disport disports dispose disposes dispossess dispossesses dispraise dispraises dispreads disprefer disproportionates disprove disproves disqualifies disqualify disquantities disquiets disrate disrates disrecommend disrecommends disregards disrelishes disremember disrespects disrobe disrobes disrupt disrupting disrupts dissatisfies dissatisfy dissave dissaves dissect dissects dissemble dissembles disseminate disseminates disserve disserves dissever dissevers dissimilate dissimilates dissimulate dissimulates dissipate dissipates dissociate dissociates dissonate dissonates disspirit disspirits dissuade dissuades distain distantiate distastes distempers distend distends disthronizes distil distill distills distils distinguish distinguishes distort distorts distract distracts distrain distrains distresses distribute distributes distrusts disturb disturbs disunifies disunify disunite disunites dither dithers divagate divaricate divaricates divellicate diverge diverges diversifies diversify divert diverts divest divests divides divines divinise divinize divisionalize divulge divulges diys diz dizzies dmca dobs dodders doesna doesnae doff doffs dogfought dogmatize dognap dogsit dogsits dolbyize doles domiciliate domiciliates dominates domineer domineers donate donates dook doomsaid doomsay doomsays doot dorkifies dorkify dorsiflex dosses doublecheck doublechecks doubletrack doubletracks douse douses dout douts dow dowdifies dowdify downcasts downclimb downclimbs downcycle downcycles downface downlist downlists downmodulate downplay downplays downpress downpresses downrate downrates downregulate downregulates downscales downselect downselects downshift downshifts downsize downsizes downstroy downstroys downvotes downzone downzones dows doxes draggle drait dramatise dramatises dramatize dramatizes drank drat drate drats dreamt dreap dreaps dreep drees drenches dret dreve drew drf drite drites drivels droops drown drownd drowns drowses drub drubs druv drycleaners drycleans dryfire dryfires drygulch drygulches dryte drytt drywalls dualise dualises dualize dualizes duckwalk duckwalks duffs dulcify dulls dumbfound dumbfounds dumbs dumbsize dumfound dumfounds dunches dunchin dunsh dunshes dunshin dup dutchifies dutchify dwells dwelt dwindle dwindles dwine dynamise dynamises dynamites dynamize dynamizes dysphemize dysphemizes dysregulate dysregulates ean earmarks earn earns earnt earths eases easternise easternises easternize easternizes eat ebay ebays ebonize ebonizes eccentricate eche eches echolocate echolocates echoplex eclecticise eclecticises eclose economise economises economize economizes ecycle ecycles edifies edify editionalise editionalises editorialise editorialises editorialize editorializes educamate educamates educate educates educationalize educationalizes educe educes edulcorate edulcorates edumacate edumacates edutain edutains eff efface effaces effectuate effectuates effeminates effervesce effervesces effloresce effloresces effs effulge effuses egest egests egosurf egosurfs egresses ejaculates ejects ekes elaborates elapse elapses elasticate elasticates elasticise elasticises elasticize elasticizes elates eld eldens electioneer electioneers electrifies electrify electrocauterize electrocauterizes electrocute electrocutes electrolyse electrolyses electrolyze electrolyzes electrophorese electroshocks elects elegise elegize elegizes elevate elevates elicit elicits elide elides eliminate eliminates elix ellipt eloign eloigns elongates elope elopes elucidate elucidates elucubrate elucubrates elude eludes elute elutes elutriate emaciate emaciates emanate emanates emancipates emasculates embalm embalms embank embanks embark embarks embarrass embarrasses embattle embattles embay embays embed embeds embellish embellishes embetter embezzle embezzles embiggen embiggens embillow embitter embitters emblaze emblazes emblazon emblazons emblematize emblematizes embloom emblossom embodies embody embogues embolden emboldens embosom embosoms emboss embosses embowel embower embowers embrangle embrangles embraves embrighten embrightens embrittle embrittles embroider embroiders embroil embroils embrothel embrown embrowns embrue embrues embugger embuggers embus embuss embusy emend emends emerge emerges emigrate emigrates emit emits emote emotes emotionalise emotionalises emotionalize emotionalizes empanel empanels empathise empathises empathize empathizes emphasise emphasises emphasize emphasizes emphasizing empierce empierces emplace emplaces emplane emplores employs empoisons empolder empoverishes empower empowers emprises empurple empurples emulate emulates emulsified emulsifies emulsify emvowel emvowels enable enables enact enacts enamor enamors enamour enamours enantioenrich enblow encage encages encamp encamps encapsulate encapsulates encapture encaptures encase encases encash encashes encave encaves enchain enchains enchant enchants enchase enchases enchasten enchastens encipher enciphers encircle encircles enclasp enclasps enclines enclose encloses enclothe encode encodes encoffin encoffins encolden encoldens encompass encompasses encourage encourages encreases encrimson encrimsons encroaches encrust encrusts encrypt encrypts enculturate enculturates encumber encumbers encunt encunts encyst encysts endamages endanger endangers endarken endarkens endarks endear endears endocytose endocytoses endogenise endogenises endogenize endogenizes endolour endorse endorses endow endue enduers endues endure endures energise energises energize energizes enervates enfasten enfastens enfeeble enfeebles enfeoff enfeoffs enfever enfevers enflame enflames enfold enfolds enforce enforces enfranchise enfranchises engage engages engaol engaols engender engenders engird engirdle engirdles engladden engladdens englobe engloom englooms englut engluts engolden engoldens engorge engorges engrafts engrain engrains engrave engravens engraves engreatens engrieves engross engrosses engulf engulfs enhalo enhalos enhance enhances enharden enhardens enhearten enheartens enisle enjail enjails enjoin enjoins enjoy enjoys enkindle enkindles enlace enlaces enlarge enlargen enlarges enleague enlengthen enlengthens enlessens enlighten enlightens enlist enlists enliven enlivens enlock enmesh enmeshes enmildens ennoble ennobles enounce enounces enplane enplanes enqueue enqueues enquicken enquickens enquire enrage enrages enrapture enraptures enravish enravishes enregister enregisters enrich enrichen enrichens enriches enridge enridges enrings enripens enrobe enrobes enrol enroll enrolls enrols enroot enroots ensanguine ensanguines enscale enscales ensconce ensconces enseals enseams ensepulcher ensepulchers ensheath ensheathe ensheathes enshields enshrine enshrines enshroud enshrouds ensile enskies ensky enslave enslaves ensmallen ensmallens ensnare ensnares ensnarl ensnarls ensonify ensorcel ensorcell ensorcells ensorcels ensoul ensouls enstraiten enstraitens enstrengthens ensue ensues ensure ensures enswathe enswathes ensweeten ensweetens entangle entangles entering enterprises enters entertain entertains enthral enthrall enthralls enthrals enthrone enthrones enthronise enthuse enthuses entice entices entitize entitizes entitle entitles entituled entomb entombs entrain entrains entrammel entrammels entrap entraps entrench entrenches entres entrust entrusts enturbulate enturbulates entwine entwines entwist enumerate enumerates enunciate enunciates enure enures envelop envelops envenom envenomate envenomates envenoms envigorate envigorates environ envisage envisages envision envisions enwheel enwiden enwidens enwisen enwisens enwomb enwrap enwraps enwreathe enwreathes enwrite enzone enzones epilate epilates epimerize epithelialize epitomise epitomises epitomize epitomizes eponymize epoxidize equalise equalises equalize equalizes equate equates equidistribute equidistributes equilibrate equilibrates equip equipoises equiponderate equiponderates equips equivalate equivalates equivalise equivocate equivocates eradicate eradicates erase erases erects erize erme erode erodes eroticise eroticises eroticize eroticizes erotise erotises erotize erotizes err errs ers eruct eructs erupt erupts escalate escalates eschew eschews espies espouse espouses espy essentialize essentializes establish establishes esteems esterifies esterify estheticise estheticises estheticize estheticizes estivate estivates estop estops estrange estranges etch etches eternize etherealise etherealises etherealize etherealizes etherifies etherify etherise etherises ethifies ethify ethylate ethylates etiolate etiolates etymologise etymologises etymologize etymologizes euhemerize euhemerizes eulogise eulogises eulogize eulogizes euphemise euphemises euphemize euphemizes euroize europeanize europeanized europeanizes euthanase euthanasiate euthanatise euthanatises euthanatize euthanatizes euthanaze euthanise euthanised euthanises euthanize euthanizes eutrophicate evacuate evacuates evade evades evaginate evaluate evaluates evanesce evanesces evangelise evangelises evangelize evangelizes evaporate evaporates eventifies eventify eventuate eventuates evert everts evict evicts evince evinces evirate evirates eviscerate eviscerates evite evocate evoke evokes evolve evolves exacerbate exacerbates exacts exaggerate exaggerates exalts examine examines exasperate exasperates excarnates excavate excavates excede excedes exceed exceeds excel excels excepts excite excites exclaim exclude excludes excogitate excoriate excoriates excrete excretes excruciate excruciates exculpate exculpates excur excuss execrate execrates execute executes exeleutherostomize exemplifies exemplify exenterate exenterates exert exerts exeunts exfoliate exfoliates exhalate exhale exhales exhilarate exhilarates exhort exhorts exhume exhumes exiles exist exists exoculate exoculates exocytose exonerate exonerates exorcise exorcises exorcize exorcizes exoticise exoticises exoticize exoticizes expand expands expatiate expatiates expect expectorate expectorates expects expediate expediates expedite expedites expel expels expend expends expertize expiate expiates expire expires explain explains explicate explicates explode explodes explore explores exponentiate exponentiates exports exposit exposits expostulate expostulates expound expounds exprobates exprobrate exprobrates expropriate expropriates expugns expulse expunge expunges expurgate expurgates exsanguinate exsanguinates exscind exscinds exsiccate exsiccates exsolve exsolves extemporise extemporises extemporize extemporizes extend extends extenuate extenuates exteriorize exteriorizes exterminate exterminates externalise externalises externalize externalizes extinguish extinguishes extirpate extirpates extol extoll extolls extols extort extorts extradite extrapolate extrapolates extravasates extricate extricates extrude extrudes extubate exude exudes exult exults exuviate exuviates fabricate fabricates facepalms facilitate facilitates facks factifies factify factionalise factionalize factionalizes factorise factorises factorize factorizes faff faffs fails fainaigue fainaigues fains fak falsifies falsify falters familiarise familiarises familiarize familiarizes famish famishes fanaticise fanaticises fanaticize fanaticizes fand fangles fankle fantasise fantasises fantasize fantasizes faps fark farks farnesylate farnesylates farsee farspeaks farspoke fasciate fasciates fascinate fascinates fashin fasten fastens fatten fattens faze fazes feague feagues feal feaze februate februates feceate fecundate fecundates federalise federalises federalize federalizes federates fedex fedexes feebles feign feigns felch felches felicitate felicitates fellate fellates fellowfeel felts femininize femininizes feminise feminises feminize feminizes fends fenowed fergit fermionize fertilise fertilises fertilize fertilizes fester festers festinates fetched fetches fetishise fetishises fetishize fetishizes feudalise feudalises feudalize feudalizes fianchettos fiberize fiberizes fibrillate fibrillated fibrillates fictionalise fictionalises fictionalize fictionalizes fictionise fictionises fictionize fiddlefart fiddlefarts fiddlefuck fidges fieldstrip fieldstrips filch filches filks filmize filmizes filtrates finagle finagles finalise finalises finalize finalizes financialise financialises find finds finesses finetune finetunes finick finna finnicise finnicises finnicize finnicizes fireform fireproofs firtle fishifies fishify fisk fistfought fixate fixates fiz fizzles flabagast flabagasts flabaghasts flabbergasters flabberghasts flabergasts flabrigast flabrigasts flacker flagellates flameproofs flanks flappergast flappergasts flatlines flatten flattens flatulate flatulates flaunt flaunts flavors flay flays fledge fledges flee fleeces fleech fleeches fleer fleers flees flehm flehms flense flenses fleshes flew fley fleys flicks flighten flinches flitter flitters flobbergrast flobbergrasts flobs floccinaucinihilipilificate floccinaucinihilipilificates flocculate flocculates flog flogs floodproofs flote flounces flounders flours flout flouts floxes flubs fluctuate fluctuates fluidifies fluidify fluidize fluidizes flummox flummoxes flunk flunks fluoresce fluoresces fluoridate fluoridates fluorinate fluorinates fluster flusters fluxes flypost flyposts flyte foams focalise focalises focalize focalizes focusses foils foins foists folden foliates foller follers follow follows foment foments fondle fondles fook fooks fooster footles foots forbad forbade forbar forbid forbids forbise forbite forbodes forbore forbroke forbuy forclose forcloses forcover forcut fordid fordoes fordrive forebode forebodes forebore forecall forecheck forechecks forechoose foreclose forecloses foreconceive foredeclare foredeem foredesign foredestine foredetermine foredid foredo foredoes foredooms forefeel forefend forefends foregather foregathers forego foregoes foregoing foreheard forehears forehew foreignise foreignize foreignizes forejudges foreknew foreknow foreknows forelay forelifts foreordain foreordains foreran forerun foresaw foresee foresees foreshadow foreshadows foreshame foreshorten foreshortens foreshow foreshown foreslack forespend forestall forestalls forestals foreswear foreswears foreswore foresworn foretake foretaught foreteach foretell foretells forethink forethinks forewarn forewarns forewaste foreweigh forewent forewish forfare forfend forfends forgather forgathers forgave forget forgets forgit forgive forgives forgo forgoes forgot forgrow forhale forhold forhow forirk forlat forlay forleet forlend forlese forleses forlet forlets forlie forlighten forlive forlore formalise formalises formalize formalizes formates formicate formicates formularise formularize formulate formulates formylate forncast fornicates fornim forpamper forpass forpine forsaid forsake forsakes forsay forsays forsee forset forshake forshame forshape forshorten forshrink forslack forslip forslow forslowth forslug forsook forspare forspeak forspend forsta forstand forswallow forswear forswears forswelt forswink forswore fortake fortatter fortax forthcome forthdraw forthglide forthgo forthink forthlead forthlook forthnim forthpass forthspeak fortifies fortify fortravel fortread forwake forwalk forwander forwaste forwean forwear forweary forwelk forwent forwither forwound forwrap foryield fossick fossicks fossilate fossilates fossilifies fossilify fossilise fossilize fossilizes fotch fought found founds frack fractalize fractalizes fractionalize fractionalizes fractionate fractionated fractionates frain frains fraise fraist frak frap fraternalise fraternalises fraternalize fraternalizes fraternise fraternises fraternize fraternizes fraughts frazzle frazzles freeball freefallen freefalls freefell freeload freeloads freep freeps freestyles freet freezeproofs freights frenches frenchifies frenchify frequents freshen freshens fress fresses fretten friggle frighten frightens frisks frizzes frizzle frizzles frore froshes frostbit frosts froths frots froust frousts frover froze fructifies fructify frush frushes frustrates ftps fub fuckest fucketh fuddles fuggedaboudit fuggedaboutit fugued fuhgeddaboud fulfil fulfill fulfills fulfils fulgurate fulgurates fulls fumigate fumigates funambulate funambulates functionalize functionalizes fundraise fundraises funeralize funeralizes fungate funs furbish furbishes furcates furl furls furnishes furthers fustigate fustigates futter futters futureproofs futurise futurises futurize futurizes futzes fuzzes fuzzifies fuzzify gabble gabbles gack gacks gafiate gafiates gaincope gaingive gainsaid gainsay gainsays gainstand gainstands gainstood gallicise gallicises gallicize gallicizes gallivant gallivants galls galumph galumphs galvanise galvanises galvanize galvanizes gamahauchs gan gangle gangles gangst gank ganks gannin gans gapes garbages garble garbles gart gasface gasifies gasify gastrulate gastrulates gasts gatecrash gatecrashes gatekeeps gatekept gaup gauppin gaups gavages gave gawks gawp gawps gazinta gazump gazumps gedges geg gelatinise gelatinises gelatinize gelatinizes geminates genderize genderizes generalise generalises generalize generalizes generate generates genericise genericises genericize genericizes genlocks gentles gentrifies gentrify genuflect genuflects geocode geocodes geologize geologizes geometrize geometrizes geotag geotags germanize germanizes germinate germinated germinates gestate gestates gesticulate gesticulates get gets gezumph ghettoise ghettoises ghettoize ghettoizes ghostwrite ghostwrites ghostwrote gibbers gibes gild gilds girlcott girlcotts girlifies girlify girn girns gittin give gives giving glaciate glaciates gladden gladdens gladhand glamorise glamorises glamorize glamorizes glark glarks glassify glean gleans glid glidden glides glistens glitters globalise globalises globalize globalizes globetrot glom glomps gloms glope gloppen glore glorifies glorify glottalise glottalises glottalize glottalizes glowers glows gluck gmail gmails gnash gnashes gnaw gnaws gnosticise gnosticises goaltend goaltends gobble gobbles goffer goffers goin golfs gongoozle gongoozles gonno goofs googlebomb googlebombs gorgonize gorgonizes gormandize gormandizes gospelize gothicise gothicises gothicize gothicizes gots gourmandise gourmandize gourmandizes gove govern governing governmentalize governmentalizes governs gowls grabble grabbles gradate gradates graffitis grafts grammaticalise grammaticalises grammaticalize grammaticalizes grangerise grangerises grangerize grangerizes grants granularise granularises granularize granularizes granulate granulates graphitize grasscycle graticulate gratifies gratify gratinate gratinates graunch graunches gravels gravitate gravitates greaseproofs greases greatens greenify greenlight greenlights greenlit greenwashes greet gregarize grep greps grew gride grides grimes grok groks groundfishes grouts grovel grovels grow growes grows groze grozes grues grypes guddle guffs guiles guilts gunges guttle guttles gutturalize guzzles gwine gyrates gzip gzips haad habilitate habilitates habituate habituates hadna hadnae hadronise hadronises hadronize haesitates haet haets hafta haggle haggles hagride hagrides hagrode hails hakes hales hallucinate hallucinates halogenate halogenates halve hamshackle handfasts handpick handpicked handpicks handsels handsomes handwaved handwaves handwrite handwrites handwrote hangs hanker hankers happen happens happifies happify happroach haptenization haptenize haptenizes harass harasses harbors hardcode harden hardens hardwire hardwires hark harken harkens harks harmonise harmonize harmonizes harrass harries harry harshen harshes hasten hastens hastes hauls havens havocs headbang headbangs headdesk headdesks headhunt headhunts headquarter heal heals hear heard hearken hearkens hears hearten heartens heatproofs heats hebraize hebraizes heckle heckles hector hectors hedgehop hedgehops heerd heeze hegemonise hegemonises hegemonize hegemonizes heighten heightens held helicopt heliski heliskis hellenise hellenises hellenize hellenizes hemorrhages henches henpeck henpecks heparinise heparinises heparinize heparinizes hepps herborize herborizes hermitize hermitizes herniate herniates heroised heroize heroizes herry hesitate hesitates heterodimerize heterodimerizes heterodynes heteronormalize heteronormalizes hew hews hez hibernate hibernates hibernicize hibernicizes hid hidate hierarchize hierarchizes hies higgles highlit hightail hightails hinders hires hirple hirples hispanicize hispanicizes historicize historicizes hitchhike hitchhikes hivernate hivernates hmm hmms hoarsen hoarsens hobday hobnobs hochnehmen hockles hocklin hocus hogtie hogties hoick hoicks hoid hoida hoise holds holla hollers hollywoodize hollywoodizes homeschools homodimerize homodimerizes homodynes homogenise homogenises homogenize homogenizes homologate homologates homologize homologizes homopolymerize homosexualise homosexualises homosexualize homosexualizes homotope homotopes hondel hoodwink hoodwinks hopscotches horizontalize horizontalizes hork horks hornifies hornify hornswoggle hornswoggles horrifies horrify horseplays horsetrade hospitalise hospitalises hospitalize hospitalizes hotpress hotpresses hotwire hotwires housebreak housebreaks housebroke houseclean housecleans housekeep housekeeps housekept housel housesat housesit housesits housetrain housetrains hove hoved hoven hover hovers hoyin humanifies humanify humanise humanises humanize humanized humanizes humbles humectates humidify humify humiliate humiliates humorise humorises humorize humorizes humors humourise humourises humourize humourizes hunchs hurkle hurls hurray hurrays hurtles hurts hushes hybridise hybridises hybridize hybridizes hydrocrack hydrocracks hydrodesulfurize hydrodesulfurizes hydroentangle hydrogenate hydrogenates hydrogenise hydrogenises hydrogenize hydrogenizes hydroisomerize hydroisomerizes hydrolyse hydrolyze hydrolyzes hydrotreat hydrotreats hydroxylate hydroxylates hyperacetylate hyperbolize hyperbolizes hypercompute hypercorrects hyperextend hyperextends hypermutate hypermutates hyperpolarise hyperpolarises hyperpolarize hyperpolarizes hyperregulate hyperregulates hypersexualise hypersexualises hypersexualize hypersexualizes hyperstimulate hyperstimulates hypertextualize hypertextualizes hyperventilate hyperventilates hyphenates hypnotise hypnotises hypnotize hypnotizes hypostatize hypothecate hypothecates hypothesise hypothesises hypothesize hypothesizes iconifies iconify iconize iconizes idealise idealises idealize idealizes ideate ideates identifies identify ideologise ideologises idles idolise idolises idolize idolizes igg iggies iggy ignite ignites ignore ignores illegalise illegalises illegalize illegalizes illtreat illtreats illude illumes illumine illumines illustrate illustrates imagine imbed imbeds imbibe imbibes imbitter imbosks imbosom imbosoms imbreathe imbreed imbrews imbricates imbrue imbrues imbrute imbue imbues imitate imitates immanentise immanentises immanentize immanentizes immerse immerses immesh immeshes immew immigrate immigrates immiserate immiserates immix immobilise immobilises immobilize immobilizes immolate immolates immortalise immortalises immortalize immortalizes immunise immunises immunize immunizes immunolabel immunolabels immunolocalize immunolocalizes immure immures impair impairs impale impales impanel impanels impark impart imparts impassion impawn impawns impeach impeaches impede impedes impel impels impend impends imperialize imperializes imperil imperilled imperils impermeabilize impersonalize impersonalizes impersonate impersonates impetrate impetrates impinge impinges impleach implead impleads implicate implicates implies implode implodes implore implores imploys imply impolder importune importunes impose imposes impound impounds impoverish impoverishes imprecate imprecates impregnate impregnates imprison imprisons impropriate impropriates improve improves improvise improvises impugn impugns impures impurifies impurify impurple impurples impute imputes inactivate inactivates inaugurate inaugurates inbind inbland inbreaks inbreathe inbreed inbreeds inburn incage incages incandesce incandesces incant incants incapacitate incapacitates incarcerate incarcerates incardinate incardinates incarn incarnadines incarnates incases incenses incent incentivise incentivises incentivize incentivizes incents incept incepts incinerate incinerates incise incises incite incites inclose incloses include includes incommode incommodes incoop incorporate incorporates incrassate incriminate incriminated incriminates incrust incrusts incubate incubates inculcate inculcates inculpates incur incurs incurve indagate indelve indemnifies indemnify independentize indevours indianise indianises indianize indianizes indicate indicates indicating indict indicts indigenize indigitates indites individualise individualises individualize individualizes individuate individuates indoctrinate indoctrinates indorse indorses induce induces induct inducts indue indues indulge indulges indurates industrialise industrialises industrialize industrializes indwell indwells inearth infantilise infantilises infantilize infantilizes infantize infantizes infatuate infatuates infect infects infefts infer infers infest infests infeudate infeudates infibulate infiltrate infiltrates infirms inflame inflames inflate inflates inflect inflects inflict inflicts infold infolds inforces inform informalize informalizes informs infract infringe infringes infulminate infuriate infuriates infuse infuses ingather ingeminates ingenders ingest ingests ingirts ingraft ingrafts ingrain ingrains ingratiate ingratiates ingrow ingulfs ingurgitate ingurgitates inhabit inhabits inhale inhales inheld inhere inheres inherit inherits inhibit inhibits inhold inhoop inhume inhumes init initialise initialised initialises initialize initialized initializes inits inject injects injunct injuncts injure injures inlarges inleague inlighten inlines inlive inlock inmesh inmew innates innerduce innerduces innervate innervates innoculate innovate innovates inoculate inoculates inorganize inorganizes inquinate inquire inquires inrages inregisters insconce inscribe inscribes insee inseminate inseminates insend insinuate insinuates insist insists insnare insnares insonate insonicate insonify insource inspan inspect inspects inspire inspires inspirit inspirits inspissate inspissates installs instanciate instanciates instantiate instantiates instate instates insteep instigate instigates instil instill instills instils institutionalise institutionalises institutionalize institutionalizes instop instrew instruct instrumentalise instrumentalises instrumentalize instrumentalizes insufflate insufflates insulate insulates insure insures integrate integrates intellectualise intellectualises intellectualize intellectualizes intend intends intenerate intensifies intensify inter interacts interbed interbeds interbreed interbreeds intercalate intercalates intercede intercedes intercoil intercoils intercommunicate intercommunicates intercompare intercompares interconnect interconnects interconvert interconverts intercorrelate intercorrelates interculturalize interculturalizes intercut intercuts interdigitate interdigitates interdine interdines interesses interesterifies interesterify interfere interferes interfile interfiles interfuse intergrade intergrades interiorize interiorizes interject interjects interknot interknots interlaces interlard interlards interlay interleafs interleave interleaves interlinks interlope interloped interlopes intermarries intermarry intermeddle intermeddles intermesh intermeshes intermingle intermingles intermit intermits internalise internalises internalize internalizes internationalise internationalises internationalize internationalizes interoffices interoperate interoperates interpel interpellate interpellates interpenetrate interpenetrates interplants interpolate interpolates interpolating interpose interposes interpret interprets interrail interreact interreacts interrelate interrelates interrogate interrogates inters intersect intersects intersperse intersperses intersubstitute intertwine intertwines intertwingle intertwingles intertwist intertwists intervene intervenes intervise intervises intervolve intervolves interweave interweaves interwork interwove intices intimidate intimidates intitle intitles intonate intonates intone intones intoxicate intoxicates intreasure intreasures intreat intreats intricates introduce introduces introgress introgresses introject introjects introspect introspects intrude intrudes intrust intrusts intubate intubates intuit intuits intumesce intwines inundate inundates inure inures inurn inurns invacuate invacuates invade invades invaginate invaginates invalidate invalidates inveigh inveighs inveigle inveigles inveil inveils invent inventorize inventorizes invents investigate investigates invests inveterates invigilate invigilates invigorate invigorates invoke invokes involve involves involving inwone inwrap inwreathe inwreathes inwrit inwrite iodinate iodinates iodise iodises iodize iodizes ionise ionises ionize ionizes iotize iotizes ipsatize ipsatizes ircs ires iridesce iridesces irk irks ironise ironises ironize ironizes irradiates irrigate irrigates irritate irritates irrumate irrumates irrupt irrupts islamize islamizes isomerise isomerize isomerizes isotropize italianise italianises italianize italianizes italicise italicises italicize italicizes itemise itemises itemize itemizes itinerate itinerates jabbers jackknifes jaculate jaculates jailbroke jalouse jalouses jamp jampack jampacks jangled jangles japanise japanize japanizes japans jark jarp jarps jasperize jasperizes jaunce jaundices jawblock jaywalk jaywalks jazzifies jazzify jee jees jeff jellifies jellify jeopard jeopardise jeopardises jeopardize jeopardizes jeopards jerrybuild jest jetwash jews jigget jiggles jills jits jizzes jobe jobes jodel jodels joggle joggles joists jooks joshes jounces journalize jousts joyrode jubilate jubilates judicialize judicializes jugulate jugulates jumboize jumboizes justifies justify justle justles juvenilize juxtapose juxtaposes kanoodle kanoodles kaolinise kaolinises kaolinize kaolinizes keak keelhaul keelhauls kent kept keratinize keratinizes kerblam kibbitz kibbitzes kibitz kibitzes kiboze kibozes kickban kickbans kidnaps kife kindle kitesurf kitesurfs kittles kleptoparasitize kleptoparasitizes kline kludged knaa knaps knaw knaws knawvshawl knawvshawls knead kneads kneel kneels knelt knew knit knits knobbed knows konk kosherize kosherizes koshers krige kumbayah kvell kvells kyanise kyanize labefies labialize lacerate lacerates lade lades ladyfies ladyfy laevigates laicise laicises laicize laicizes laid lallygags lambast lambaste lambastes lambasts laminarize lampworks lanches lancinate lancinated lancinates languish languishes lankens lanks lants lapidate lapidates lards larks larn larnin larns larnt larrups lase lases lateralize lateralizes lathers latinise latinises latinize latinizes lavishes layn lazarus lazaruses laze lazed lazes leans leant leapt learn learns leases leaving leches legalise legalises legalize legalizes legislate legislates legitimates legitimatize legitimatizes legitimise legitimises legitimize legitimizes leint leints lemmatise lemmatises lemmatize lemmatizes lemme lemonize lemonizes lend lends lengthen lengthens lenite lenites lent lesbianize lesbianizes lessen lessens lettest leverages levigate levitate levitates lex lexes lexicalise lexicalises lexicalize lexicalizes liaise liaises liberalise liberalises liberalize liberalizes liberate liberates librate lifelog lig ligate ligates lighten lightens lignify likee liken likens limehouse limn limns linearise linearize linearizes linger lingers linish linishes linkifies linkify lionise lionises lionize lionizes liposuck liposucks lippen lipread lipreads lipsynch liquefies liquefy liquidate liquidates liquidise liquidises liquidize liquidizes liquifies liquify listen listens literalize literalizes lithifies lithify litigate litigates lits liven livens lixiviate lixiviates ljbf loathe loathes lobotomize lobotomizes localise localises localize localizes locate locates lockpicked locomote locomotes logarithmize logroll loiter loiters lojbanize lojbanizes lol loll lollop lollops lolls lollygags lols londonize looky loosen loosens looses loots loppers lose loses louk loun lour lowercasifies lowercasify lowers loyalize loyalizes lubes lubricate lubricates lucks lucubrate lucubrates lumbers luminesce luminesces lurks lusts luteinize luteinizes luvd luxate luxates luxuriate luxuriates lynch lynches lyophilise lyophilises lyophilize lyophilizes lyse lyses maa mabble macadamize macadamizes macarize macarizes macgyver macgyvers machicolate machicolates machinate machinates macromanage macromanages mactate mactates maculates madden maddens made madefies madefy maderize maderizes mads maffick mafficks maffle magics magnetify magnetise magnetises magnetize magnetizes magnificate magnifies magnify mahoganize mahoganizes maim maims mainlines mainstreams maintain maintains majestifies majestify mak make makes maks malax malaxate malaxates malaxes maledicts maligns malinger malingers malinvest malinvests malleate maltreat maltreats malveuille malveuilles mamaguy mamaguys mammer mammonize manages manhandle manhandles manipulate manipulates manualize manualizes manumises manumit manumits manures manuscribes maraud marauds marbelize marbelizes marbleize marbleizes mard mards marginalise marginalises marginalize marginalizes marinate marinates marketise marketises marketize marketizes marls marmalise marmalises marmalize marmalizes marries marry mars martemper martempers martialize martializes martinize martyrize masculinise masculinises masculinize masculinizes mase mashes massifies massify masticate masticates mastuprate masturbate masturbates matchmade matchmake matchmakes materialise materialises materialize materializes maternalise maternalises maternalize maternalizes mathematicise mathematicises mathematicize mathematicizes mathematise mathematises mathematize mathematizes matriculate matriculates mattify maturate maturates matures maunder maunders maxes maximalize maximalizes maximise maximises maximize maximizes mayest mayst mcdonaldize mcdonaldizes meaning meant mechanise mechanised mechanises mechanize mechanizes meddle meddles mediates mediatise mediatises mediatize mediatizes medicalise medicalises medicalize medicalizes medicate medicates medievalize meditate meditates mediterraneanise mediterraneanises mediterraneanize mediterraneanizes meeken meekens meeks meep mekin melds meliorate meliorates mell mellify mellows mells melodise melodises melodize melodizes melodramatise melodramatises melodramatize melodramatizes melts memoise memoises memoize memoizes memorialise memorialises memorialize memorializes memorise memorises memorize memorizes mendelize meng menstruate menstruates mensurate mensurates mentalize mentalizes mentioning mentions mercerise mercerises mercerize mercerized mercerizes merchandises merchandizes mesmerise mesmerised mesmerises mesmerize mesmerizes metabolise metabolises metabolize metabolizes metalise metalises metalize metalizes metallicize metallise metallises metallize metallizes metamorphize metamorphizes metamorphose metamorphosise metamorphosises metamorphosize metamorphosizes metaphorise metaphorize metastasise metastasises metastasize metastasizes metastisizes metathesize metathesizes methodize metricate metricates metricize metricizes mewl mewls microchunk microchunks microencapsulate microencapsulates microfabricate microfabricates microinject microinjects micromanage micromanages microminiaturize microminiaturizes micronise micronises micronize micronizes microprogrammed microsoftifies microsoftify microtitrate micturate micturates midwifes mighta migrate migrates milden mildens mildews militarise militarises militarize militarizes militate militates militation militations millesimate mindwipes mineralize mineralizes mingle mingles mings miniaturise miniaturises miniaturize miniaturizes minifies minify minimalise minimalize minimise minimises minimize minimizes minishes minoritise minoritises minoritize minoritizes minse miranda mirandas mirandize mirandizes mires mirv misaddress misaddresses misadvise misadvises misaim misaims misalign misaligns misallocate misallocates misally misanalyze misanalyzes misapplies misapply misapprehend misapprehends misappropriate misappropriates misassociate misassociates misattribute misattributes misbecame misbecome misbecomes misbefall misbefallen misbefalls misbefell misbehave misbehaves misbelieve misbelieves misbind misbinds misbound misbrand misbrands miscalculate miscalculates miscalibrate miscalibrates miscall miscalls miscapitalise miscapitalises miscapitalize miscapitalizes miscarries miscarry miscasts miscategorise miscategorises miscategorize miscategorizes miscegenate miscegenates mischaracterise mischaracterises mischaracterize mischaracterizes mischarge mischarges mischieve misclassifies misclassify miscommunicate miscommunicates miscomprehend miscomprehends misconceive misconceives misconfigure misconfigures misconstrue misconstrues miscorrect miscorrects miscount miscounts miscreate miscreates miscued misdates misdealt misdeem misdeems misdescribe misdescribes misdiagnose misdial misdials misdid misdirect misdirects misdo misdoes misdoom misdoubt misdoubts miseducate miseducates misemploy misemploys misencode misencodes misevaluate misevaluates misexpress misexpresses misfeed misfeeds misfile misfiled misfiles misfold misfolds misformat misformats misfunction misfunctions misgauge misgauges misgave misgive misgives misgo misgoes misgovern misgoverned misgoverns misgrade misgrades misguess misguesses misguide misguides mishandle mishandled mishandles mishappen mishear misheard mishears misidentifies misidentify misimplement misimplements misinform misinforms misinterpret misinterprets misjudge misjudges miskeep miskeeps misken miskey mislabel mislabels mislaid mislay mislays mislead misleads mislike mislikes mislink mislinks mislocalize mislocalizes mislocate mislocates mismanage mismanaged mismanages mismap mismaps mismark mismarks mismeasure mismeasures misname misnamed misnames misogynise misoperate misoperates mispaint mispaints mispair mispairs misparaphrase misparaphrases misparses misperceive misperceives misphrase misphrases misplace misplaces misplay misplayed misplays misportray misportrays mispredict mispredicts misprescribe misprescribes misprice misprices misprise misprize misprizes misprocess misprocesses misproduces mispronounce mispronounces misquote misquoted misquotes misread misreads misreckon misreckons misrecognize misrecognizes misrecollect misrecollects misremember misremembers misreport misreported misreports misrepresent misrepresents misroute misroutes missaw missee missees missend missends missent misshape misshaped misshapes misshelve misshelves missionise missionises missionize missionizes missold missound missounds misspeak misspeaks misspell misspells misspelt misspend misspends misspoke misspoken misstate misstated misstates missteps mistag mistags mistaught misteach misteaches misthrew mistifies mistify mistime mistimes mistitle mistitles mistold mistook mistranscribe mistranscribes mistranslate mistranslated mistranslates mistransliterate mistransliterates mistreat mistreats mistrusts mistype mistyped mistypes misunderestimate misunderestimates misunderstand misunderstands misunderstood misvalue misvalues misvote miswant miswants miswent misword miswords miswrite miswrites miswrote mitch mitches miters mithridatize mitigate mitigates mizzles mobilise mobilises mobilize mobilizes moble mobles modalise modalises modernise modernises modernize modernizes modifies modify modularise modularises modularize modularizes modulate modulates mohammedanize moider moiders moisten moistens moistureproofs moisturise moisturises moisturize moisturizes moither moithers molest molests mollifies mollify monarchize monarchizes mondayize monetise monetises monetize monetizes mongrelise mongrelises mongrelize mongrelizes monochromatize monochromatizes monodisperses monologise monologises monologize monologizes monomerize monophthongise monophthongises monophthongize monophthongizes monopolise monopolises monopolize monopolizes monospaces monoubiquitinate monoubiquitylate monoubiquitylates monumentalize monumentalizes mooches moodle moodles moonlights mopes mopies moralise moralises moralize moralized moralizes morcellate morcels mormonise mormonises mormonize mormonizes mortifies mortify mosey moseys mosh moshes mosies moslemise moslemize mosy mothproofs motivate motivates motorise motorises motorize motorizes mottles mought moulders moults mourns moves mrb muckle muckles muckrake muckraked muckrakes mucks muddies mudpuddle muggled muleses multiplies multipost multiposts multitask multitasks mummifies mummify mump mun munge munges municipalize murks murl muscularize muscularizes musicalise musicalises musicalize musicalizes muslimise muslimize muslimizes musses mussitate mussitates mutagenize mutate mutates mutilate mutilates mutualise mutualises mutualize mutualizes myek myekin myeks myelinates mysticise mysticises mysticize mysticizes mystifies mystify myther mythicize mythicizes mythologise mythologises mythologize mythologizes naa naai nab nabbed nabs nack nacks nake namecheck namechecks namedrop namedrops nanofabricate nantle napalms narcoticize narcoticizes narcotise narcotize narcotizes narrate narrates narrativise narrativises narrativize narrativizes nasalise nasalised nasalises nasalize nasalizes nationalise nationalises nationalize nationalizes naturalise naturalises naturalize naturalizes nauseate nauseates navigate naysay nazifies nazify nears neaten neatens nebulise nebulises nebulize nebulizes necessitate necessitates necropost necroposts necrose necrotise necrotises necrotize necrotizes neg negate negates negativize negativizes neglects negotiate negotiates negs nemmine neologise neologize neologizes neoterise neoterize nephrectomize nerf nerfs nestle nestles neutralise neutralises neutralize neutralizes newcreate newgroup newgroups newmodel nicen nicens nickers nictate nictates nictitate nictitates nidificate nidificates nidify nifong nifongs niggerize niggerizes nihilate nihilates nill nipponize nipponizes nitpick nitpicks nitrify nitrogenate nitrogenates nitrogenise nitrogenize nitrosate nitrosylate nitrosylates nixes nobble nobbles nocks nods nodulate nodulates nominalize nominalizes nominate nominates nonpluses nonplusses nonsensify normalise normalises normalize normalizes nostalgize nostalgizes nostrificate nostrificates nostrifies nostrify nota notarise notarises notarize notarizes notate notates noticing notifies notify noting nourish novate novates novelise novelises novelize novelizes nuclearise nuclearises nuclearize nuclearizes nudges nullifies nullify numbs numerates numericize numericizes nuncupate nursle nutate nutshot nutshots nuzzle nuzzles nymshift obambulate obelise obelize obelizes obey obeys obfuscate obfuscates objectifies objectify objectivize objurgate objurgates obligates oblige obliges obliterate obliterates obliviate obliviates obrogate obrogates obscures obsecrate obsecrates observe observes obsess obsesses obsolesce obsolesces obsoletes obstipate obstruct obstructs obtain obtains obtest obtests obtrude obtrudes obtund obtunds obvert obviate obviates occasionate occasionates occlude occludes occults occupies occupy occur occurring occurs ocr octaviate odorise odorises odorize odorizes oestruate oestruates offbear offcap offend offends offhold officialise officialize officializes officiate officiates offs offsaddle offshores offstood oldens oligomerize oligomerizes omit omits onforward onomatopoeias onpass onsell onsells onsend onsold ooh oohs oompahs opacifies opacify opalise opalises opalize opalizes opaques operate operates operationalise operationalises operationalize operationalizes opes opine opines opinionate opinionates opinionize opinionizes oppilate oppilates oppose opposes oppress oppresses oppugn oppugns opsonise opsonises opsonize opsonizes opt optimise optimised optimises optimize optimizes opts orate orates orchestrate orchestrates ordain ordains organise organises organize organizes orient orientate orientates orients originate originates ork orthonormalize orthorectifies orthorectify oscillate oscillates osculate osculates osmoregulate osmoregulates osmose osseointegrate osseointegrates ossifies ossify ostracise ostracises ostracize ostracizes ouse ouses oust ousts outact outargue outask outate outbalance outbalances outbattle outbattles outbear outbid outbids outboast outboasts outbought outboxed outboxes outbrave outbreathe outbreed outbreeds outbuild outbuilds outbuilt outburn outburp outbuy outbuys outcampaign outcheer outclass outclasses outclimb outclimbs outcoach outcoaches outcompete outcompetes outcouple outcreep outdance outdances outdare outdares outdates outdazzle outdazzles outdid outdistance outdistances outdo outdoes outdrank outdraw outdraws outdress outdresses outdrew outdrink outdrive outdrives outdrove outduel outduels outdwell outearn outearns outeat outeaten outeats outens outexecute outexecutes outface outfaces outfart outfence outfences outfight outfights outfinesse outfinesses outfires outfish outflank outflanks outflew outflies outfly outfool outfools outfought outfox outfoxes outfrown outfrowns outfuck outgain outgains outgallop outgallops outgas outgases outgeneral outgenerals outglow outglows outgoes outgone outgreen outgreens outgrew outgross outgrosses outgrow outgrows outguess outguesses outgun outguns outhandle outhandles outheld outhit outhits outhold outholds outhustle outhustles outjest outjests outjump outjumps outken outkick outkicks outlaid outlast outlasts outlaugh outlaughs outlays outlead outleads outleaps outleapt outlick outlie outlies outlift outlitigate outlitigates outlive outlives outman outmanage outmanages outmaneuver outmaneuvers outmanoeuvre outmanoeuvres outmans outmatch outmatches outmeasure outmuscle outmuscles outnice outnim outnumber outnumbers outorganize outorganizes outpace outpaces outpass outpasses outperform outperforms outpiss outpitch outpitches outplace outplaces outplay outplays outpoint outpoints outpoll outpolls outpray outproduce outproduces outpsych outpunch outpunches outputt outputts outrace outraces outraise outraises outran outrange outranges outrank outranks outrate outrates outreachs outrebound outrebounds outreport outrights outrival outrivals outroar outroars outrode outrun outruns outrush outrushes outsail outsails outsang outsave outsaves outscold outscolds outscore outscored outscores outscorn outseek outsell outsells outserve outserves outshine outshines outshone outshoot outshoots outshop outshot outshout outshouts outsings outskate outskates outskip outsleep outsleeps outslept outslug outslugs outsmart outsmarts outsold outsound outsounds outsource outsources outspeak outspeaks outspeed outspell outspells outspend outspends outspent outspin outspoke outsprang outsprings outsprint outsprints outsprung outstable outstables outstand outstare outstares outstay outstays outstep outstrategize outstretch outstretches outstrip outstrips outswear outswears outswore outtalk outtalks outthink outthinks outthought outtrade outtrades outvalue outvie outvies outvote outvotes outwait outwaits outwalk outwalks outwatch outwear outwears outweep outweeps outweigh outweighs outwent outwept outwinter outwinters outwit outwits outwoo outwore outwrest outwrestle outwrestles outwrite outwrites outwrote outyell outyells ovariectomize ovariectomizes overaccommodate overaccommodates overachieve overachieves overact overacts overadvertise overadvertises overamplifies overamplify overanalyse overanalyses overanalyze overanalyzes overanesthetize overapplies overapply overapproximate overapproximates overarch overarched overarches overate overattribute overattributes overawe overawes overbake overbakes overbalance overbalances overbear overbears overbeat overbeats overbide overbids overbill overbills overbind overbinds overblew overblow overblows overboil overboils overbook overbooks overborne overborrow overborrows overbrand overbreed overbreeds overbrowse overbrowses overbubble overbubbles overbuild overbuilds overbuy overbuys overcalculate overcalculates overcame overcanopies overcanopy overcapitalize overcapitalizes overcark overcarve overcategorize overcategorizes overcharge overcharged overcharges overchill overchoreograph overclean overcleans overclock overclocks overcloud overclouds overcoach overcoaches overcoddle overcoddles overcollateralize overcollateralizes overcome overcomes overcommercialize overcommercializes overcommits overcompensate overcompensates overcomplicate overcomplicates overconstrain overconsume overconsumes overcontrol overcontrols overcook overcooks overcorrect overcorrects overcount overcounts overcover overcovers overcriticize overcriticizes overcrop overcrops overcrowd overcrowds overdamp overdamps overdecorate overdecorates overdesigns overdetermine overdetermines overdevelop overdevelops overdiagnose overdiagnoses overdid overdilute overdilutes overdo overdoes overdramatise overdramatises overdramatize overdramatizes overdrank overdraws overdreep overdress overdresses overdrew overdribble overdribbles overdrink overdrinks overdrunk overdye overdyes overeat overeats overegg overeggs overembellish overembellishes overemote overemotes overemphasise overemphasises overemphasize overemphasizes overengineer overengineers overenjoy overenjoys overequip overestimate overestimates overexaggerate overexaggerates overexcite overexcites overexercise overexercises overexert overexerts overexpand overexplain overexplains overexploit overexploits overexpose overexposes overexpress overexpresses overextend overextends overeye overfallen overfeed overfeeds overfell overfertilize overfills overfinance overfinances overfish overfishes overfit overflew overflies overfly overfuck overfulfil overfulfill overfund overfunds overgang overgeneralize overgeneralizes overgenerate overget overgild overgive overgoes overgraze overgrazes overgrew overgroom overgrooms overgrow overgrows overhandle overhandles overharvest overharvests overhear overheard overhears overheat overheats overheave overheld overheles overhend overhip overhire overhires overhit overhits overhung overhype overhypes overidealize overidealizes overidentifies overidentify overindulge overindulges overinflate overinflates overinsure overinsures overintellectualise overintellectualises overintellectualize overintellectualizes overinterpret overinvest overinvests overjoy overjoys overjustifies overjustify overkills overlaid overleap overleaps overleapt overlearn overlearns overlearnt overlegislate overlegislates overleverages overlie overlies overlight overlights overlined overlit overlive overlives overlook overlooks overlubricate overlubricates overmanipulate overmanipulates overmans overmarket overmarkets overmast overmaster overmasters overmasts overmedicalize overmedicalizes overmedicate overmedicates overmike overmilitarizes overmilk overmilks overmix overmixes overmodulate overmodulates overpack overpackage overpackages overpacks overpaid overpaint overpaints overparameterize overparameterizes overpay overpays overpedal overpedals overperform overperforms overpersuade overpersuades overpitch overpitches overplay overplays overplough overploughs overplow overplows overpluck overplucks overpopulate overpopulates overpour overpours overpower overpowers overpraise overpraises overpredict overpredicts overprepare overprepares overprescribe overprescribes overpressurize overpressurizes overprice overprices overprime overprocess overprocesses overproduce overproduces overpromise overpromises overpronate overpronates overproportion overproportions overprotect overprotects overpsychologize overpsychologizes overpunch overpunches overpursue overpursues overquantify overran overrate overrates overreact overreacts overread overreads overrefine overrefines overregulate overregulates overreport overreports overrepresent overrepresents overrestore overripen overripens overroast overroasts overrode overromanticize overromanticizes overrule overrules overruns oversalt oversalts oversang oversaturate oversaturates oversauce oversauces oversaw overschedule overschedules overscreen overscreens overseason overseasons oversedate oversedates oversee overseed overseeds oversees oversell oversells oversend overserve overserves overservice overservices overset oversets oversew oversexualize oversexualizes overshade overshadow overshadows overshare overshares overshoots overshop overshops overshorten overshortens oversimplifies oversimplify oversings overskate overskates oversleep oversleeps overslept oversoften oversoftens overspecialise overspecialises overspecialize overspecializes overspecifies overspecify overspend overspends overspent overspread overspreads oversprinkle overstaff overstaffs overstate overstates overstay overstays overstep oversteps overstimulate overstimulates overstrain overstrains overstress overstresses overstretch overstretches overstride overstrides overstrode overstudy overstuff overstuffs oversubscribe oversubscribes oversung oversway oversweeten oversweetens overswung oversystematise oversystematises oversystematize oversystematizes overtake overtakes overtan overtans overtask overtasks overtaught overtax overtaxes overteach overteaches overtest overtests overtheorize overtheorizes overthink overthinks overthought overthrew overtip overtips overtire overtires overtook overtop overtops overtout overtouts overtrain overtrains overtreat overtreats overtrump overtrumps overturn overturns overtwist overtypes overuses overutilize overutilizes overvalue overvalues overwash overwashes overwatches overwaters overwears overweights overwent overwet overwets overwhelm overwhelms overwhip overwind overwinds overwinter overwinters overworks overwrite overwrites overwrote oviposit oviposits ovulate ovulates owe owes owns oxidise oxidises oxidize oxidizes oxygenate oxygenates oxygenise oxygenises oxygenize oxygenizes ozonise ozonises ozonize ozonizes pabble paceth pacifies pacify packetize packetizes packup packups paganise paganises paganize paganizes paginate paginates paid palatalise palatalises palatalize palatalizes palavers palettise palettize palettizes palletise palletises palletize palletizes palliate palliates palmitoylate palmitoylates palpates palpitate palpitates palter palters pamper pampers pandiculate pandiculates panegyrise panegyrises panegyrize panegyrizes pantheonise pantheonises pantheonize pantheonizes pantses paraglide paraglides paralleled parallelize parallelizes paralyse paralyze paralyzes parameterise parameterises parameterize parameterizes parametrise parametrises parametrize parametrizes parasitise parasitises parasitize parasitizes parbake parbakes parboil parboils parcellate parcellates parch parches pare parenthesise parenthesises parenthesize parenthesizes pares parleyvoos parquets parses partake partakes participate participates particularise particularises particularize particularizes partook passivate passivates passivise passivises passivize passivizes pasteurise pasteurize pasteurizes paternalise paternalises paternalize paternalizes pathologise pathologises pathologize pathologizes patinates patine patines patriate patriates patronise patronises patronize patronizes paunchs pauperise pauperises pauperize pauperizes paves pavilions pays peacifies peacify peculate peculates peddle peddles pedestrianise pedestrianised pedestrianises pedestrianize pedestrianizes pedgill pedgills peek peeks peercast pegylate pegylates pejorate pelletize pelletizes pelts penalise penalises penalize penalizes pends penectomize penetrate penetrates peninsulate peninsulates perambulate perambulates perceive perceives perceptualize perceptualizes perchlorinate perchlorinates percuss percusses perdeuterate perdure peregrinates perempt perempts perendinate perennate perennialize perennializes perfects perflate perflates perforates perform performs perfuse perfuses periclitates perish perishes perjure perjures perlustrate perlustrates permanentize permanentizes permeabilize permeabilizes permeablise permeablises permeate permeates permutate permute permutes perorate perorates peroxidise peroxidises peroxidize peroxidizes perpetrate perpetrates perpetuate perpetuates perplex perplexes perscopates persecute persecutes perservere perseverate perseverates persevere perseveres persist persists personalise personalises personalize personalizes personate personates personifies personify perspire perspires perstringe persuade persuades pertain pertains perturb perturbate perturbates perturbs peruses pervade pervades pervaporate pervaporates pester pesters petrifies petrify petsit pettifog pettifogs pfaff pfaffs phagocytise phagocytises phagocytize phagocytizes phagocytose phantasize phantasizes pharyngealize pharyngealizes philosophate philosophates philosophise philosophises philosophize philosophized philosophizes phlebotomize phlegmatize phlegmatizes phonemicize phonemicizes phonologize phosphatize phosphatizes phosphorate phosphoresce phosphoresces phosphorise phosphorize phosphorizes phosphorylate phosphorylates phot photobleach photocleave photocleaves photocompose photocomposes photoconvert photoconverts photodisintegrate photodissociate photodissociates photodope photoengrave photoengraves photoexcite photoexcites photoinject photoionize photoionizes photoisomerize photoisomerizes photoluminesce photolyse photolyze photosensitise photosensitises photosensitize photosensitizes photoshop photoshops photostabilize photosynthesise photosynthesises photosynthesize photosynthesizes phots phrensied phrensies physicalize physicalizes piecen pieface pierce pierces piffles pigged piggybacks pigmentate pigmentates pilfer pilfers pillages pillarize pinocytose pinocytoses pipelay pisses pitchpole pitchpoles piths pities pittles pixelate pixelates pixellate pixellates placate placates placifies placify plagiarise plagiarises plagiarize plagiarizes planarize planarizes planish planished planishes plantarflex plantarflexes plapper plappers plashed plashes plasmolyse plasticise plasticises plasticize plasticizes plateaus platinise platinises platinize platinizes platted playact playacts playfought plays playtest playtests pleach plead pleads pleases plenish plenishes plims plodge plodges plodgin plods ploidize plotz plotzes ploughs plounce plounces plucks plumps plunders plunges plunk plunks pluralise pluralises pluralize pluralizes pluto plutos pmses poach poaches podzolize podzolizes poeticise poeticises poeticize poeticizes poetize poetizes pointing poises polari polarise polarises polarize polarizes polemicize polemicizes polices politicise politicised politicises politicize politicizes politick pollenize pollenizes pollicates pollinates pollutes polonise polonises polonize polonizes polycondense polycondenses polygamise polygamises polygamize polygamizes polygonize polygonizes polymerise polymerises polymerize polymerizes polyubiquitinate polyubiquitinates polyubiquitinylate polyubiquitinylates polyubiquitylate polyubiquitylates ponced ponder ponders pontifies pontify poopoo poopoos poormouth poormouths popularise popularises popularize popularizes populate populates porks porrects portend portends portray portrays possess possesses postdate postdates posterise posterises posterize posterizes postmodernise postmodernises postmodernize postmodernizes postmodify postpone postpones postpose potch potchky pote potentialize potentiate potentiates pounces pours powerbock powerbocks practise practises praecedes praedicts praefers praepares praescribes praescribeth praesenteth praesumes praetends pratfallen pratfell prattles praught praunces prays preach preaches preachify preallocate preambulate preambulates preannounce preannounces preapprove preapproves prearrange prearranges preassemble preassembles preassociate preassociates prebakes prebatch preboard preboards prebook prebooks prebought prebuffer prebuffers prebuild prebuilds prebuy prebuys precache precaches precalculate precalculates precede precedes precertifies precertify precess precesses prechew prechews precises preclude precludes precoat precompile precompiles precompress precompresses precompute precomputes preconceive preconceives preconfigure preconfigures preconize precook precooks precool precools precounsel precurse precurses precut precuts precycle precycles predefine predefines predesignate predesignates predestine predestines predetermine predetermines predict predicts predigest predigests predispose predisposes predominates predoom predoses preempt preempts preen preens preexist preexists prefabricate prefabricates prefer prefers prefetch prefetches prefigure prefigures prefill prefork preforks preformat preformats pregelatinize pregelatinizes pregrease pregreases pregrill pregrind pregrinds preharden prehardens preheat preheats prehydrate prehydrates preinstall preinstalls preionize prejudge prejudges prelight prelights prelit preload preloads preludes premade premake premakes premaster premeditate premeditates premodify premultiply prenasalize prenasalizes prenominate prentices preoccupies preoccupy preoptimize preoptimizes preordain preordains prepackage prepackages prepaint prepaints prepare prepares preparse preparses prepay prepays prepend prepends prepenses preplan preponderate prepone prepones prepopulate prepopulates prepose preposes prepossess prepossesses preprepare preprocess preprocesses preprogram preprograms preprovide prequalifies prerecord prerecords preregister preregisters prerender prerenders prerequire preresolve prescan prescans preschedule preschedules prescind prescore prescores prescreen prescreens prescribe prescribes preselect preselects presell presells presets preshows preshrank preshrink preshrinks preside presides presift presold presort presorts presses pressurise pressurises pressurize pressurizes prestidigitate prestidigitates prestress prestresses prestretch presume presumes presuppose presupposes pretape pretapes pretend pretends pretermit pretermits pretreat pretreats prettifies prettify prevail prevails prevalidate prevalidates prevaricate prevaricates prevent prevents previse preweight preweights prewire prewrites prewrote preys pries primp primps prinks prioritise prioritises prioritize prioritizes prise privatise privatised privatises privatize privatizes proact proacts problematize problematizes proceed proclaim proclaims procrastinate procrastinates procreate procreates procure procures produces productize productizes profanes profer profers profess professes professionalise professionalises professionalize professionalizes profounds prognosticate prognosticates programed progresses prohibit prohibits proletarianise proletarianize proliferate proliferates prolong prolongate prolongs promogulate promogulates promote promotes promulgate promulgates pronate pronates pronks pronounce pronounces pronounciate proofread proofreads proove prooves propagandize propagandizes propagate propagates propel propels propend prophecise prophecises prophecize prophecizes prophesies prophesize prophesizes prophesy prophetize prophetizes propitiate propitiates propone proport proportionates propose proposes propound propounds prorate prorates prorogue prorogues proscribe proscribes prosecute prosecutes proselytise proselytises proselytize proselytizes prosper prospers prostrates protect protects proteolyze proteolyzes protists protocolize protocolizes protonate protonates protract protracts protrude protrudes protuberate prove proves provide provides provincialise provincialises provincialize provincializes provoke provokes prowl prowls psych psychoanalyse psychoanalyses psychoanalyze psychoanalyzes psychologize psychologizes psychs ptyalize publicate publicise publicises publicize publicizes publish publishes publishing puffs puggles pulchrifies pulchrify pullulate pullulates pulsate pulsates pultrude pulverise pulverises pulverize pulverizes pumices pummel pummels pumpjacks punctuate punctuates punctulates pungle pungles punish punishes pupate pupates pupu purifies purify purloin purloins purports pursue pursues purvey purveys pussifies pussify pussyfoot pussyfoots pussywhip pussywhips putrefies putrefy putrifies putrify puts pwnd pwns pwnt pyramidalize pyritize pyrolyse pyrolysize pyrolyze pyrolyzes pyrosequence pyrosequences pythagorize pythagorizes quackle quadfurcate quadrates quadrisect quadrisects quadruples quaestions qualifies qualify quantifies quantify quantise quantises quantitate quantitates quantize quantizes quartersaw quartersaws quash quashes quat quave queem quenches quetch quethes quickens quicksilvers quicksteps quiddle quiddles quiesce quiesces quieten quietens quininizes quisle quit quitclaims quob quobs quonks quop quopped quops rabbitts racemize racemizes racewalk racewalks racialise racialises racialize racializes radars radgin radiates radicalise radicalises radicalize radicalizes radioactivate radioactivates radiosensitise radiosensitize ragequit ragequits raim rainproofs raises ralph ralphs rame ramifies ramify rampages ran rancidifies rancidify randomise randomises randomize randomizes rang ranging rankle rankles ransack ransacks ransoms rarefies rarefy rares rarifies rarify rassle rassles rasterise rasterises rasterize rasterizes rathel ratifies ratify ratiocinate ratiocinates rationalise rationalises rationalize rationalizes rattoon rattoons ravel ravels ravish ravishes rax raxes raxle raze razes razzes razzle razzles reabsorb reabsorbs reaccelerate reaccelerates reaccentuate reaccentuates reaccept reaccepts reacclimate reacclimates reaccumulate reaccustom reaccustoms reacidifies reacidify reacknowledge reacknowledges reacquaint reacquaints reacquire reacquires react reactivate reactivated reactivates reacts readapt readapts readd readdress readdresses readds readjust readjusts readminister readministers readmit readmits readopt readopts reads readvertise readvertises reaffirm reaffirms reaffix reaffixes reafforest reafforests realign realigns realise realises realize realizes reallocate reallocated reallocates reallot reallow reallows reamplify reanalyse reanalyze reanalyzed reanalyzes reanimates reanneal reanneals reannex reannexes reannotate reannotates reannounce reannounces reanoint reanoints reanswer reanswers reappear reappears reapplied reapplies reapply reappoint reappoints reapportion reapportions reappraise reappraised reappraises reapproach reapproaches reappropriate reappropriates reapprove reapproves reaps rearchitect rearchitects reargue reargues rearm rearms rearomatize rearomatizes rearrange rearranges rearrest rearrests rearticulate rearticulates reascend reascends reassault reassemble reassembled reassembles reassert reasserts reassess reassesses reassign reassigns reassociate reassociates reassume reassumes reassure reassures reattach reattachs reattain reattains reattract reattracts reattributes reaudition reauditions reauthorise reauthorize reauthorizes reaves reawake reawaken reawakens reawakes reawoke rebadge rebadges rebag rebags rebakes rebalance rebalances rebandage rebandages rebaptize rebaptizes rebase rebaseline rebaselines rebear rebears rebegan rebegin rebegins rebelieve rebelieves rebend rebends rebent rebid rebids rebill rebills rebind rebinds rebleeds reblock reblocks reblog reblogs rebloom reblooms reblossom reblossoms reboard reboards reboil reboils rebond rebonds rebook rebooks rebore rebores reborrow reborrows rebottle rebottles rebought rebreathe rebribe rebribes rebrick rebricks rebroadcast rebroadcasts rebuilds rebuilt rebulb rebulbs reburied reburies rebury rebut rebuts recache recaches recalculate recalculated recalculates recalibrate recalibrates recalk recalks recan recanalise recanalises recanalize recanalizes recans recant recants recapitalise recapitalised recapitalises recapitalize recapitalizes recapitulate recapitulates recaptions recarve recarves recatch recatches recategorise recategorises recategorize recategorizes recaught recaulk recaulks recede recedes receive receives recenter recenters recentralize recentralizes recentre recentres recertifies recertify rechalk rechalks rechallenges rechange rechanges rechannel rechannels recharacterize recharacterizes recharges rechart rechew rechews rechill rechills rechime rechoose rechooses rechoreograph rechoreographs rechose rechristen rechristens recidivate recidivates reciprocate reciprocates recircuit recircuits recirculate recirculates recite recites reck reckon reckons recks reclad reclads reclaims reclassifies reclassify reclean recleans reclimb reclimbs recline reclines recloak recloaks reclog reclogs reclone reclones reclose recloses reclothe reclothes reclude recludes recluster reclusters recock recocks recode recodes recognise recognises recognize recognizes recohere recoheres recoin recollapse recollapses recollar recollect recollects recollide recollides recolonises recolonize recolonizes recolor recolors recolour recolours recombine recombines recomfort recomforts recommence recommences recommend recommends recommission recommissions recommit recommits recommitted recompenses recompete recompile recompiles recomplicate recomplicates recompose recomposes recompress recompresses recompute recomputed recomputes reconceives reconceptualise reconceptualises reconceptualize reconceptualizes reconcile reconciles recondense recondenses recondition reconditions reconductor reconductors reconfigure reconfigures reconfirm reconfirms recongregate recongregates reconjure reconjures reconnect reconnects reconnoitres reconquer reconquers reconsecrate reconsecrated reconsecrates reconsider reconsign reconsigned reconsigns reconsolidate reconsolidates reconstitute reconstitutes reconstrict reconstricts reconstruct reconstructs reconsult reconsults recontact recontacted recontacts recontaminate recontaminated recontaminates recontextualise recontextualises recontextualize recontextualizes recontour recontours reconvene reconvenes reconverge reconverges reconvert reconverts reconvict recook recooks recool recooper recopied recopies recopy recopyright recopyrights recork recorks recorrect recorrects recoup recouple recouples recoups recovers recraft recrafts recreate recreates recriminate recriminates recrown recrowns recrudesce recrumple recrystallise recrystallises recrystallize recrystallizes rectifies rectify recultivate recultivates recuperate recuperates recur recurs recurse recurses recurve recurves recuse recuses recut recuts recycle recycles recyclize recyclizes redact redacts redaguerreotype redargue redargues redate redates redbaits redden reddens reddles redeal redeals redealt redecide redecides redeck redeconvolve redecorate redecorates rededicate rededicated rededicates redeem redeems redefine redefines redelete redeliver redelivers redemand redemands redemonstrate redemonstrates redenominate redenominates redeploy redeploys redeposit redeposits rederive rederives redescribe redescribes redesignate redesignates redetect redetects redetermine redetermines redevelop redevelops rediagonalize rediagonalizes redials redid redifferentiate redifferentiates redigest redigests redimension redimensions rediscover rediscovers rediscuss rediscusses redisplay redisplays redispose redissolve redissolved redissolves redistill redistills redistribute redistributes redistrict redistricted redistricts redivert redivide redivides redoes redouble redoubles redound redounds redownload redownloads redraws redrew redries redrill redrills redry redshirts redubbed reduce reduces reduplicates redye redyes reeducate reeducates reeks reelect reelects reembark reembarks reembodied reembodies reembody reemerge reemerges reemit reemits reemphasise reemphasises reemphasize reemphasized reemphasizes reemploy reemploys reenable reenables reenact reenacts reencode reencodes reencountered reenergize reenergizes reenforce reengage reengages reengineer reengineers reenlist reenlists reenter reenters reenvision reenvisions reequip reequips reestablish reestablishes reesterify reevaluate reevaluates reevaporate reevolve reexamine reexamines reexplain reexport reexports reexpose reexposes reexpress reexpresses reextend reextends refabricate refabricates reface refaces refactor refactors refall refalls refamiliarise refamiliarises refamiliarize refamiliarizes refashion refashions refasten refastens refatten refattens refax refaxes refeed refeeds refell refelt refelts refer referment referments refers refight refights refigure refile refiles refinance refinances refind refinds refine refines refinish refinishes refix refixes reflag reflags reflash reflashes reflate reflates reflect reflectorize reflectorizes reflects reflip reflips refloat refloats reflood refloods refloor reflow reflower reflowers reflows refly refocillates refocus refocuses refocusses refold refolds refool refools reforest reforests reforge reforged reforges reformat reformats reformulate reformulated reformulates refortified refortifies refortify reforward reforwards refought refound refounds refract refracts reframe reframes refreeze refreezes refreshes refries refrigerate refrigerates refroze refry reft refuck refudiate refudiates refuel refuels refunnel refurbish refurbishes refurl refurls refurnish refurnished refurnishes refuses refute refutes regain regains regales regases regasifies regasify regasses regather regathers regave regelate regender regenders regenerate regenerates regentrify regild regilds regionalise regionalises regionalize regionalizes regive regives reglaze reglazes regloss reglosses reglucosylate reglucosylates regorge regorges regrade regraded regrades regraze regrazes regrease regreases regreen regreens regresses regrew regrind regrinds regrip regrips regroove regrooves reground regroup regroups regrout regrouts regrow regrows regularise regularises regularize regularized regularizes regulate regulates regurgitate regurgitates rehabilitate rehabilitates rehammer rehammers rehang rehangs rehappen rehappens reharmonize reharmonizes rehat rehats reheal reheals rehear rehears rehearse rehearses reheel rehid rehide rehides rehinge rehinges rehire rehired rehires rehome rehomed rehomes rehone rehones rehospitalise rehospitalises rehospitalize rehospitalizes rehouse rehoused rehouses rehumanize rehumanizes rehung rehydrate rehydrates rehyphenate rehyphenates rehypnotize rehypnotizes reidentifies reidentify reifies reify reignite reignited reignites reilluminate reilluminates reillumine reillumines reimage reimages reimagine reimagines reimburse reimburses reimmerse reimmerses reimplant reimplants reimplement reimplements reimpose reimposed reimposes reimpress reimpresses reimprison reimprisons reinaugurate reinaugurates reincarcerate reincarcerates reincarnate reincarnates reinclude reincludes reincorporate reincorporates reindict reindicts reinduce reinduces reindustrialise reindustrialises reindustrialize reindustrializes reinfect reinfects reinfiltrate reinfiltrates reinflame reinflames reinflate reinflates reinforce reinforces reinform reinforms reinhabit reinhabits reinitialise reinitialises reinitialize reinitializes reinitiate reinitiates reinject reinjects reinjure reinjures reinnervate reinnervates reinoculate reinoculated reinoculates reinput reinscribe reinscribes reinsert reinserts reinspect reinspects reinspire reinstall reinstalls reinstate reinstates reinstigate reinstigates reinstill reinstills reinstitute reinstitutes reinstitutionalise reinstitutionalises reinstitutionalize reinstitutionalizes reinstruct reinstructs reinsulate reinsulates reinsure reinsures reintegrate reintegrates reinter reinterest reinterests reinterpret reinterprets reinters reinterview reinterviews reintroduce reintroduces reinvade reinvades reinvent reinvents reinvest reinvestigate reinvestigates reinvests reinvigorate reinvigorates reinvoice reinvolve reinvolves reionise reionises reionize reionizes reisolate reisolates reiterates reives rejail rejails rejig rejigger rejiggers rejiggle rejigs rejoice rejoices rejoin rejoins rejoint rejoyces rejudge rejudged rejudges rejustifies rejustify rejuvenate rejuvenates rekey rekeyboard rekeyboards rekeys rekindle rekindles reknit reknits relabel relabels relace relaces relaid relaminarize relaminarizes relapses relate relates relating relativise relativises relativize relativizes relaunches relax relaxes relead releads relearn relearns relearnt relegates relevate relevel relevels relexify relicense relicenses relies relieve relieves religate relight relights reline relines relink relinks relinquish relinquishes reliquefies reliquefy reliquifies reliquify relist relisten relistens relists relit relitigate relitigates relive relives reload reloads relocalize relocalizes relocate relocates relock relocks relubricate relubricates reluct relucts relume relumes rely remade remagnetize remagnetizes remains reman remands remanufacture remanufactures remap remaps remarket remarkets remarking remarries remarry remaster remasters remate rematerialize rematerializes remeasure remeasures remediates remeet remeets remelt remelts remember remembers rememorate rememorates remerchandise remerchandises remercy remet remethylate remigrate remigrated remigrates remilitarize remilitarizes remind reminds remineralise remineralises remineralize remineralizes reminisce reminisces remint remints remixed remixes remobilise remobilises remobilize remobilizes remodel remodels remodify remold remolds remonetize remonetizes remonstrate remonstrates remotivate remotivates remould remoulds remound remuddle remuddles remunerate remunerates remunerations remystifies remystify renail renails rename renames renationalise renationalises renationalize renationalizes renature renatures rend rendezvouses rends renege reneges renegotiate renegotiated renegotiates renest renests renew renews renig renominate renominated renominates renormalise renormalises renormalize renormalizes renourish renourishes renovate renovates renumber renumbers renumerates reobtain reobtains reoccupies reoccupy reoccur reoccurs reoffend reoffends reop reopen reopens reops reoptimize reoptimizes reorchestrate reordain reordains reorder reorders reorganises reorganize reorganizes reorient reorients reoxidize reoxidizes reoxygenate reoxygenates repack repackage repackages repacketize repacketizes repacks repaginate repaginates repaid repaints repalletize repalletizes repaper repapers reparates reparse reparses repass repaste repatch repatches repatriates repave repaved repaves repay repays repeddle repel repels repent repents repeople repeoples reperceive reperceives reperform reperforms rephase rephases rephotograph rephotographs rephrase rephrases repin repine repines repins repitch repitches repivot repivots replace replaces replait replaits replan replant replants replaster replasters replate replates replenish replenishes replevy replicate replicates replot replots replough reploughs replow replows replug replugs repoint repoints repolarise repolarize repolarizes repolish repolishes repopularise repopularises repopularize repopularizes repopulate repopulated repopulates reposition repositions repossess repossesses repost reposts repot repots repour reprehend reprehends reprepare represent representing represents represses repressure repressures repressurise repressurises repressurize repressurizes reprice repriced reprices reprioritise reprioritises reprioritize reprioritizes repristinate repristinates reprivatise reprivatize reprivatizes repro reprobe reprocess reprocessed reprocesses reproduce reproduces reprofessionalize reprofessionalizes reprofile reprofiles reprogram reprogramme reprograms reproliferate reproliferates repromote repromotes repropagate repropagates reprove republish republishes repudiate repudiates repugns repunctuate repunctuates repunish repunishes repurchases repurify repurpose repurposes reputes repyne requalifies requalify requeen requeens requestion requestions require requires requite requites requote requotes reradiate reradiates reran rerandomize rerandomizes rerape rerapes rerate rerates rerattle reread rereads rerecords rerefer rerefers reregister reregisters reregulate reregulates rerender rerenders rerent rerents rereport rereports rerig rerigs reroll rerolls reroof reroofs reroute reroutes resacralize resacralizes resaddle resaid resail resalute resample resamples resand resands resanitize resat resave resaw resaws resay resays rescale rescales rescan rescans rescatter rescatters reschedule reschedules rescind rescinds rescope rescopes rescore rescores rescramble rescrambles rescreen rescreens resculpt resculpts resculpture resculptures reseal reseals reseason reseat reseats resect resects resecure resecures resediment reseed reseeds resegregate resegregates resegregrate resegregrates reseize reseizes reselect resell resells resemble resembles resend resends resensitize resent resentence resentences resents resequence resettle resettled resettles resew resews reshake reshakes reshape reshapes resharpen resharpens reshave resheath resheathe resheathed resheathes resheaths reshelve reshelves reshim reshims reshingle reshingles reship reships reshook reshot reshow reshows reside resides resift resifts resight resights resign resignal resigns resile resiles resinate resinates resinified resinifies resinify resituate resituates resize resizes reskill reskills reskin reskins resmelt resmelts resod resods resold resolder resolders resole resoles resolidifies resolidify resolves resonate resonates resorb resorbs resound resounds resow resowed resows respawn respawns respec respecifies respecify respecs respect respectabilize respectabilizes respell respells respelt respend respent respider respiders respin respirate respire resplend resplends respot respots resprout resprouts restabilise restabilises restabilize restabilizes restack restacks restaff restaffs restage restages restain restains restaple restaples restate restates restation restations resterilize resterilizes restick resticks restimulate restimulates restitch restitched restitches restitute restitutes restock restocks restone restopper restore restores restrain restrains restrengthen restrengthens restretch restretches restrict restricts restrings restripe restripes restructure restructured restuck restudied restudies restudy restump restyle restyles resubject resubmerge resubmerges resubmit resubmits resubscribe resubscribed resubscribes resulting results resummon resummons resupplies resurface resurfaces resurge resurges resurrect resurrects resurvey resurveys resuscitate resuscitates resuspend resuspends reswear reswears reswore resyllabifies resyllabify resynchronize resynthesize ret retag retags retailor retails retain retains retaliate retaliates retally retape retapes retarget retargets retaught retch retches reteach reteaches reteam reteams retear retears retee retees retelecast retelecasts retell retells retender retexture retextures rethatch rethatched rethatches rethaw retheme rethemes rethink rethinks rethought rethread rethreads rethrew rethrow rethrows reticket retickets reticulates retie reties retighten retightens retile retiles retime retimes retires retitle retitles retold retook retool retools retore retoss retraces retract retracts retrain retrains retranslate retranslates retransliterate retransliterates retransmit retransmits retransplant retransplants retraumatize retraumatizes retravel retravels retrench retrenches retrieves retrig retrigger retriggers retrigs retrocede retrodict retrodicts retrodisplace retroflect retroflects retrogreen retrogress retrogresses retromod retromoderate retromoderates retrotranspose retrotransposes retube retubes retune retunes returf returfs returns retweet retweets retwist retwists retype retypes reunified reunifies reunify reunite reunites reupholster reupholsters reupload reuploads reutilise reutilises reutilize reutilizes revaccinate revaccinates revalidate revalidates revalorise revalorize revaluate revalue revalued revalues revamp revamps revarnish revarnishes reveals revegetate reverberate reverberates reverences reveres revest revests revet revictual revictuals revile reviles revindicate revindicates revitalise revitalises revitalize revitalizes revive revives revivifies revivify revoice revoices revolutes revolutionalise revolutionalised revolutionalises revolutionise revolutionises revolutionize revolutionizes revolve revolves rewalk rewalks rewarehouse rewarm rewarms rewashed rewashes rewatch rewatches rewater rewax rewaxes reweave reweaves rewed reweds reweigh reweighs reweight reweights rewicker rewild rewilds rewinded rewire rewires reword rewords reworks rewound rewove rewrap rewraps rewrote rezone rezoned rezones rhapsodise rhapsodises rhapsodize rhapsodizes rhotacise rhotacises rhotacize rhotacizes ribosylate ribosylates richen richens rickroll rickrolls ridicules rids righten rightens rightsize rightsized rightsizes rigidifies rigidify rigorize rigorized rigorizes rike rile riles ringbark ringbarks ringfence ringfences ripen ripens rises risp risps ritualise ritualises ritualize ritualizes rivel rivetted riz rize roam roams roaves rob robotise robotize robotizes robs robustify roger rogers roil roils roister roisters roleplays rolf rolfs rollick rollicks romanise romanises romanize romanizes romanticise romanticises romanticize romanticizes rootle rootles rotate rotates rotavate rotoscopes rototill rototills rotovate rotovates rotproofs roughen roughens roughhouses roust rousts routinise routinises routinize routinizes rove roves rox royalize royalizes roysters rsvp rubberise rubberises rubberize rubberizes rubbernecks rubberstamp rubberstamps rubbishes rubifies rubify rubricate ruckle ruckles rucks ruddles ruggedise ruggedize ruggedizes ruinate ruinates ruminate rummages rumors rumours rumple rumples ruralise ruralises ruralize ruralizes russifies russify rusticate rusticates rustproofs rusts sab sabbatize sabotages saccharify sacerdotalize sacralize sacralizes sacramentize sacredize sacredizes sadden saddens sadducize sagaciate sagaciates saginates sailboards sain sains salicylize salify salinate salinise salinised salinises salinize salinizes salivate salivates salutes sanctifies sanctify sanctuarize sanctuarizes sandblast sandblasts sang sanitate sanitates sanitise sanitises sanitize sanitizes sank santer santers saponifies saponify sarcase sasses satanize satiates satirise satirises satirize satirizes satisfice satisfices satisfies satisfy satisfying saturate saturates saute sautes savvies says scabbed scabble scaffolds scagged scalarize scalarizes scald scalds scampers scandalise scandalises scandalize scandalizes scanlate scarifies scarify scarper scarpers scathes scats scatted scatter scatters scavenge scavenges schappe schematize schematizes schlepps scintillate scintillates sclerose sclerotise sclerotises sclerotize sclerotizes scold scooch scooches scootch scootches scorify scorns scour scrabble scrabbles scraight scrams scrapbooked screak screaks screenscrape screenscrapes screwtape screwtapes scries scriggle scrimple scrimshanders scrimshank scrimshanks scrimshaws scritch scritches scrooch scrooches scroop scroops scrootch scrootches scrouges scrump scrumple scrumples scrumps scrunched scrunches scrutinise scrutinises scrutinize scrutinizes scruze scry scuffs sculk sculpt sculpts scumbles scurries scurry sears secede secedes secern seclude secludes secrete secretes secuers secularise secularises secularize secularizes secures securitise securitises securitize securitizes sedates sedentarise sedentarises sedentarize sedentarizes seduce seduces seek seeks seels seem seems seesaws seethe seethes segregates segued seise seises seize seizes semiautomate semiautomates semiforces send sends senesce senesces sensationalise sensationalises sensationalize sensationalizes sensitise sensitises sensitize sensitizes sentimentalise sentimentalises sentimentalize sentimentalizes seponate septembrise septembrises septembrize septembrizes septuples sepulchers sequester sequesters sequestrates serialise serialises serialize serializes sermonise sermonises sermonize sermonized sermonizes seroconvert serpentinize sesquioxidize sesquioxidizes settles sever severs sew sews sexifies sexify sexile sexiles sexualise sexualises sexualize sexualizes sez shaddup shamble shames shanghais shapen shapeshift shapeshifts sharecrop sharecrops sharpen sharpens sharpshoot shat shatter shatters sheathe sheathes shebop sheens sheetrocks shent shet shew shid shimmied shimmies shines shink shinnies shirks shirr shirrs shivved shmooze shmoozes shockproofs shoegazes shone shoo shood shoogle shoos shopgrift shopgrifts shoplift shoplifts shorn shortchange shortchanged shortchanges shorten shortens shortlist shortlists shortsheet shortsheets shoulda shouldest shouldna shouldst showing showrun shows shright shrills shrimps shrinkwraps shrive shrivel shrivels shrives shrove shrunk shtums shtup shtups shud shuddup shun shunpike shunpikes shuns shush shushes shuttles shutup sibilate sicken sickens sickled sicks sics siddown sidefoot sidefoots sidetracks sidewind sier sift sifts sightread sightsaw sightsee sightsees signalise signalises signalize signalizes signifies signify silanate silanates silicify siliconise siliconize siliconizes silts silylate simmered simmers simonise simonises simonize simonizes simplicate simplifies simplify simulate simulates sinicise sinicize sinicizes sinuates sissifies sissify situates skalls skedaddle skedaddles skeets skeeve skeletonise skeletonises skeletonize skeletonizes skelps sken skens skews skijor skijors skimps skims skinch skinnydip skirl skirls skitch skitches skite skites skitters skrikes skronk skud skudded skuddin skuds skulks skullfuck skyjack skyjacks skype skypes skyrockets skywatch skywatches slacken slackens slake slakes slaloms slambangs slams slangs slashdot slashdots slaughters slay slays sleeks sleepswalk sleepswalks sleeptalk sleeptalks sleepwalk sleepwalks sleets slenderize slept sleptwalk slews slicken slickens slid slidder slims slingshoot slingshoots slink slinks slite slites slither slithers slobbers slocken slockens sloom slooms sloshes slove slows sluff sluffs slung sluther sluthers smallcap smarten smartens smartmouth smartmouths smatter smatters smears smirch smite smites smogs smokum smolder smolders smoodge smoosh smooshes smoothe smoothen smoothens smote smoulder smoulders smuggle smuggles smushes snarf snarfle snarfles snarfs snavel sneap sneaps sneb sneers snerk snerks snew snews snig sniggers sniggle snirts snivels snoozle snoozled snoozles snopes snortle snortles snowplows snowproofs snoze snozen snuck snuffles snuffs sobers soccers socialise socialises socialize socializes sociologize sociologizes soddens sodomise sodomises sodomize sodomizes soften softens sog solarise solarises solarize solarizes sold solemnifies solemnify solemnise solemnises solemnize solemnizes solicit solicits solidifies solidify soliloquize soliloquizes soloes solubilise solubilises solubilize solubilizes solve solves somatise somatize somatizes somnabulate somnabulates somnambulate somnambulates sonicate sonicates sonorize sonorizes soodle soogees soothe soothes sophonsify sophronize sorcerise sorcerises sorcerize sorcerizes sorn sorns soughs sought soundproofs souses sowth spackles spae spamvertise spamvertises spamvertize spanghew spanghews sparble sparge sparges sparsify spatialize spatializes spatter spatters spatulates spawns spays speaks specialise specialises specialize specializes speciate speciates specifies specify spectate spectates speculate speculates speechifies speechify speedcube speedcubes speedran spellbind spellbinds spelunk spelunks spews spherize spherizes spifflicate spifflicates spiflicate spiflicates spirantize spirantizes spiritualize spiritualizes spirts spites splain splains splendish splenectomize splenectomizes splodged splosh splurt splurts splutter splutters spoliate spoliates spoonfeed spoonfeeds spoors sportfish sporulate sporulates spose sposes spotlit sprang sprawls spraypaint spraypaints spreadeagle spreadeagles sproings spruik spruiks spuddles spumes spun spunks spurlges sputters squander squanders squeaks squinny squirms squoosh squooshed squooshes squoze sqush squshes stabilise stabilises stabilitate stabilize stabilizes stablishes stagnate stagnates stanch stanches standardise standardises standardize standardizes stang starbursts stargaze stargazes starks starve starves stating staunches steadies steamroll steamrolls steams steepen steepens steeps steeves steg stellenbosch stellify stenographs stereomutate sterilise sterilises sterilize sterilizes sternutate sternutates stets steups stevened stickhandle stickhandles stickle stickles stiffen stiffens stigmatise stigmatises stigmatize stigmatizes stimulate stimulates stipples stipulates stob stog stokes stonifies stonify stood stots stott stottin stotts stow stows straddled straggle straggles straighten straightens straiten straitens strangle strangles strangulate strangulates strategise strategises strategize strategizes stratifies stratify straught stravaig stravaige stravaiges stravaigs strengthen strengthens strew strews striates striddle stridulate stridulates strikesthrough strikingthrough strim stringifies stringify strinkle strive strives strobilate strobilates strongarms strove struck struckthrough structuralise structuralises structuralize structuralizes structurize strums strung studies stuffs stultifies stultify stun stung stuns stupefies stupefy stylise stylised stylises stylize stylizes subcategorise subcategorises subcategorize subcategorizes subclassifies subclassify subcontract subcontracts subdivide subdivides subduct subducts subdue subdues subedit subedits subitise subitises subitize subitizes subjectivize subjectivizes subjoin subjoins subjugate subjugates sublate sublates sublimate sublimates submerge submerges submerse submerses subministers submit submits submodify suborn suborns subrogate subrogates subscribe subscribes subserve subserves subserviate subside subsides subsidise subsidises subsidize subsidizes subsist subsists subspecialise subspecialize subspecializes substantialize substantializes substantiate substantiates substantivise substantivises substantivize substantivizes substract substracts subsume subsumes subtend subtends subtilise subtilises subtilize subtilizes subtract subtracts suburbanize suburbanizes subvene subvent subvents subvocalize succeed succeeds succors succours succumb succumbs succuss succusses suckle suckles suctions sudate sue sues suffer suffice suffices sufflaminates sufflates suffocate suffocates suffonsify suffumigate suffumigates suffuse suffuses sugarcoat sugarcoats suggest suggests sulfurate sulfuret sulfurise sulfurises sulfurize sulfurizes sull sullies sulls sully sulphurate sulphurise sulphurize summarise summarises summarize summarizes summon sumoylate sumoylates sunbake sunbakes sunbathe sunbathes sunders sunscalds superabound superabounds superadd superadds superannuate superannuates superate supercalenders supercedes supercharge supercharges supercompress supercompresses superconduct superconducts supercool supercools supererogate supererogates superficialise superficialises superficialize superficializes superheat superheats superhumanise superhumanize superhumanizes superimpose superimposes superinduce superinduces superinfect superinfects superintend superintends superlie superlies supernaturalise supernaturalises supernaturalize supernaturalizes superovulate superovulates superpose superposes superpraise supersample supersamples supersaturate supersaturates superscribe superscribes supersedes supersize supersizes supervene supervenes supervise supervises supinate supinates supplant supplants supplicate supplicates suppose supposes suppress suppresses suppurate suppurates supremes surceases surcharges surfcast surfs surmount surmounts surpass surpasses surrejoin surveil surveils survive survives suspend suspends suspire susurrate swaddle swaddles swam swanks swarts swashes swattle sweal swedge sweeten sweetens swelt swelts swept swerve swerves swiftboat swiftboats swiggle swipes swither swithers swives swonk swoons swore swung swyve swyves syllabicate syllabicates syllabificate syllabifies syllabify syllabize syllabizes syllogize symbolise symbolises symbolize symbolizes symmetrize symmetrizes sympathise sympathises sympathize sympathizes symptomatize symptomatizes symptomize symptomizes synchronise synchronises synchronize synchronizes syncopate syncopates syncretise syncretize syncronises syncronize syncronizes synergise synergises synergize synergizes synopsize synopsizes synthesise synthesises synthesize synthesizes synthetize synthetizes syntonize systematise systematises systematize systematizes systemize tabloidize tabloidizes tabulate tabulates tacet takes talebear talibanize tallage tallages tames tamp tampers tamps tantalise tantalises tantalize tantalizes targetted tarnishes tase tattles taught taughtens tauten tautens tautomerize tautomerizes tawk tawks taxidermize taxonomise taxonomize taxonomizes teach teaches teargasses teaze teem teems teends teeter teeters teethe teethes teld telecommunicate telecommunicates telecommute telecommutes telefrag telefrags telegraphs telemarket telemarkets teleoperate teleoperates telepathise telepathises telepathize telepathizes teleport teleports televise televises teleworks tells telnets telt templatize templatizes temporise temporises temporize temporizes tempt tempts tend tenderise tenderises tenderize tenderizes tends tepefy tergiversate tergiversates terminates terraform terraforms terrifies terrify terrorise terrorises terrorize terrorizes tertiate tertiates tesselate tesselates tessellate tessellates testfire testfires testifies testify textualise textualises textualize textualizes texturise texturises texturize texturizes thaifies thaify thank thanks thatcherise thatcherises thatcherize thatcherizes thawt thay theatricalise theatricalises theatricalize theatricalizes thees thematise thematises thematize thematizes theologise theologises theologize theorise theorises theorize theorizes therapize therapizes thermalise thermalises thermalize thermalizes thermoform thermoforms thermoregulate thicken thickens thieve thirl thizzin thoil thoriate thoriates thoroughgo thous thrang thrashes threaten threatens thresh threshes threw thrive thrives thrombose throve thumbshots thunders thwock thwocks tidies tidivate tidivates tighten tightens timeses timonise timonises timonize timonizes tink tinks tinsels tintinnabulate tintinnabulates tiptoes titillate titillates titivate titivates titrate titrates tittivate tittivates titubate titubates tivo tlk toat toats tobrest toburst tocleave toddle toddles todraw tokenise tokenises tokenize tokenizes tolash told tolerate tolerates tolerize tonitruate tonitruates took tooken tootle tootles topdress topdresses topes topicalise topicalises topicalize topicalizes topple topples toquake toquash torace torat toreave torend torfel torit torive torob torques torrefies torrefy toruffle tose toshiver toslive tosliver tosunder toswap toswink totalize totalizes totorve totread toughen toughens tould touristifies touristify tousle tousles touzle touzles towind toxicate traduce traduces traffick trafficks traffics tragedize tragedizes tranch tranduce tranquilise tranquilises tranquilize tranquilizes tranquillize tranquillizes transact transactivate transactivates transacts transaminate transaminates transceive transceives transcend transcendentalize transcendentalizes transcends transclude transcludes transcode transcodes transcreate transcreates transcribe transcribes transdifferentiate transdifferentiates transduce transduces transesterifies transesterify transfect transfects transfenestrate transfenestrates transfigurate transfigurates transfigure transfigures transfreights transfrete transfund transfunds transfuse transfuses transgress transgresses transhape transhapes tranship tranships transhumanize transilluminate transistorize transistorizes transliterate transliterates translocate translocates transmetallate transmetallates transmigrate transmigrates transmit transmits transmogrifies transmogrify transmute transmutes transpierce transpierces transpire transpires transplace transshape transship transships transubstantiate transubstantiates transude transudes transumes transvalue transvest trant trants trape trashes traumatise traumatises traumatize traumatizes trawls treeifies treeify trendify triages triangulate triangulates triculate trifurcates trimerise trimerises trimerize trimerizes trimethylate trimethylates trinkle triphthongize triphthongizes trisect trisects triturate triturates trivialise trivialises trivialize trivializes troak troaks trod trods tromp tromps tropicalize tropicalizes trosh troubleshoot troubleshoots troubleshot trounce trounces trudges trues truncates trypsinise trypsinises trypsinize trypsinizes tsk tsks tsktsk tsktsks tszuj tszujes tubthump tubthumps tumbles tumefies tumefy tupe turbanize turbocharge turbocharges tutoy tutoyer tutoyers tuts twattles tweedle tweeze tweezes twiddle twiddles twifallow twocs tyek tyeken tyekin tyeks typecast typecasts typesets typewrite typewrites typifies typify tyrannise tyrannises tyrannize tyrannizes ubiquitinate ubiquitinates ubiquitinylate ubiquitinylates ubiquitylate ubiquitylates uglifies uglify ukrainianize ulcerates ultrasimplifies ultrasimplify ululate ululates umbecast umbedraw umbego umbelap umbethink umbrages umbraid umount umounts unaffiliate unaffiliates unalter unanchor unanchors unarchive unarchives unarm unarms unassemble unassembles unbag unbags unbalance unbalances unban unbandage unbandages unbans unbar unbars unbefool unbelt unbelts unbend unbends unbeseems unbewitch unbewitches unbind unbinds unbless unblesses unblind unblindfold unblindfolds unblinds unblock unblocks unblouse unblouses unblur unblurs unbolt unbolts unbook unbooks unbore unbosoms unbottle unbottles unbox unboxes unbrace unbraces unbraid unbraids unbreak unbreaks unbrick unbricks unbridle unbridles unbroke unbuckle unbuckles unbuild unbuilds unbundle unbundles unbung unburden unburdens unburies unburthens unbury unbutton unbuttons uncage uncages uncap uncape uncapes uncaps unchain unchains unchamber unchambers uncheck unchecks unchilds unchoke unchokes unchurch unchurches unciphers unclasp unclasps unclench unclenches unclip unclips uncloak uncloaks unclog unclogged unclogs unclose uncloses unclothe unclothes unclutter unclutters uncock uncocks uncoil uncoils uncollar uncollars uncomment uncomments uncomplicate uncomplicates uncompress uncompresses unconfigure unconfigures uncook uncooks uncoop uncoops uncork uncorks uncouple uncouples uncover uncovers uncrate uncrates uncreate uncreates uncrinkle uncrinkles uncrook uncrooks uncross uncrosses uncrown uncrumple uncrumpled uncrumples uncrunch uncrunches uncrystallize uncrystallizes unct uncts uncuff uncuffs uncunt uncunts uncurl uncurls uncurse uncurses undam undams undeceive undeceives undeclare undeclares undefine undelete undeletes undemocratise undemocratises undemocratize undemocratizes underachieve underachieves underact underacts underapplies underapply underappreciate underappreciates underapproximate underapproximates underbake underbakes underbear underbids underbill underbills underbind underboil underboils underbook underbought underbuild underbuilt underburn underburns underburnt underbuy underbuys undercalculate undercalculates undercapitalize undercharge undercharged undercharges underclaim underclaims underclock underclocks undercome undercook undercooks undercool undercount undercounts undercrank undercranks undercreep undercry underdeliver underdelivers underdelve underdetermine underdevelop underdevelops underdid underdo underdoes underdope underdopes underdraw underdraws underdress underdresses underdrew underearn undereat undereats underemphasize underemphasizes underexaggerate underexaggerates underexplain underexplains underexpose underexposes underfang underfeed underfeeds underfinance underfinances underfit underfund underfunds underget undergird undergirds undergo undergoes underguess underguesses underheat underheats underhole underinflate underinflates underinsulate underinsulates underinsure underinsures underinvest underinvests underlaid underlet underlets underlie underlies underlooks undermaintain undermaintains undermine undermines undernim undernourish undernourishes underpay underpays underperform underperforms underpin underpins underplants underplays underpower underpowers underpraise underpraises underpredict underpredicts underprescribe underprescribes underprice underprices underprocess underprocesses underproduce underpromise underpromises underquote underquotes underrates underreach underreaches underrecognize underrecognizes underrecruit underrecruits underregulate underregulates underreport underreports underrepresent underrepresents underrotate underrotates undersalt undersample undersamples undersave undersaves undersee undersell undersells underserve underserves undershoot undershoots undersign undersigns undersleep undersleeps underslept undersow underspecifies underspecify underspends underspent understaff understaffs understand understands understate understates understimulate understimulates undersupplies undersupply undersupport undersupports undertake undertakes underthink underthrew underthrow underthrows underthrust underthrusts undertip undertips undertook undertreat undertreats undertrump undertrumps underturn underuses underutilize underutilizes undervalue undervalues underween underweights underwent underwhelm underwhelms underworks underwrite underwrites underwrote undid undignify undislocate undislocates undo undock undocks undoes undraw undraws undream undreamed undreams undresses undrew undulates unearth unearths unelect unembed unencode unencodes unencumber unencumbers unentangle unentangles unequip unequips unerase unerases unescape unescapes unexecute unfang unfangs unfasten unfastens unfetter unfetters unfills unfist unfists unfits unfix unfixes unflag unflags unfocus unfocuses unfold unfolds unfollow unfollows unfool unformat unfreeze unfreezes unfriends unfrock unfrocks unfroze unfuck unfurl unfurls ungag ungags ungarble ungarbles unglue unglues ungod ungods ungrease ungreases ungrounds unhair unhand unhandcuff unhandcuffs unhands unhang unhappen unhappens unharness unharnesses unhem unhems unhid unhidden unhide unhides unhills unhinge unhinges unhitch unhitches unhobble unhobbles unhold unholds unholster unholsters unhood unhoods unhook unhooks unhorse unhorses unhouse unhouses unhug unhusk unhusks unhyphenate unhyphenates unifies uniformise uniformises uniformize uniformizes unify unimagine unimagines unimpale unimpales unindent unindents uninstall uninstalls uninvite uninvites unionise unionises unionize unionizes uniquifies uniquify unite unites unitise unitize unitizes universalise universalises universalize universalizes unjam unjams unjinx unjoin unjoins unjoint unkennel unkennels unkill unkink unkinks unkisses unknew unknit unknits unknow unknows unlace unlaces unlade unladed unlades unlash unlashes unlatch unlatches unlay unleaf unleafs unlearn unlearns unleash unleashes unleave unleaves unlikes unlimber unlink unlinks unlist unlists unlive unlives unload unloads unlock unlocks unloop unloops unloose unloosen unloosens unlooses unlove unloves unmake unmakes unman unmanacle unmanacles unmans unmarries unmarry unmarshal unmarshals unmask unmasks unmast unmatch unmatches unmerge unmerges unmix unmixes unmold unmolds unmoor unmoors unmortgage unmortgages unmount unmounts unmute unmutes unmuzzle unmuzzled unmuzzles unnatures unnerstand unnerstands unnerstood unnerve unnerves unown unowns unpack unpacks unpadlock unpadlocks unpaint unpaints unpark unparks unpaunch unpause unpauses unpeel unpeels unpeg unpegs unpick unpickle unpickles unpicks unpiece unpin unpins unplait unplaits unplug unplugs unpot unpots unprofessionalise unprofessionalize unprotect unprotects unpunctuate unpunctuates unpurse unpurses unpuzzle unpuzzles unquench unquenches unrar unrars unrate unrates unravel unravels unrecognize unrecognizes unrecommend unrecord unrecords unreel unreels unregister unregisters unretire unretires unriddle unriddles unrig unrings unrip unrips unrobe unrobes unroll unrolls unroof unroofs unroot unroots unrope unropes unruffle unruffles unrung unsaddle unsaddles unsanctifies unsanctify unsaw unsay unsays unscramble unscrambles unscrew unscrews unscroll unseal unseals unseam unseams unseat unseats unsee unsees unselect unselects unsell unsells unserialize unserializes unsets unsettle unsettles unsex unsexes unshackle unshackles unshape unshare unshares unsheath unsheathe unsheathed unsheathes unsheaths unshift unshifts unship unships unshoe unshoes unshut unshuts unslings unslung unsnag unsnags unsnap unsnaps unsnarl unsnarls unsolder unsolders unsolve unsolves unspeak unspeaks unsphere unspheres unspoil unspoke unspool unspools unsqueeze unsqueezes unstack unstacks unstaple unstar unstars unsteadies unstep unsteps unstick unsticks unstitch unstitches unstop unstops unstrap unstraps unstrings unstrung unstuck unstuff unstuffs unsubscribe unsubscribes unsullies unsully unswaddle unswaddles unswathe unswathes unsweeten unsweetens unswirl unswizzle unswizzles untack untacks untangle untangles untar untars unteach unteaches untether untethers unthaw unthaws unthink unthinks unthought unthread unthreads unthrone unthrones untick unticks untie unties untighten untightens untrain untrains untrammel untrammels untreasure untreasures untruss untrusses untuck untucks untwine untwist untwists unvails unveil unveils unvessel unvessels unvicar unvicars unvisards unvizard unvizards unwads unwatch unwatches unweave unweaves unweight unweights unwind unwinds unwire unwires unwish unwound unwove unwrap unwraps unwriggle unwrinkle unwrinkles unwrite unwrites unwrote unyoke unyokes unzip unzipped unzipper unzippers unzips upbar upbear upbears upbind upblow upbore upbraid upbraids upbreaks upbreed upbreeds upbroke upbroken upbrought upbuild upbuilds upbuilt upcheer upcheers upchucks upcoil upcoils upcurl upcurls upcycle upcycles updive updraw updraws updrew upend upends upfills upflow upflows upgathers upgave upgive upgives upgrew upgrows uphang uphaul upheap upheave upheaves upheld uphelm uphilt uphilts uphoard uphoards uphold upholds upholster upholsters uphurl upkeeps uplay uplead uplean upleap upleaps uppluck upraises uprear upregulate upregulates uprisen uprises uproll uproot uproots uprose uprouse uprun upscales upseek upsell upsells upsize upsizes upskill upskills upsnatch upsold upsolve upsot upsprang upsprung upstages upstare upstartle upstarts upstay upsway uptalk uptear uptears upthrew upthrows uptie upties uptore upvotes upwell upwells upzone upzones urbanise urbanises urbanize urbanizes urgings urinate urinates urticate urticates ush ushes usurp usurps utfse utilise utilises utilize utilizes utilizing utters uuencode uuencodes vacate vacates vaccinate vaccinates vacillate vacillates vacuate vail vajazzle validate validates validifies validify valorise valorises valorize valorizes valuate valuates vamoose vamooses vandalise vandalize vandalizes vanish vanishes vanitize vanitizes vanquish vanquishes vant vaporise vaporises vaporize vaporizes vapourises vapulates variegates varies vary vascularize vascularizes vasectomize vasectomizes vasodilate vasodilates vaticinate vectorise vectorises vectorize vectorizes veels vegetate vegetates vegetize velarize velarizes velcros vellicate vellicates vend vends venerate venerates ventilate ventilates ventralize ventralizes ventriloquize ventriloquizes verbalise verbalises verbalize verbalizes verbifies verbify verbize verifies verify verlanize vermiculates verminate verminates vernalize vernalizes versifies versify verticalize verticalizes vesicate vex vexes vibrates victimise victimises victimize victimizes vide videoes vides videte vie vies vilifies vilify vilipend vilipends villainise villainize villainizes vindicate vindicates vinify violate violates virialise virialises virialize virializes virilize virilizes virtualise virtualises virtualize virtualizes visualise visualises visualize visualizes vitalise vitalises vitalize vitalizes vitaminize vitaminizes vitamise vitiate vitiates vitrifies vitrify vittle vituperate vituperates vivifies vivify vivisect vivisects vocalises vocalize vocalizes vociferate vociferates volatilize volatilizes volcanize volumise volumises volumize volumizes voluntell vomits voodoos vouchsafe vouchsafes vould voxelate voxelates vroom vrooms vulcanise vulcanises vulcanize vulcanizes vulgarise vulgarises vulgarize vulgarizes vulnerate vum vurps wabble wabbles wackyparse wackyparses wafts waitasec waive waken wakens wantonize wants wanze wanzes warchalk warchalks wardriven wardrove warishes warms warn warns warps warsh waterbomb waterbombs waterlog waterlogs waterproofs waul waulk waulks wauls wawl wawls wayfare wayfares waylaid waylay waylays wayments weaken weakens weans weaponise weaponises weaponize weaponizes wearies weatherise weatherises weatherize weatherizes weatherproofs weathers webifies webify wed weele ween weens weep weeps wees weets weigh weighs welk welshes wench wept westernise westernises westernize westernizes whang whangs wheech wheedle wheedles whelm whelms whet whets whiles whirls whitelists whiten whitens whittles whomp whomps whoomp whoomps whopped whup whups wibbles widdles widen widens wield wields wikifies wikify windsurf windsurfs winge winges winsorize winsorizes winterfeeds winterise winterises winterize winterizes winterproofs wintle wiredraw wiredraws wisen wisens wishes wist wists wite wites withdraw withdraws withdrew wither withgo withhold withholds withsafe withsaid withsay withsays withset withsit withspeak withspeaks withspoke withstand withstands withstood witter witters wive wizens woebetide woke wolfs wolve womanise womanises womanize womanizes wons wonts woo woobiefies woodchop woodchops woofs woolgather woolgathers worsen worsens worsts worths wos wot wots wouldest wouldst wove wows woz wrassle wrassles wrays wreak wreaks wreathe wreathes wrest wrests wries wrings write writes writh wrixle wrongfoot wrongfoots wrote wrung wtfpwn wtfpwns wunt wuther wuthers wuvd wuvs wuvz wuz wytes xeroxes xxxs yabber yabbers yammers yark yarks yarr yawns ycladd ycleped yean yeans yearn yearns yelloch yellochs yerks yesk yete yex yexes yoink yoinks yoohoo york yorks yot youngs youthen youthens yuk yuppifies yuppify zams zay zerg zergs zeroise zeroises zeroize zeroizes zhooshed zhooshes zincifies zincify zincs zombifies zombify zonks zooms zots zouks zoutch 635 a able above acad acm acm_siam acs acta addit adhes adsorpt adv agric aij akad alamos alche algor all allg am amer ames an angew anlagen ann annu anorg another antibiot antimicrob any anybody anyone anything anytime anywhere aoac app appita appl april aquat are aromat artif arzneim asoc assoc astm astron astrophys atmos august aust autom aux available axs bacteriol be because been before behav being belg bij bioact biocatal biochem biochim biodegrad biodeterior bioelectrochem bioelectron bioenerg bioeng biogeochem biol biolumin biomater biomed biometrika biomol bioorg bioph biopharm biophys biorem bioresour biosci biosens biotechnol biotransform bmc both brennst buenos calorim calphad can can't cannot carbohydr carcinog cardiovasc catal cellul ceram charact chem chemilumin chemischen chemom chemother chern chil chim chimica chromatogr cienc ciencia cient cients cij cimento clin cm_1 comm commun compat compd compos compr comput concr condens contam contrib convers coord corros cosmochim could cryog cryst crystallog crystallogr cytochem de december degrad della delle delos departamento der des diffr dipartimento discov dispos dm_3 do does doesn't doing dokl don't done dosim e_mail each ecol econ ecotoxicol educ eine either electroact electroanal electroceram electrochem electrochim elem embo en endocrinol energ eng engl enzym enzymol epidemiol eq eqs equilib erdgas erdol essent ethnopharmacol eur europ europhys eval every evol exch explor extr f'unct facil facultad faseb fax february febs ferroelectr fett filtr fluoresc foly forsch fract francisco fresenius funct fundam g_1 galvanotechnik gazz gefahrstoffe geochem geochim geofiz geol geomicrobiol geophys geosyst gf gmbh go goes going h_1 had handb has have haven't having he heiv her here's heteroat heterocycl heterogen his histochem holz hoppe how hydrob hydroch hydrol hypertens i'd i'll i2 ieee if iff immunol immunopharmacol important inc indica indus informatica inhib inorg inst instrum int'l integr intell intermed ionics is isbn isij isot it it's its itself j_1 january jersey jmaa jsme jth july june kautsch kg_1 khim khoz kinet kohle kolloidn kong koord kovove kraft kristallogr kth kunstst l_1 la las le left_hand leipzig les let's lett liebigs lim liminf limsup los ltd lubr luft lumin macromol magn magnetobiol magy makromol manuf many march materialwiss math mathematiques may me meas med membr mendeleev metab metailkd metall metalloved microanal microb microbiol microchem microcolumn microelectromech microelectron microsc microstruct might mikrochim min_1 ministerio minx modell mol_1 monatsh monit monogr must my myself nachr nanopart nanostruct nat natl nato naturforsch nauk naunyn neft neither neorg neuroanat neurochem neurosci new nondestr nothing novel november nucl numer nuovo obrab obshch october ocul ofa ofatoms ofs ofsciences ofthe ofthis ofx oncol oper opin organomet other ought our ourselves oxid pathol pept perkin perspect pestic petrochem pharmacal pharmacol pharmacool philos photobiol photochem photopolym photosensit photosynth phycol phys physica physiol phytochem phytorem plast pnas pollut polym polytech prakt prepr prikl prob proc proced procesowa prof progr propag propul prot przem publ purif quimica radiat radioact radioanal radiochim radiopharm rapra recl recognit recycl ref refs regul reinf reinhalt relat reprod resolut reson resour respir rev rheol right_hand rome roum russ s_1 same sampe san santa santos scand schmiedeberg sci scripta see semicond sens september seyler shall she should siam silic silik simul soc softw solut some something sonochem spect spectro spectrochim spectrom spectros spectrosc spektrosk stat struct studi substitues such supercond supercrit supp supramol symp synop syst tappi tech technol terre that that's the their theirs them themselves then theochem theor ther thermochim thermodyn thermophys thermoplast these they this thorough those thus tion toxicol trac trav tsvetn two's ultrason und univ unserer us using usual v_1 van various verfahren virol vol von warme warsaw was we we'll were werkst werkstofftech what when where whereas whether which while who whom whose why wij will wish won't would xl you you'll you're your yours yourself zeit zool zur zvesti α11 α12 α_1 α_invex α_level α_limit β_iii γpnas δ11 δ22 δij εij θij μm_1 π00�����������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/CHANGELOG�������������������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�013131� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.282765316 29 atime=1762812827.99875967 30 ctime=1762812827.282765316 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/CHANGELOG������������������������������������������������������������������������������0000644�0001750�0000144�00000115470�15104461633�015133� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������2025-11-10 RELEASE OF VERSION 2.0.3 2025-11-07 Added checks to build scripts 2025-11-03 Updated configure for qmake6 2025-10-28 Ported to Qt6 2025-08-30 Updated internals links 2024-07-07 RELEASE OF VERSION 2.0.2 2024-07-05 Set DOI and EPRINT visible on the window title 2024-07-03 Added a warning if Qt/OpenSSL library is unavailable 2024-07-03 Addressed Qt5.15 deprecated warnings and changes 2022-03-19 Improved stemmed context patterns 2022-03-19 Improved relevance ranking for text matching documents 2021-02-12 RELEASE OF VERSION 2.0.1 2021-02-10 Updated documentation 2021-02-10 Fixed missing network library in Windows package 2021-02-09 Added Pandoc markdown cite command (Thanks to M. Young) 2021-02-08 Added title_first_word cite ID placeholder (Thanks to J. Kalliauer) 2021-02-08 Set LZ4 compressor as default 2020-05-15 Added preliminary document ranking 2020-05-07 Improved title capitalization 2020-05-07 Optimized BibTeX parsing 2020-04-12 Added stemmed context search 2019-12-23 Optimized PDF text cache 2019-12-23 Added LZSSE4 compressor 2019-11-26 Added LZ4 compressor 2019-12-16 Optimized TeX to Unicode conversion 2019-11-24 Addressed Qt5.13 deprecated warnings and changes 2019-11-23 Removed obsolete Qt5.13 calls 2019-11-22 Optimized collection indexing 2019-11-19 Removed memory peak in collection indexing 2019-11-17 Refactored authorString 2019-11-02 Added optimized text matcher for SIMD SSE2 and AVX2 CPUs 2019-03-27 Fixed regression on Update Documents Metadata 2019-02-10 RELEASE OF VERSION 2.0.0 2019-02-08 Updated Windows installer 2019-02-07 Cleanup cppcheck and clazy checks 2018-09-19 Updated abbreviations.txt file 2018-09-19 Fixed journal conversion for LaTeX escaped characters 2018-09-07 RELEASE OF VERSION 1.9.9 2018-09-06 Fixed gcc compiler warning (Thanks to F. Rusconi) 2018-09-05 Updated abbreviations.txt file 2018-09-05 Added alternate abbreviation and full journal processing 2018-08-27 Set to remove conflicting braces on extern author strings 2018-08-27 Updated netqinf.txt file, set reliable queries only 2018-08-27 Added merge metadata actions to netqinf syntax 2018-08-27 Added parsers for arXiv and Crossref 2018-08-23 Fixed break of query chain on single network error 2018-08-07 RELEASE OF VERSION 1.9.8 2018-08-07 Updated bookmark and abbreviation files 2018-08-05 Ported deprecated jsMath newcommand macros to MathJax 2018-08-05 Fixed sub and sup scripts conflicting with MathJax 2018-07-27 Added PDF user manual 2018-07-27 Updated documentation and improved navigation 2017-06-28 RELEASE OF VERSION 1.9.7 2017-06-27 Set MathJax default local for increased security (Thanks to F. Rusconi) 2017-06-27 Fixed broken Cross Ref link 2017-01-14 Added missing Qt dll to Windows installer (Thanks to M. Ivanovski) 2017-01-07 RELEASE OF VERSION 1.9.6 2017-01-07 Fixed regression when invoking internal editor for Annote 2017-01-07 Fixed MacOSX build (Thanks to G. V. Wyngaerd) 2016-07-16 RELEASE OF VERSION 1.9.5 2016-07-16 Fixed main panel tab order regression 2016-05-20 RELEASE OF VERSION 1.9.4 2016-05-18 Set internal editor for Annote 2016-05-18 Updated jsMath interface to MathJax 2016-05-18 Deprecated clipboard poll, removed Qt5X11Extras dependency 2016-05-18 Removed unused What's This button from dialogues 2016-05-15 Set QRegularExpression/PCRE to in-document searches 2016-05-15 Fixed c2bReferenceList QUrl encoding 2016-05-15 Fixed output in c2bconsole 2016-05-15 Updated build scripts for Windows 2016-05-14 Included upcoming QtWebEngine together with QtWebKit 2016-05-13 RELEASE OF VERSION 1.9.3 2016-05-12 Updated and cleaned building scripts 2015-08-10 RELEASE OF VERSION 1.9.2 2015-08-09 Code cleanup through cppcheck 2015-08-09 Removed old modified QRegExp 2015-08-08 Updated indexing 2015-07-24 RELEASE OF VERSION 1.9.1 2015-07-24 Set QRegularExpression/PCRE for full search indexing 2015-07-20 Fixed Qt 5.5.0 compilation 2015-07-18 RELEASE OF VERSION 1.9.0 2015-07-18 Ported to Qt5 2014-12-20 RELEASE OF VERSION 1.5.0 2014-12-18 Fixed document indexing when conversion to text fails 2014-12-17 Improved keyword sentence extraction 2014-12-17 Added modified XPDF code to separate superscripts 2014-12-10 Improved PDF to text postprocessing, code checking and de-hyphenation 2014-08-18 Fix missing keywords for two c2bscripts/*.desktop files (Thanks to F. Rusconi) 2012-12-23 Updated netqinf.txt for PubMed (Thanks to S. Kreisel) 2012-11-05 RELEASE OF VERSION 1.4.9 2012-11-04 Minor improvements in keyword extraction 2012-11-03 Code cleanup and micro optimizations through cppcheck 2012-10-23 Assure tmp path is writable when operating remotely (Thanks to A. Norton) 2012-08-02 Disable Open button when Postprocess does not produce a file (Thanks to J. Welford) 2012-05-15 RELEASE OF VERSION 1.4.8 2012-05-13 Fixed gcc 4.7 compilation, Debian bug 667129 (Thanks to M. Klose and F. Rusconi) 2012-02-17 Added a warning whenever external document to text conversion fails while indexing 2012-01-15 Minor improvements in keyword extraction 2011-12-20 RELEASE OF VERSION 1.4.7 2011-12-17 Added keyword excerpt view 2011-12-13 Optimized keyword extraction citer cleanup 2011-12-05 Propagated --conf flags to child processes 2011-11-18 Improved citer navigation 2011-09-18 Added document similarity view 2011-09-18 Added POS tagger and keyword patterns 2011-08-14 Added automatic keyword extraction from documents 2011-08-03 RELEASE OF VERSION 1.4.6 2011-08-02 Set minor improvements in volume, number, page recognition 2011-08-01 Made shortcuts customizable 2011-06-29 Added XCode ./qmake/cb2bib-osx.pro file (Thanks to J. Ralls) 2011-06-29 Updated netqinf.txt for PubMed 2011-03-21 RELEASE OF VERSION 1.4.5 2011-03-21 Fixed build error, set explicit X11 (Thanks to F. Rusconi, J. Corneli, and A. Wintcher) 2011-01-23 RELEASE OF VERSION 1.4.4 2011-01-23 Consider import multi keywords BibTeX entries (Thanks to C. Dri) 2010-12-17 Added Cyrillic to ASCI transliteration (Thanks to V. Koval) 2010-12-06 Updated bookmark's file netqinf.txt 2010-11-24 Documented comma separated value CSV to BibTeX procedure (Thanks to G. Ranger) 2010-11-05 Fixed three bashisms in file c2btools/bib2pdf (Thanks to F. Rusconi) 2010-10-19 Set executable inside cmake build tree (Thanks to F. Rusconi) 2010-10-11 RELEASE OF VERSION 1.4.3 2010-10-11 Fixed two-letter initial, 'Yu. Last' author parsing 2010-10-10 Fixed trimming leading spaces in Annote verbatim sections 2010-10-10 Removed hard-coded monospace font in Annote's CSS file 2010-10-10 Fixed opened files seen as modified in when using Qt 4.7.0 2010-09-11 RELEASE OF VERSION 1.4.2 2010-08-31 Added initial cmake configure/build/install 2010-08-31 Set fixes and testing cmake configure/build on MacOSX (Thanks to D. Swain) 2010-08-30 Set calling external tools path independent on MacOSX (Thanks to C. Szepesvari) 2010-08-22 Minor code cleanup 2010-08-21 Fixed wrong author parsing if ForeName is missing in XML PubMed (Thanks to F. Rusconi) 2010-05-24 RELEASE OF VERSION 1.4.1 2010-05-23 Improved journal recognition 2010-05-22 Updated bookmark's file netqinf.txt 2010-05-22 Skip saving void documents when "Download document if available" is checked 2010-05-22 Check for document existence and mimetype prior to downloading 2010-05-22 Refactored network classes 2010-04-24 RELEASE OF VERSION 1.4.0 2010-04-23 Set c2bCiter to remember display format 2010-04-22 Set clipboard connected mode default in c2bCiter 2010-04-22 Remember last current citation in c2bCiter 2010-04-22 Updated several icons in editor 2010-03-21 Set workaround for cleared line edits showing cursor (QTBUG-7866) 2010-03-21 Postprocess DOI to clear URL formatting 2010-03-21 Added chronological view in c2bCiter 2010-02-22 RELEASE OF VERSION 1.3.7 2010-02-21 Validate author in PubMed XML parser 2010-02-21 Avoid stopping network queries when one fails 2010-02-21 Set minor improvements in year, volume, page recognition 2010-02-21 Updated style sheet for reference browsing 2010-02-20 Fallback title to booktitle to file name in views 2010-02-20 Set --sloppy to accept all files 2010-02-20 Consider shortcut to write/update source document's metadata (Thanks to S. Kreisel) 2010-02-20 Consider c2bCiter's filter to be connected to clipboard (Thanks to H. Seifzadeh) 2010-02-20 Fixed Medline parsing in some cases with uppercased hyphenated words (Thanks to F. Rusconi) 2010-01-05 RELEASE OF VERSION 1.3.6 2010-01-04 Added 'Fore IJ Last' formatted author recognition 2010-01-02 Minor improvements in journal recognition 2009-12-28 Minor improvements in PubMed XML parser for journal pages and year 2009-12-26 Fixed two cases of author capitalization which conflicted with suffixes and two-letter initials 2009-12-21 Minor improvements in abstract and keywords recognition 2009-12-15 Adapted configure script to Gentoo build descriptions (Thanks to H. Mildenberger and A. K. Huettel) 2009-10-26 RELEASE OF VERSION 1.3.5 2009-10-25 Fixed a regression in single word approximate strings not working for documents 2009-10-21 Fixed wrong automatic extraction for DOIs followed by commas (Thanks to X. Helluy) 2009-10-21 Set reference field shortcuts in manual extraction 2009-10-21 Consider setting manual extraction selection keyboard aware (Thanks to H. Seifzadeh) 2009-10-15 Consider fallback journal to booktitle for inproceedings in views (Thanks to H. Seifzadeh) 2009-10-13 RELEASE OF VERSION 1.3.4 2009-10-12 Skip copy/move document on save if BibTeX file is not writable 2009-10-11 Updated bookmark's file netqinf.txt (Thanks to H. Seifzadeh) 2009-10-09 Added minor improvements in author, pages and volume recognition 2009-10-09 Included citeid in check repeated 2009-09-19 Fixed a typo, --tempdir must be --tmpdir, in bib2pdf (Thanks to F. Rusconi) 2009-09-11 Protected all shell variables against spaces in configure (Thanks to F. Rusconi) 2009-09-10 RELEASE OF VERSION 1.3.3 2009-09-06 Added 'fix string: context' search type 2009-08-26 Optimized search in files, and implemented fast matching for approximate strings 2009-08-26 Fixed compiler -Werror=format-security errors in qDebug calls 2009-08-18 Added --sloppy switch for --doc2bib and --txt2bib actions 2009-08-11 Fixed export entries from search browser 2009-08-06 Added relevant Prism metadata recognition 2009-08-03 Fixed possible separator duplication in keywords 2009-08-03 Wrote a more clarifying documentation for automatic extractions 2009-08-01 Fixed a regression not converting '2nd' and '3rd' PubMed author suffixes 2009-07-27 RELEASE OF VERSION 1.3.2 2009-07-27 Do not ask if document should be saved when closing search results browser 2009-07-27 Added citeid document ID placeholder that keeps both IDs syncronized 2009-07-26 Set not to expand pathless filenames in USB mode permitting to use host PATH tools 2009-07-26 Improved check repeated and added check repeated on save 2009-07-25 Consider title ID placeholder and set cite and document separate IDs (Thanks to O. Sluciak) 2009-07-23 Fixed wrong file name in missing converter message 2009-07-23 Updated build scrips to not require external tools dependence 2009-07-23 Set calling external tools path independent 2009-07-10 Added author_all_abbreviated cite ID placeholder (Thanks to D. Huang) 2009-07-05 Improved configure and tool scripts (Thanks to F. Rusconi and L. Mamane) 2009-06-29 RELEASE OF VERSION 1.3.1 2009-06-27 Added Check Repeated functionality for current reference 2009-06-27 Fixed parser not processing last field in inverted comma style BibTeX 2009-06-27 Set netqinf.txt to use internal XML parser for PubMed 2009-06-27 Fixed packaging, double copying scripts and initial external tool setting 2009-06-01 Fixed c2bciter script not passing all arguments (Thanks to F. Rusconi) 2009-06-01 RELEASE OF VERSION 1.3.0 2009-05-30 Updated configure script (Thanks to F. Rusconi) 2009-05-23 Added module c2bCiter and command line action --citer 2009-05-23 Set cb2Bib not to process clipboard updates if main panel is closed 2009-05-23 Set standard shortcuts to conform to user's desktop 2009-05-23 Improved to ASCII conversion and collation algorithm 2009-05-20 Added example query using HTML to text conversion in netqinf.txt 2009-05-20 Added pre-process script med2bib (Thanks to F. Rusconi) 2009-05-20 Pre and post process scripts cleanup (Thanks to F. Rusconi) 2009-05-17 Fixed wrong display of proper names for BibTeX files written in reverse order 2009-05-17 Improved abstract and keywords heuristics (Thanks to J. P. Eckmann) 2009-05-17 Cleanup command line messages, fixed wrong mention on temporary files deletion 2009-05-17 Convenience script dl_cb2bib renamed to c2bimport 2009-05-10 Improved document to text conversions, removal of non-textual symbols 2009-05-10 Fixed set initial references.bib to user's home directory 2009-05-10 Made temporary file names dependent on cb2Bib session 2009-05-10 Fixed a regression on Windows uninstaller not deleting install directories 2009-05-10 Added convenience shell wrapper c2bconsole on Windows 2009-05-07 RELEASE OF VERSION 1.2.3 2009-05-07 Fixed a regression when setting unsupervised processing 2009-05-07 Renamed settings key for metadata writer 2009-05-06 Improved journal name recognition 2009-05-06 Added conversion htm2txt_query and htm2txt_referenceurl actions in netqinf.txt 2009-05-04 Added --configure command line functionality 2009-05-04 Added --txt2bib and --doc2bib command line functionality 2009-04-05 RELEASE OF VERSION 1.2.2 2009-04-05 Set reference list sorting case and diacritic insensitive 2009-04-05 Improved author string parsing 2009-03-31 Consider parsing reverse order and comma separated author strings (Thanks to D. Comtois) 2009-03-27 Added network access through a proxy host (Thanks to T. Deneux) 2009-03-25 RELEASE OF VERSION 1.2.1 2009-03-25 Improved the pattern/regular expression editor 2009-03-24 Fixed a potential crash if expected and actual captures in user's patterns mismatch 2009-03-15 Improved/optimized journal names lookup 2009-03-07 Added line numbers in embedded editor 2009-03-03 RELEASE OF VERSION 1.2.0 2009-03-01 Moved Qt requirement to version 4.4.0 or later 2009-03-01 Use plain text optimized class QPlainTextEdit for text editing 2009-03-01 Updated bookmark's file netqinf.txt 2009-02-27 Improved built-in network capabilities, including redirections and cookies 2009-02-27 Added author to network query excerpts 2009-02-27 Code cleanup through cppcheck 2009-02-22 Updated build dependencies for Debian 5.0 2009-02-05 RELEASE OF VERSION 1.1.1 2009-01-17 Added heuristic recognition for authors (single and multiple blocks, natural order) 2009-01-10 Revert Latin ligatures in document to plain text conversions 2009-01-10 Improved author string processing 2008-12-27 Improved pages, volume and number recognition 2008-12-23 Convert ' & ' to ' and ' in journal before submitting a network query 2008-12-23 Fixed a regression on month, editor and cite ID fields 2008-12-21 Updated to Qt 4.5.0 QRegExp/QString semantic changes 2008-12-21 Fixed spec file for openSuSE 11.1 build (Thanks to M. Hüwe) 2008-12-17 RELEASE OF VERSION 1.1.0 2008-12-07 Added cb2Bib's Annote viewer 2008-12-07 Added --html-annote and --view-annote command line functionality 2008-12-07 Fixed some issues regarding command line filenames and filedialogs in Windows 2008-12-07 Synchronized BibTeX browser panel with reference line editors 2008-11-30 Code cleanup and refactoring 2008-11-30 Removed no longer needed external client for opening files 2008-11-21 Fixed an issue with percent encoding/tag substitution custom bookmarks 2008-11-21 Updated bookmark's file netqinf.txt for new ACS journals and Science URLs 2008-10-22 RELEASE OF VERSION 1.0.4 2008-10-21 Added 'any word/all words' type searches 2008-10-20 Fixed buttons enabled/disabled in search dialog on Qt > 4.4.0 2008-10-20 Fixed 'About panel' bookmarks not displaying dynamic links on Qt > 4.4.0 2008-10-20 Improved pages, volume and number recognition 2008-09-19 RELEASE OF VERSION 1.0.3 2008-09-18 Recognize and process page format '123-3pp' 2008-09-18 Set arXiv ID as BibTeX URL field 2008-09-18 Fixed a bug when scrolling to 'Edit reference' in search if multiple edits were done 2008-09-17 Force USB mode 'cb2Bib --conf' to use relative to BibTeX document filenames 2008-09-17 Improved managing of relative document filenames 2008-09-17 Added 'Export Entries' to export selected citations in BibTeX editor (Thanks to to A. M. Elena) 2008-07-21 RELEASE OF VERSION 1.0.2 2008-07-20 Added 'Edit reference' in search results 2008-07-20 Fixed a regression for LaTeX-Unicode conversion for letters Å and Æ 2008-07-20 Set LyXPipe in Windows 2008-07-20 Updated PNAS Url 2008-07-10 Optimized approximate string when searching linked documents 2008-07-10 Use Qt::AA_NativeWindows to avoid flickering on Qt 4.4.0 2008-06-17 RELEASE OF VERSION 1.0.1 2008-06-17 Fixed a bug that could result in computing negative word stretch in approximate strings 2008-06-15 Fixed a bug sometimes blocking the reference list filter in BibTeX browser 2008-06-15 Arranged BibTeX browser menus, made context and selection sensitive 2008-06-15 Fixed a regression in BibTeX browser actions not properly showing in menus 2008-06-15 Set sub and superscript conversions from HTML alt tags and [sub/p .] tags 2008-06-15 Fixed BibTeX parser failing in some cases with nested braces 2008-06-15 Added 'Update Documents Metadata' in BibTeX editor 2008-06-10 Set BibTeX to Unicode letter conversions for \LaTeX{} syntax 2008-06-10 Fixed a regression in clipboard's panel multiple line syntax highlighting 2008-06-10 Added tag title for automatic queries, updated netqinf.txt 2008-06-10 Set better flags for calling ExifTool (Thanks to P. Harvey) 2008-06-07 RELEASE OF VERSION 1.0.0.1 2008-06-07 Fixed an error in inserted metadata from PDFImport and multiple files 2008-06-07 Fixed a regression preventing from setting correct djvu extension 2008-06-07 RELEASE OF VERSION 1.0.0 2008-06-07 Updated cb2Bib's license to GPL version 3 2008-06-07 Added metadata writing through ExifTool 2008-06-05 Set double braces to be seen only BibTeX preview and save 2008-06-05 Removed BibTeX separator for author queries 2008-06-05 Updated configuration dialog 2008-06-05 Only set pdf extension in 'file' when none is given 2008-06-05 Set Utf8 as default codec for files on Windows 2008-06-05 Fixed minor bug in suggested regular expression for page 2008-05-31 Added metadata reading and parsing 2008-05-25 Fixed 'Postprocess month' not following settings 2008-05-25 Added Select File in File context menu 2008-05-25 Added clear functionality to combo boxes 2008-05-07 RELEASE OF VERSION 0.9.5 2008-05-07 Set LyX pipe selection for Qt 4.4.0 filedialogs 2008-05-07 Fixed 'Search in files' headers and browser 'Select' icon display for Qt 4.4.0 2008-04-15 Fixed missing HTML special character encoding when searching by field 2008-04-08 Contributed regexps for Earth Planet Sci Lett, 2008-04-08 Phys Earth Planet Inter, Geophys J Int (Thanks to L. A. C. Silva) 2008-04-07 RELEASE OF VERSION 0.9.4 2008-04-07 Updated bookmark netqinf.txt file 2008-04-05 Set optionally file entries relative to current BibTeX file (Thanks to A. M. Elena) 2008-04-03 Added tag selection to dynamic bookmarks 2008-04-03 Added dynamic bookmarks to cb2Bib context menu 2008-03-31 Moved basic edit actions to 'Edit' context submenu 2008-03-05 Added cb2Bib browser context action 'Open Document Url' 2008-03-05 Set cb2Bib browser link preference to local article file, to URL, and to DOI 2008-03-05 Set PubMed ID as BibTeX URL field in PubMed extractions (Thanks to S. Tabibzadeh) 2008-02-01 RELEASE OF VERSION 0.9.3 2008-01-31 Added bookmark menu in the embedded editor 2008-01-30 Fixed/Improved PubMed IDs extraction (update netqinf.txt) 2008-01-30 Fixed ISBN recognition for cases 'ISBN 0: 0-0000-0000-0' 2008-01-30 Fixed an issue when parsing bib keys formatted by KBibTeX (Thanks to D. Car) 2007-12-07 RELEASE OF VERSION 0.9.2 2007-12-07 Fixes/workarounds for filedialog and Qt<4.3.3. Added exec icon for X11. 2007-12-05 Optimized BibTeX parser, searches and composite searches 2007-12-04 Fixed merging of contiguous search excerpts 2007-12-04 Fixed a bug when deleting search patterns, avoid accepting empty patterns 2007-11-25 RELEASE OF VERSION 0.9.1 2007-11-25 Fixed ISBN recognition for cases 'ISBN-0: 0-0000-0000-0' 2007-11-25 Added filter mode selection to browser/editor reference list 2007-11-25 Set filedialog to remember last size 2007-11-25 Fixed compilation issue on Debian 4.1.1-21 (Thanks to A. Matuszak) 2007-10-31 RELEASE OF VERSION 0.9.0 2007-10-30 Show 'search in files' output in text mode if no hits but search errors 2007-10-30 Consider 'editor' if 'author' is empty for cite IDs 2007-10-30 Customizable page number separator (Thanks to C. Ullrich) 2007-10-30 Consistent update of shortcuts: Use standard ones, and Alt modifier in other cases 2007-10-30 Updated Editor/Browser menu 2007-10-28 Added 'Search In Files' for selected text 2007-10-28 Code refactoring: Added resource class c2b 2007-10-27 Remove patterns '(Editor)', '(Ed)', ..., prior to processing an editors string 2007-10-27 Improved heuristic guess for ISBN 2007-10-27 Improved heuristic guess for abstract, considers tag 'summary' 2007-10-26 Updated message dialogs for better desktop integration 2007-10-26 Fixed shortcut for 'Deletes temporary BibTeX output file' 2007-10-26 Set c2bUtils into namespace, some inlining of utilities 2007-09-17 Fixed wrong renaming of non '.pdf' files when original filename has several '.' 2007-09-05 RELEASE OF VERSION 0.8.4 2007-09-05 Setting relative file paths and temporaries when launched with --conf option 2007-09-05 Minor code cleanup 2007-08-02 Updated netqinf.txt file 2007-08-02 Updated PubMed/Medline parser 2007-07-05 RELEASE OF VERSION 0.8.3.1 2007-07-05 Fixed a regression while parsing command line 2007-07-05 RELEASE OF VERSION 0.8.3 2007-07-04 Fixed memory leak from cb2Bib not freeing c2bSearchInFiles 2007-07-03 Fixed file dialog captions when using Qt 4.3.0 2007-07-03 Do not show cb2Bib's main panel when launched with '--bibedit filename.bib' 2007-07-03 Reorganized settings and updated windows installer 2007-07-03 Considered user configuration files, --conf flag (Thanks to S. Oom) 2007-07-03 Fixed Debian/Ubuntu packaging script (Thanks to L. Eraly) 2007-07-02 Updated configure script 2007-06-07 Fixed some dialogs not showing when using Qt 4.3.0 2007-05-07 RELEASE OF VERSION 0.8.2 2007-05-07 Fixed 'Unknown Error' when copying/moving files from PDFImport on Windows 2007-05-07 Scape < and > symbols in browser 2007-05-01 Fixed regression 'Copy instead of moving non-local files' for external clients 2007-04-23 Added approximate string search 2007-04-08 Added search highlight for abstracts 2007-04-08 Added PDF search excerpts 2007-04-08 Added cache for PDF search 2007-04-08 Remember Browser font size 2007-04-01 RELEASE OF VERSION 0.8.1 2007-04-01 Copy instead of moving non-local files 2007-04-01 Improved/optimized Search in Files functionality for composite patterns 2007-04-01 Syncornized BibTeX Editor and Browser navigation 2007-03-24 Set raw mode view as default, instead of tagged mode view 2007-03-24 Set unique BibTeX parsing. Fixes parsing in Editor and Search in Files 2007-03-24 Improved BibTeX recognition and parsing 2007-03-24 Improved PDFImport functionality (Thanks to E. Gaubitzer) 2007-03-18 Updated netqinf.txt and regexps.txt files 2007-03-18 Added excerpt tag for queries 2007-03-18 Improved journal and pages recognition 2007-03-18 Cleanup and reorganization of settings management 2007-03-16 Remove from PDFImport file list unsuccessfully converted files 2007-03-16 Remember last directory/file in PDFImport filedialog (Thanks to E. Gaubitzer) 2007-03-13 RELEASE OF VERSION 0.8.0 2007-03-11 Added HTML browser view to BibTeX editor 2007-03-10 Added 'Search references in files' functionality 2007-03-10 Avoided cb2Bib's tags from interfering with heuristic recognition 2007-03-10 Improved heuristic guess for volume, pages, and number 2007-03-10 Added clear functionality to line editors 2007-03-10 Updated all dialogs to make them consistent and desktop aware 2007-03-10 Fixed preparser 2007-03-10 Improved Find in Text dialog 2007-03-09 Fixed Reference List not displaying booktitle 2007-03-06 Fixed a rare wrong passing of optional arguments to external tools 2007-03-06 Fixed history in filedialogs 2007-03-06 Removed wrong slash in filedialog filenames when file did not exist 2007-03-06 Fixed wrong editor exit when document is modified and cancel is pressed 2007-02-18 RELEASE OF VERSION 0.7.3 2007-02-17 Removed duplicated blank lines in external process logs 2007-02-17 Convert HTML character encodings in PubMed reference import 2007-02-17 Fixed URL encoding for opening files through internal desktop service 2007-02-17 Remove braces in title replacement for Bookmarks 2007-02-17 Fixed pages replacement for Bookmarks (fixes CR bookmark) 2007-02-17 Remember word un/wrap mode in editors 2007-02-17 Check if DOI is a web address in BibTeX editor before being opened 2007-02-17 Added web search customization in BibTeX editor 2007-02-16 Fixed/improved uppercased 'title' capitalization 2006-12-06 RELEASE OF VERSION 0.7.2 2006-12-06 Added choice to write 'title' in double braces 2006-12-06 Fixed pasting of formatted text to BibTeX editor 2006-12-06 Fixed CR regexp in netqinf.txt to not to read HTML-encoded DOI 2006-12-06 Fixed a subtle bug preventing viewers from updating if text was selected 2006-12-06 Added raw, non-preprocessed clipboard view mode (Thanks to M. Wegmann) 2006-12-05 Updated configure and install doc for MacOSX (Thanks to Konstantin and P. Koshevoy) 2006-12-04 Added "Download Reference to cb2Bib" functionality 2006-12-04 Updated cb2Bib command line syntax 2006-12-03 Added Mac OS X cb2bib.icns icon file (Thanks to Konstantin) 2006-12-03 Added missing mingwm10.dll file on Windows package 2006-10-30 RELEASE OF VERSION 0.7.1 2006-10-30 Set default configure prefix to /usr (Thanks to T. Fischer) 2006-10-30 Fixed configure to use -prefix path 2006-10-30 Fixed LyX pipe not shown at file dialogs 2006-10-30 Revert to internal file management if file copy/move/open client is empty 2006-10-19 Fixed local file open on Windows 2006-10-16 RELEASE OF VERSION 0.7.0 2006-10-16 Fixed a regression when setting line/column in Editor 2006-10-16 Improved BibTeX file selection through combo filename list 2006-10-16 Added Editor's modified flag 2006-10-16 Set KDE consistent 'Save'/'Save As' icons in BibTeX Editor 2006-10-16 BibTeX Editor remembers Reference List position 2006-10-16 Set consistent labeling in file dialogs 2006-10-16 Added file history in file dialogs 2006-10-16 Fixed a regression related to wrong file dialog messages 2006-10-16 Consider integrated desktop service for URL opening 2006-10-16 Use QFontComboBox for font selection 2006-10-04 Fixed a regression when copying/moving files from PDFImport 2006-08-31 Fixed a regression when selecting fields in cb2Bib panel 2006-08-30 RELEASE OF PREVIEW 0.6.91 2006-08-30 Fixed a regression in droped files encoding in PDFImport 2006-08-29 Added queries by DOI (Thanks to T. Geissmann) 2006-08-29 Updated netqinf.txt information file 2006-08-29 Fixed a regression in the network functionality 2006-08-29 Fixed a compilation issue on Mac OS (Thanks to M. Bongard) 2006-08-25 RELEASE OF PREVIEW 0.6.90 2006-08-25 Ported to Qt4 2006-05-15 Updated netqinf.txt for NAR 2006-04-24 RELEASE OF VERSION 0.6.1 2006-04-24 Updated netqinf.txt for PNAS 2006-04-24 Keep 'File' synchronized with 'CITEID' 2006-04-24 Concatenate multiple 'title' in regexps, as 'Title: Subtitle' (Thanks to McKay Euan) 2006-04-23 Added tooltip to 'File' with origen file name 2006-04-23 Cleaned and updated network related classes 2006-04-23 Schedule dropped or PDFImport file copying/moving until Bib item is saved 2006-04-23 PDFImport rewritten, fixed several bugs (Thanks to M. Wegmann) 2006-04-02 RELEASE OF VERSION 0.6.0 2006-04-02 Added highlight for 'author|issue|title|volume' in clipboard 2006-04-02 Added contributed regexp for PROLA (Thanks to Martint) 2006-04-02 Added unified, platform independent new line recognition 2006-04-02 Fixed missing 'NewLine' on OSX (Thanks to McKay Euan) 2006-03-28 Fixed ScienceDirect regexp 2006-03-28 Updated Wiley InterScience Example 2006-03-22 Updated cb2Bib's icon 2006-03-22 Added JTCC journal 2006-03-18 Fixed 'Copy/Rename: Keep .djvu, .dvi, .ps, .ps.gz, .tex, .txt extensions' on Windows 2006-03-18 Fixed RC_FILE (Windows and OSX) 2006-02-21 RELEASE OF VERSION 0.5.3 2006-02-21 Added SISC journal, and added contributed_re.txt (Thanks to G. B. @ RWTH) 2006-02-20 Added 'Insert/Overwrite' flag to editor 2006-02-20 Added 'File Save As' functionality to editor 2006-02-20 Copy/Rename: Keep .djvu, .dvi, .ps, .ps.gz, .tex, .txt extensions 2006-02-20 Added preparser scripts isi2bib and ris2bib 2006-02-20 Added external preparser functionality 2006-01-23 RELEASE OF VERSION 0.5.2 2006-01-22 Fixed BibTeX parser for ending non-bracket cases (eg. 'year = 2000}') 2006-01-22 Added Title and ISBN automatic guess 2006-01-22 Fixed Abstract automatic guess 2006-01-21 Added custom syntax colors 2006-01-20 Fixed referencelist.cpp for icc/64 compiler 2006-01-15 Get default font color from the Window Manager 2005-12-12 RELEASE OF VERSION 0.5.1 2005-12-12 Added 'Set active LyX pipe' in BibTeX edit menu 2005-12-12 Added edit menu in BibTeX editor 2005-12-12 BibTeX parser considers non-bracket cases (eg. 'year = 2000,') 2005-12-11 Fixed syntax highlighter for commented lines 2005-11-17 Added http POST command 2005-11-16 Updated netqinf.txt for CR 2005-11-14 Updated netqinf.txt for ACS 2005-10-26 RELEASE OF VERSION 0.5.0 2005-10-08 Proper capitalization: FIRST MID LAST -> First Mid Last 2005-10-08 Added JSTOR regexp (Thanks to B. Goodrich) 2005-10-08 Added citeID customization (Thanks S. Oom for suggestions) 2005-10-07 Set default path /usr/local/bin/pdftotext on Mac OS X 2005-08-20 RELEASE OF VERSION 0.4.6 2005-08-20 Fixed: Set current file when 'cb2bib --bibedit fn.bib' 2005-08-20 Extended Unicode to LaTeX to all entries 2005-08-20 Added equivalent processing for author and editor strings 2005-08-20 Added 'Full Author and Editor Name' option 2005-08-20 (Thanks to J. Schelp and B. Goodrich for suggestions) 2005-08-12 'cb2bib --bibedit', show main maximized if no files are given 2005-08-12 RELEASE OF VERSION 0.4.5 2005-08-12 Fixed memory leak from c2bEditor 2005-08-11 Added web search also in Editor's Reference List 2005-08-11 Menu improvements 2005-08-11 Unicode <-> LaTeX for infinity symbol 2005-08-11 Fixed viewCb2Bib button behavior in BibTeX editor 2005-08-11 BibTeX editor button functionality: edit/set editor on top 2005-08-11 Allow for multiple BibTeX editors 2005-07-06 RELEASE OF VERSION 0.4.4 2005-07-06 Fixed bookmark and regexp editor: save before execute 2005-07-06 Fixed netqinf.txt for PubMed 2005-07-06 Fixed cb2Bib idle in multiple queries + debug file option 2005-07-06 Alternate Journal Name no longer stored in 'annote' field 2005-07-06 Added 'Journals to Full/Abbreviated Name' in editor 2005-07-06 'configure' adapted to knoppix 3.6 (Thanks to cognite) 2005-07-02 Removed 'install' checking in 'configure' script 2005-07-02 ClipboardPoll disabled as default for Mac OS X 2005-06-16 RELEASE OF VERSION 0.4.3 2005-06-15 Set Postprocess widget to modeless 2005-06-15 Added menu entries 2005-06-15 Added heuristic recognition 2005-06-01 Added line number indicator in editor 2005-06-01 Fixed translating '&' to LaTeX multiple times 2005-05-29 Do not reload current BibEditor if ref added to a different file 2005-05-29 Code rearrangement and cleaning: c2bBibParser 2005-05-11 RELEASE OF VERSION 0.4.2 2005-05-11 Added reference navigation in BibTeX editor 2005-05-09 Improved search capabilities in BibTeX editor 2005-05-09 Added LyX pipe citation procedure: 2005-05-09 adapted from R. Stephenson's Tellico 2005-05-09 Added Reference List in BibTeX editor 2005-05-06 Added desktop file 2005-05-04 Uppercase greeks, also in "PNAS-style" {}, (), or [] delimiters 2005-05-04 Added automatic conversion for "PNAS-style" {middle dot} 2005-04-23 RELEASE OF VERSION 0.4.1 2005-04-23 Added scripts bib2pdf and bib2end.bat 2005-04-23 Added Postprocessing of current BibTeX file 2005-04-23 (Thanks to J. Tan for suggestions) 2005-04-19 Added command line 'cb2bib [[--bibedit] filename.bib]' 2005-04-19 Added 'author' to 'Convert string to LaTeX' config 2005-04-19 Added 'Selection to Unicode' in BibTeX editor 2005-04-19 Added 'Selection to LaTeX' in BibTeX editor 2005-04-18 Fixed Clipboard change notifications 2005-04-18 (Thanks to L. Lunak for help and ClipboardPoll code) 2005-04-07 RELEASE OF VERSION 0.4.0 2005-04-06 Added customizable input preprocessing 2005-04-06 Rearrange main window buttons 2005-04-06 Added Editor Search capability 2005-04-06 Fix Modified Editor and Exit main window 2005-04-04 Initialize 'view BibTeX' Scroll Bar position 2005-04-04 Remember 'About' Scroll Bar position 2005-04-04 Added Contextual Help 2005-04-04 Added convenience BibTeX File editor 2005-03-17 RELEASE OF VERSION 0.3.6 2005-03-16 Added ~ 10 more Unicode <-> LaTeX translations 2005-03-16 Improved 'pages' postprocessing 2005-03-16 Consider inverted commas as BibTeX delimiter 2005-02-17 Remove start and end blank in BibTeX field string 2005-02-09 RELEASE OF VERSION 0.3.5 2005-02-09 Parse whole netqinf.txt if 'No article found' 2005-02-07 Remember Config page 2005-02-07 Rearrange About/View BibTeX buttons behavior 2005-01-21 RELEASE OF VERSION 0.3.4 2005-01-20 Add 'Make Network Query' button 2005-01-20 DOI automatic extraction 2005-01-19 'PubMed Search' import (J.Name. year month;vol(n):pp.) 2005-01-19 Add significative error messages for missing filenames 2005-01-19 RegExp/Bookmarks Editor arrangement 2005-01-19 Added convenience bookmarks 2005-01-18 Consider author suffixes in Medline extraction 2005-01-18 Consider Medline AU if FAU isn't available 2005-01-15 Include DOI in Medline extraction 2005-01-14 RELEASE OF VERSION 0.3.3 2005-01-14 Added 'PubMed - Medline Journal' recognition 2005-01-13 Introduced simple Journal-Volume-Page queries 2005-01-10 (Thanks S. Vega and probono for suggestions) 2005-01-08 Added last name prefix 'vande' 2005-01-07 Added complete ACS journal list 2005-01-04 Arrangement copy/move/open for local/network files 2004-12-29 RELEASE OF VERSION 0.3.2 2004-12-29 Previous add conflicted 'van der Wal, Jan and Lieb, Jely A.' 2004-12-28 RELEASE OF VERSION 0.3.1 2004-12-27 'Abcd, E., F. Ghij, ...' citation style (Thanks P. Magwene) 2004-12-27 Fix slow highlighting 2004-12-21 RELEASE OF VERSION 0.3.0 2004-12-20 Consider interlaced authors-affiliations, removed moreauthors 2004-12-20 Regexps deposition note (Thanks J. Vertrees) 2004-12-20 Enable/Disable 'Add BibTeX to file' button 2004-12-20 Added convenience RegExp File editor 2004-12-20 Render disabled icons in grayscale 2004-12-14 Valgrind memory leak debugging 2004-12-08 RELEASE OF VERSION 0.2.8 2004-12-08 Fix a wrong enable/disable behavior in PDFImport button 2004-12-07 Convert to lower case titles completely uppercase 2004-12-07 Fix: PDF renaming consistently managed by cb2Bib instead of kfmclient 2004-12-07 Added error description for file related warnings 2004-12-01 Added 'IOP Electronic Journals' import 2004-10-22 Add abstract|introduction|keywords|key words highlight 2004-10-19 RELEASE OF VERSION 0.2.7 2004-10-19 PDFImport via pdftotext (Thanks F. C. Coelho for suggestions) 2004-09-19 RELEASE OF VERSION 0.2.6 2004-09-19 TeX <-> Unicode translations for Greek letters 2004-09-19 Choice for title Unicode -> LaTeX conversion 2004-09-18 Added some few journal abbreviations 2004-09-18 Fix wrong recognition 'First S.P.'(Thanks S. Oom) 2004-09-18 Fix 'Last, DE' - conflicting First and initials with suffixes 2004-09-18 Added author prefix 'da' and suffix 'Jr' 2004-09-08 RELEASE OF VERSION 0.2.5 2004-09-08 Choice for short/long journal names 2004-09-08 'month' postprocessing (Thanks F. Hedman) 2004-09-08 Added 'Alt D' to delete temporary BibTeX output (Thanks S. Oom) 2004-09-07 Added 'Alt R' accelerator to start automatic recognition 2004-09-07 Proper recognition for 'First I Second, ' 2004-09-02 RELEASE OF VERSION 0.2.4 2004-09-02 Previous fix conflicted with 'First I. Second, ' 2004-08-31 Fix message pointing to wrong file (Thanks G. Palfinger) 2004-08-30 RELEASE OF VERSION 0.2.3 2004-08-30 Fix wrong recognition 'First SP, Second WE, '(Thanks S. Oom) 2004-08-30 RELEASE OF VERSION 0.2.2 2004-08-29 Experimental: kfmclient to retrieve pdf files 2004-08-29 Thanks F. Hedman: 2004-08-28 Improved automatic URL recognition 2004-08-28 Added BibTeX fields 'eprint' and 'doi' 2004-08-22 RELEASE OF VERSION 0.2.1 2004-08-22 Workaround for acrobat, mozilla, qt 3.3.3 issues 2004-08-17 Fixed 'file' - 'eprint' duplication in BibTeX output 2004-08-13 Set 'article' as default type 2004-07-30 RELEASE OF VERSION 0.2.0 2004-07-30 Improved visual input/output presentation 2004-07-29 RegExp format changes: Added extra line for reference types 2004-07-29 RegExp format changes: 'authors' -> 'author' 2004-07-29 Extend reference fields list 2004-07-28 Input reference type list 2004-07-12 RELEASE OF VERSION 0.1.4 2004-07-12 Fix "F.-S. Last" author name processing 2004-07-12 Fix to compile against Qt 3.1.0 or later 2004-07-11 RELEASE OF VERSION 0.1.3 2004-07-09 Improved 'ScienceDirect' import 2004-07-09 Improved TeX <-> Unicode translations 2004-07-09 Added 'Nature from Fisrt Paragraph' import 2004-07-08 Added 'DBLP article' import (thanks to P. Woelfel) 2004-07-08 Consider also '&' as a separator in author automatic recognition 2004-07-08 Fixing 'empty-field {}' error in BibTeX recognition 2004-07-07 Improved MakeCiteID for composite names 2004-07-07 Consider composing sufix 'III' 2004-07-07 Added LastName prefix 'dos' and 'del' 2004-07-07 Corrected JCICS extended journal name 2004-07-05 RELEASE OF VERSION 0.1.2 2004-07-05 Added 'ISI Web of Knowledge Table of Contents Alert' import. 2004-07-05 Fixing: 'Last, FST' -> 'F. S. T. Last' (but not 'LAST, FIRST') 2004-07-05 Proper last name capitalization ('LAST-NAME' -> 'Last-Name') 2004-07-04 Escaping math characters '∂' and '−' 2004-07-03 RELEASE OF VERSION 0.1.1 2004-07-01 Escaping accented characters (MakeCiteID and authors and title in MakeBib) 2004-06-29 RELEASE OF VERSION 0.1.0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/cb2bib.pro������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013564� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.178766136 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/cb2bib.pro�����������������������������������������������������������������������������0000644�0001750�0000144�00000000123�15104461330�015544� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������SUBDIRS += src/c2b/c2blib.pro src win32 { SUBDIRS += src/win } TEMPLATE = subdirs ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/LICENSE���������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�012724� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.918760301 30 ctime=1762812827.154766325 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/LICENSE��������������������������������������������������������������������������������0000644�0001750�0000144�00000104505�15104461330�014715� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. http://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/c2btools��������������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461634�013373� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812828.602754908 30 atime=1762812827.994759702 30 ctime=1762812828.602754908 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2btools/������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461634�015441� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2btools/PaxHeaders/bib2pdf������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014701� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.174766167 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2btools/bib2pdf�����������������������������������������������������������������������0000755�0001750�0000144�00000006316�15104461330�016676� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #------------------------------------------------------------------------------- # bib2pdf -- Script to convert BibTeX files to PDF # cb2Bib Tools # # Copyright (C) 2005-2025 by Pere Constans # constans@molspaces.com # # Improvements and modifications: # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # May/June 2009: # - Added checks to ensure that the used commands are available on # system. # - Make use of mktemp to create a temp directory. # # See LICENSE file that comes with this distribution # # Usage: bib2pdf input_bib output_pdf #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Init variables #------------------------------------------------------------------------------- # Modify accordingly, by choosing either pdflatex or latex+dvipdfm #latexCmd=pdflatex latexCmd=latex ; dvi2pdfCmd=dvipdfm bibtexCmd=bibtex #------------------------------------------------------------------------------- # Immediately check that the needed programs are there: "${latexCmd}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ${latexCmd} (LaTeX software) is required." echo "Ending processing." exit 1 fi "${bibtexCmd}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ${bibtexCmd} (BibTeX software) is required." echo "Ending processing." exit 1 fi # Special case with dvi2pdf: if [ "x${dvi2pdfCmd}" != "x" ] then "${dvi2pdfCmd}" --version | head -n2 | grep dvipdfm > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ${dvi2pdfCmd} (LaTeX software) is required." echo "Ending processing." exit 1 fi fi # Make sure we trap errors (we put that after the tests above because # we need the tests to fail, in case, without exiting immediately). set -e # Getting filenames from command line echo "cb2Bib Tools: Script to convert BibTeX to PDF" if test "$#" != 2; then cat <<EOF Usage: $0 input_bib output_pdf EOF exit 2 fi # Init some other variables (Modify accordingly) and create temporary # directory. latex_flags="-interaction=nonstopmode" # Note that we use the mktemp utility that ensures that # we do not overwrite any preexisting directory. tmp_dir=$(mktemp -d --tmpdir c2b_tools_tmp.XXXXXXXX) # Setting files bib="$1" pdf="$2" work_dir="$PWD" cat > "${tmp_dir}"/c2b_tmp.tex <<EOF \documentclass[a4paper,10pt]{article} %\documentclass[letterpaper,10pt]{article} \pagenumbering{roman} \bibliographystyle{unsrt} \oddsidemargin 0.0in \evensidemargin 1.0in \textwidth 6.0in \headheight 0.0in \topmargin 0.in \textheight 9.0in \begin{document} \nocite{*} \bibliography{c2b_tmp} \end{document} EOF cp "$bib" "${tmp_dir}"/c2b_tmp.bib # LaTeX procedure (Modify accordingly) cd "${tmp_dir}" # There might be bibliography errors, do not stop. set +e "${latexCmd}" $latex_flags c2b_tmp > /dev/null 2>&1 "${bibtexCmd}" c2b_tmp "${latexCmd}" $latex_flags c2b_tmp > /dev/null 2>&1 "${latexCmd}" $latex_flags c2b_tmp if [ "x${dvi2pdfCmd}" != "x" ] then "${dvi2pdfCmd}" c2b_tmp > /dev/null 2>&1 fi # Make sure we trap errors. set -e # Clean up cd "${work_dir}" cp "${tmp_dir}"/c2b_tmp.pdf "$pdf" rm -rf "${tmp_dir}" echo "$0 ended." ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2btools/PaxHeaders/med2bib������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014675� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.178766136 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2btools/med2bib�����������������������������������������������������������������������0000755�0001750�0000144�00000005071�15104461330�016667� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #------------------------------------------------------------------------------- # med2bib -- Script to convert PUBMED format to BibTeX # cb2Bib Tools # # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # Based on previous work by # Pere Constans # constans@molspaces.com # # See LICENSE file that comes with this distribution # # Usage: med2bib input_med output_bib #------------------------------------------------------------------------------- # Using med2xml and xml2bib utilities from: # http://bibutils.refbase.org/ #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Init variables #------------------------------------------------------------------------------- # Modify accordingly #med2xml=/usr/local/bin/med2xml #xml2bib=/usr/local/bin/xml2bib med2xml=med2xml xml2bib=xml2bib med2xml_flags="-u" xml2bib_flags="-sd -b" #------------------------------------------------------------------------------- # Immediately check that the needed programs are there: "${med2xml}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program med2xml (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi "${xml2bib}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program xml2bib (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi # Make sure we trap errors (we put that after the tests above because # we need the tests to fail, in case, without exiting immediately). set -e # Getting filenames from command line echo "cb2Bib Tools: Script to convert PUBMED-XML format to BibTeX" echo "" echo "It uses external package bibutils from" echo "http://bibutils.refbase.org/" echo "" if test "$#" != 2; then cat <<EOF Usage: $0 input_med output_bib EOF exit 2 fi # Create temporary directory # Note that we use the mktemp utility that ensures that # we do not overwrite any preexisting directory tmp_dir=$(mktemp -d --tmpdir c2b_tools_tmp.XXXXXXXX) # Setting files med="$1" bib="$2" work_dir="$PWD" # Preparing temporary files cp "$med" "${tmp_dir}"/c2b_tmp.med cp "$med" "${tmp_dir}"/c2b_tmp.bib # bibutils procedure cd "${tmp_dir}" "${med2xml}" $med2xml_flags c2b_tmp.med > c2b_tmp.xml "${xml2bib}" $xml2bib_flags c2b_tmp.xml | sed 's%^ISSUE=%NUMBER=%g' > c2b_tmp.bib # Clean up cd "${work_dir}" cp "${tmp_dir}"/c2b_tmp.bib "$bib" rm -rf "${tmp_dir}" echo "" echo "$0 ended." �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2btools/PaxHeaders/ris2bib������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014725� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.178766136 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2btools/ris2bib�����������������������������������������������������������������������0000755�0001750�0000144�00000005351�15104461330�016720� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #------------------------------------------------------------------------------- # ris2bib -- Script to convert RIS format to BibTeX # cb2Bib Tools # # Copyright (C) 2005-2025 by Pere Constans # constans@molspaces.com # # Improvements and modifications: # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # May/June 2009: # - Added checks to ensure that the used commands are available on # system. # - Make use of mktemp to create a temp directory. # # See LICENSE file that comes with this distribution # # Usage: ris2bib input_ris output_bib #------------------------------------------------------------------------------- # Using ris2xml and xml2bib utilities from: # http://bibutils.refbase.org/ #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Init variables #------------------------------------------------------------------------------- # Modify accordingly #ris2xml=/usr/local/bin/ris2xml #xml2bib=/usr/local/bin/xml2bib ris2xml=ris2xml xml2bib=xml2bib ris2xml_flags="-u" xml2bib_flags="-sd -b" #------------------------------------------------------------------------------- # Immediately check that the needed programs are there: "${ris2xml}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ris2xml (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi "${xml2bib}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program xml2bib (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi # Make sure we trap errors (we put that after the tests above because # we need the tests to fail, in case, without exiting immediately). set -e # Getting filenames from command line echo "cb2Bib Tools: Script to convert RIS format to BibTeX" echo "" echo "It uses external package bibutils from" echo "http://bibutils.refbase.org/" echo "" if test "$#" != 2; then cat <<EOF Usage: $0 input_ris output_bib EOF exit 2 fi # Create temporary directory # Note that we use the mktemp utility that ensures that # we do not overwrite any preexisting directory tmp_dir=$(mktemp -d --tmpdir c2b_tools_tmp.XXXXXXXX) # Setting files ris="$1" bib="$2" work_dir="$PWD" # Preparing temporary files cp "$ris" "${tmp_dir}"/c2b_tmp.ris cp "$ris" "${tmp_dir}"/c2b_tmp.bib # bibutils procedure cd "${tmp_dir}" "${ris2xml}" ${ris2xml_flags} c2b_tmp.ris > c2b_tmp.xml "${xml2bib}" ${xml2bib_flags} c2b_tmp.xml | sed 's%^ISSUE=%NUMBER=%g' > c2b_tmp.bib # Clean up cd "${work_dir}" cp "${tmp_dir}"/c2b_tmp.bib "$bib" rm -rf "${tmp_dir}" echo "" echo "$0 ended." ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2btools/PaxHeaders/isi2bib������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014714� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.178766136 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2btools/isi2bib�����������������������������������������������������������������������0000755�0001750�0000144�00000005345�15104461330�016712� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #------------------------------------------------------------------------------- # isi2bib -- Script to convert ISI format to BibTeX # cb2Bib Tools # # Copyright (C) 2005-2025 by Pere Constans # constans@molspaces.com # # Improvements and modifications: # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # May/June 2009: # - Added checks to ensure that the used commands are available on # system. # - Make use of mktemp to create a temp directory. # # See LICENSE file that comes with this distribution # # Usage: isi2bib input_isi output_bib #------------------------------------------------------------------------------- # Using isi2xml and xml2bib utilities from: # http://bibutils.refbase.org/ #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Init variables #------------------------------------------------------------------------------- # Modify accordingly #isi2xml=/usr/local/bin/isi2xml #xml2bib=/usr/local/bin/xml2bib isi2xml=isi2xml xml2bib=xml2bib isi2xml_flags="-u" xml2bib_flags="-sd -b" #------------------------------------------------------------------------------- # Immediately check that the needed programs are there: "${isi2xml}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ris2xml (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi "${xml2bib}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program xml2bib (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi # Make sure we trap errors (we put that after the tests above because # we need the tests to fail, in case, without exiting immediately). set -e # Getting filenames from command line echo "cb2Bib Tools: Script to convert ISI format to BibTeX" echo "" echo "It uses external package bibutils from" echo "http://bibutils.refbase.org/" echo "" if test "$#" != 2; then cat <<EOF Usage: $0 input_isi output_bib EOF exit 2 fi # Create temporary directory # Note that we use the mktemp utility that ensures that # we do not overwrite any preexisting directory tmp_dir=$(mktemp -d --tmpdir c2b_tools_tmp.XXXXXXXX) # Setting files isi="$1" bib="$2" work_dir="$PWD" # Preparing temporary files cp "$isi" "${tmp_dir}"/c2b_tmp.isi cp "$isi" "${tmp_dir}"/c2b_tmp.bib # bibutils procedure cd "${tmp_dir}" "${isi2xml}" $isi2xml_flags c2b_tmp.isi > c2b_tmp.xml "${xml2bib}" $xml2bib_flags c2b_tmp.xml | sed 's%^ISSUE=%NUMBER=%g' > c2b_tmp.bib # Clean up cd "${work_dir}" cp "${tmp_dir}"/c2b_tmp.bib "$bib" rm -rf "${tmp_dir}" echo "" echo "$0 ended." �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/COPYRIGHT�������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013212� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.918760301 30 ctime=1762812827.154766325 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/COPYRIGHT������������������������������������������������������������������������������0000644�0001750�0000144�00000000642�15104461330�015200� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2Bib. Copyright (C) 2004-2025 by Pere Constans cb2Bib includes third party GPL and LGPL code that is copyrighted by others: - Class clipboardPoll is based on work by Lubos Lunak, 2003 - Function citeToLyXPipe is adapted from work by Robby Stephenson, 2005 - Class QtSingleApplication by Digia Plc, 2013 - Icons come from the Oxygen, Crystal SVG, and Noia icon sets, published by the KDE Desktop Environment. ����������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/src�������������������������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�012431� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.646762446 29 atime=1762812827.99875967 30 ctime=1762812827.646762446 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/�����������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461633�014500� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bClipboard.cpp��������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015500� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.394764433 29 atime=1762812827.99875967 30 ctime=1762812827.394764433 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bClipboard.cpp�������������������������������������������������������������������0000644�0001750�0000144�00000005623�15104461633�017500� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bClipboard.h" #ifdef C2B_USE_CBPOLL #include "clipboardPoll.h" #endif #include <QApplication> c2bClipboard::c2bClipboard(QObject* parento) : QObject(parento) { // Connecting clipboard _cb = QApplication::clipboard(); _supports_selection = _cb->supportsSelection(); _is_connected = false; _cb_text = _cb->text(QClipboard::Clipboard); if (_supports_selection) _cbs_text = _cb->text(QClipboard::Selection); // Set polling _interval = 1000; #ifdef C2B_USE_CBPOLL _poll = new clipboardPoll(); connect(_poll, SIGNAL(clipboardChanged(bool)), this, SLOT(newClipboardData(bool))); #else _timer = new QTimer(this); connect(_timer, SIGNAL(timeout()), this, SLOT(checkData())); #endif } c2bClipboard::~c2bClipboard() { #ifdef C2B_USE_CBPOLL delete _poll; #endif } void c2bClipboard::checkData() { if (_cb_text != _cb->text(QClipboard::Clipboard)) { _cb_text = _cb->text(QClipboard::Clipboard); emit cbDataChanged(_cb_text); } if (_supports_selection && _cbs_text != _cb->text(QClipboard::Selection)) { _cbs_text = _cb->text(QClipboard::Selection); emit cbDataChanged(_cbs_text); } } void c2bClipboard::dataChanged() { if (_cb_text != _cb->text(QClipboard::Clipboard)) { _cb_text = _cb->text(QClipboard::Clipboard); emit cbDataChanged(_cb_text); } } void c2bClipboard::selectionChanged() { if (_supports_selection && _cbs_text != _cb->text(QClipboard::Selection)) { _cbs_text = _cb->text(QClipboard::Selection); emit cbDataChanged(_cbs_text); } } void c2bClipboard::setConnected(bool zconn) { _is_connected = zconn; if (_is_connected) { _cb_text = _cb->text(QClipboard::Clipboard); connect(_cb, SIGNAL(dataChanged()), this, SLOT(dataChanged())); if (_supports_selection) { _cbs_text = _cb->text(QClipboard::Selection); connect(_cb, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); } #ifdef C2B_USE_CBPOLL _poll->startT(_interval); #else _timer->start(_interval); #endif } else { #ifdef C2B_USE_CBPOLL _poll->stopT(); #else _timer->stop(); #endif disconnect(_cb, SIGNAL(dataChanged()), this, SLOT(dataChanged())); if (_supports_selection) disconnect(_cb, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); } } void c2bClipboard::newClipboardData(bool selectionMode) { if (selectionMode) selectionChanged(); else dataChanged(); } �������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bFileDialog.cpp�������������������������������������������������������0000644�0000000�0000000�00000000130�15104461633�015577� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1762812827.42676418 30 atime=1762812828.042759324 29 ctime=1762812827.42676418 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bFileDialog.cpp������������������������������������������������������������������0000644�0001750�0000144�00000015614�15104461633�017601� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bFileDialog.h" #include "c2bSettings.h" #include <QLineEdit> #include <QRegExp> #include <QTimer> c2bFileDialog::c2bFileDialog(QWidget* parentw, const QString& caption, const QString& fpath, const QString& ffilter) : QFileDialog(parentw, caption, fpath, ffilter) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags() | Qt::WindowMinMaxButtonsHint); setOptions(QFileDialog::DontUseNativeDialog); setModal(true); settings = c2bSettingsP; } c2bFileDialog::~c2bFileDialog() {} QString c2bFileDialog::getFilename(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg(new c2bFileDialog(parentw, _caption(tr("Select a filename"), caption), _path(path), filter)); dlg->setFileMode(AnyFile); dlg->setOption(QFileDialog::DontConfirmOverwrite, true); dlg->setAcceptMode(AcceptSave); dlg->setLabelText(QFileDialog::Accept, "Select"); const QString fn(dlg->fileName(path)); delete dlg; return fn; } QString c2bFileDialog::getOpenFilename(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg(new c2bFileDialog(parentw, _caption(tr("Select a filename"), caption), _path(path), filter)); dlg->setFileMode(ExistingFile); dlg->setLabelText(QFileDialog::Accept, "Select"); const QString fn(dlg->fileName(path)); delete dlg; return fn; } QStringList c2bFileDialog::getOpenFilenames(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg(new c2bFileDialog(parentw, _caption(tr("Select filenames"), caption), _path(path), filter)); dlg->setFileMode(ExistingFiles); dlg->setLabelText(QFileDialog::Accept, "Select"); const QString fn(dlg->fileName(path)); QStringList fns; if (!fn.isEmpty()) fns = dlg->selectedFiles(); delete dlg; return fns; } QString c2bFileDialog::getSaveFilename(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg(new c2bFileDialog(parentw, _caption(tr("Save As"), caption), _path(path), filter)); dlg->setFileMode(AnyFile); dlg->setAcceptMode(AcceptSave); const QString fn(dlg->fileName(path)); delete dlg; return fn; } QString c2bFileDialog::getExistingDirectory(QWidget* parentw, const QString& caption, const QString& path) { c2bFileDialog* dlg(new c2bFileDialog(parentw, _caption("Select directory", caption), _dirpath(path), QString())); dlg->setFileMode(Directory); dlg->setOption(QFileDialog::ShowDirsOnly, true); dlg->setLabelText(QFileDialog::Accept, "Select"); const QString fn(dlg->fileName(QString())); delete dlg; return fn; } QString c2bFileDialog::getSystemFilename(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg(new c2bFileDialog(parentw, _caption(tr("Select a filename"), caption), _path(path), filter)); dlg->setFileMode(AnyFile); dlg->setLabelText(QFileDialog::Accept, "Select"); dlg->setFilter(QDir::Drives | QDir::AllDirs | QDir::NoDotAndDotDot | QDir::System); dlg->setOption(QFileDialog::HideNameFilterDetails, true); const QString fn(dlg->fileName(path)); delete dlg; return fn; } QString c2bFileDialog::fileName(const QString& path) { readSettings(); _current_file = path; const QStringList fnf(nameFilters().filter(QFileInfo(path).completeSuffix() + ')', Qt::CaseInsensitive)); if (fnf.count() > 0) selectNameFilter(fnf.at(0)); QTimer::singleShot(250, this, SLOT(selectCurrentFile())); QString sfn; if (QFileDialog::exec() == QDialog::Accepted) { const QStringList selected(selectedFiles()); if (selected.count() > 0) sfn = selected.first(); } writeSettings(); return QDir::toNativeSeparators(QDir::cleanPath(sfn)); } void c2bFileDialog::accept() { // Set suffix for getSaveFilename dialog if (acceptMode() == AcceptSave) { QString suffix(selectedNameFilter()); QRegExp sre("\\*\\.([\\w\\.]+)"); if (sre.indexIn(suffix) != -1) { suffix = sre.cap(1); setDefaultSuffix(suffix); } } QFileDialog::accept(); } void c2bFileDialog::selectCurrentFile() { // Bug fix for Qt 4.4 not giving correct selection const QString fn(_filename(_current_file)); QLineEdit* le = findChild<QLineEdit*>(); if (le) { le->setText(fn); le->selectAll(); } } void c2bFileDialog::readSettings() { // Size resize(settings->value("c2bFileDialog/size", sizeHint()).toSize()); // History QStringList dhistory(settings->value("c2bFileDialog/history").toStringList()); dhistory.removeAll(directory().absolutePath()); std::sort(dhistory.begin(), dhistory.end()); setHistory(dhistory); } void c2bFileDialog::writeSettings() { // Size settings->setValue("c2bFileDialog/size", size()); // History if (result() == QDialog::Accepted) { // Unique paths, keeping the newest history entries QStringList dhistory(history()); dhistory.append(directory().absolutePath()); dhistory.removeAll(QDir::homePath()); dhistory.removeAll(QDir::rootPath()); QStringList chronological(settings->value("c2bFileDialog/history").toStringList()); chronological.append(dhistory.last()); // Discard repeated dhistory.clear(); for (int i = chronological.count() - 1; i > -1; --i) if (!dhistory.contains(chronological.at(i))) { dhistory.prepend(chronological.at(i)); if (dhistory.count() > 10) break; } settings->setValue("c2bFileDialog/history", dhistory); } } QString c2bFileDialog::_caption(const QString& generic, const QString& caption) { if (caption.isEmpty()) return generic + " - cb2Bib"; else return caption + " - cb2Bib"; } QString c2bFileDialog::_filename(const QString& path) { if (path.isEmpty()) return path; else return QFileInfo(path).fileName(); } QString c2bFileDialog::_path(const QString& path) { if (path.isEmpty()) return QDir::homePath(); else return QFileInfo(path).absolutePath(); } QString c2bFileDialog::_dirpath(const QString& path) { if (path.isEmpty()) return QDir::homePath(); else return QFileInfo(path + '/').absolutePath(); } ��������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bShortcutWidget.cpp���������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016561� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.474763802 30 atime=1762812828.042759324 30 ctime=1762812827.474763802 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bShortcutWidget.cpp��������������������������������������������������������������0000644�0001750�0000144�00000010740�15104461633�020554� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bShortcutWidget.h" #include "c2bSettings.h" c2bShortcutWidget::c2bShortcutWidget(QWidget* parentw) : QWidget(parentw) { ui.setupUi(this); _settingsP = c2bSettingsP; _standard_keysequences.append(QKeySequence::Close); _standard_keysequences.append(QKeySequence::Copy); _standard_keysequences.append(QKeySequence::Cut); _standard_keysequences.append(QKeySequence::Find); _standard_keysequences.append(QKeySequence::FindNext); _standard_keysequences.append(QKeySequence::FindPrevious); _standard_keysequences.append(QKeySequence::HelpContents); _standard_keysequences.append(QKeySequence::Open); _standard_keysequences.append(QKeySequence::Paste); _standard_keysequences.append(QKeySequence::Redo); _standard_keysequences.append(QKeySequence::Refresh); _standard_keysequences.append(QKeySequence::Save); _standard_keysequences.append(QKeySequence::SelectAll); _standard_keysequences.append(QKeySequence::Undo); _standard_keysequences.append(QKeySequence::ZoomIn); _standard_keysequences.append(QKeySequence::ZoomOut); _standard_keysequences.append(Qt::Key_F2); _standard_keysequences.append(QKeySequence::Quit); _standard_keysequences.append(QKeySequence::SaveAs); connect(ui.Clear, SIGNAL(clicked()), ui.Shortcut, SLOT(clear())); connect(ui.Reset, SIGNAL(clicked()), ui.Shortcut, SLOT(reset())); } void c2bShortcutWidget::setShortcutNames(const QString& path, const QStringList& fullnames) { disconnect(ui.Shortcut, SIGNAL(shortcutChanged(QKeySequence,QKeySequence)), this, SLOT(shortcutChanged(QKeySequence,QKeySequence))); disconnect(ui.Description, SIGNAL(currentTextChanged(QString)), this, SLOT(currentTextChanged(QString))); _modified_keysequences.clear(); _shortcut_path = path; _fullnames = fullnames.filter(path); const int n(_fullnames.count()); const int p(path.length()); for (int i = 0; i < n; ++i) if (_fullnames.at(i).startsWith(path)) ui.Description->addItem(_fullnames.at(i).mid(p)); ui.Shortcut->setKeysequence(_settingsP->keysequence(_shortcut_path + ui.Description->currentText())); ui.Shortcut->setDefaultKeysequence(_settingsP->defaultKeysequence(_shortcut_path + ui.Description->currentText())); connect(ui.Shortcut, SIGNAL(shortcutChanged(QKeySequence,QKeySequence)), this, SLOT(shortcutChanged(QKeySequence,QKeySequence))); connect(ui.Description, SIGNAL(currentTextChanged(QString)), this, SLOT(currentTextChanged(QString))); } void c2bShortcutWidget::currentTextChanged(const QString& text) { const QString fullname(_shortcut_path + text); if (_modified_keysequences.contains(fullname)) ui.Shortcut->setKeysequence(_modified_keysequences.value(fullname)); else ui.Shortcut->setKeysequence(_settingsP->keysequence(fullname)); ui.Shortcut->setDefaultKeysequence(_settingsP->defaultKeysequence(fullname)); } void c2bShortcutWidget::shortcutChanged(const QKeySequence& oldks, const QKeySequence& newks) { const QString fullname(_shortcut_path + ui.Description->currentText()); if (!newks.isEmpty()) { if (_standard_keysequences.contains(newks)) { ui.Shortcut->setKeysequence(oldks); ui.Shortcut->setChecked(true); emit statusMessage( tr("Key sequence %1 is used by standard shortcuts").arg(newks.toString(QKeySequence::NativeText))); return; } if (_modified_keysequences.size() == 0) { const int n(_fullnames.count()); for (int i = 0; i < n; ++i) _modified_keysequences.insert(_fullnames.at(i), _settingsP->keysequence(_fullnames.at(i))); } if (_modified_keysequences.values().contains(newks) && _modified_keysequences.value(fullname) != newks) { ui.Shortcut->setKeysequence(oldks); ui.Shortcut->setChecked(true); emit statusMessage(tr("Key sequence %1 is already assigned").arg(newks.toString(QKeySequence::NativeText))); return; } } _modified_keysequences[fullname] = newks; emit statusMessage(QString()); } ��������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bConsole.h������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014651� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.562763108 30 atime=1762812828.042759324 30 ctime=1762812827.562763108 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bConsole.h�����������������������������������������������������������������������0000644�0001750�0000144�00000001463�15104461633�016646� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCONSOLE_H #define C2BCONSOLE_H #include <QObject> /** Interface for console functionality */ class c2bConsole : public QObject { Q_OBJECT public: explicit c2bConsole(QObject* parento = 0); ~c2bConsole(); void load(); private: int cl_cb2bib_information(); int cl_cb2bib_tests(); int cl_doc2bib(); int cl_html_annote(); int cl_index(); int cl_txt2bib(); private slots: void _process(); }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bRLWebSearchSettings.cpp����������������������������������������������0000644�0000000�0000000�00000000131�15104461633�017423� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.450763991 30 atime=1762812828.042759324 29 ctime=1762812827.45476396 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bRLWebSearchSettings.cpp���������������������������������������������������������0000644�0001750�0000144�00000003017�15104461633�021416� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bRLWebSearchSettings.h" #include "c2bSettings.h" c2bRLWebSearchSettings::c2bRLWebSearchSettings(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); resize(size().width(), 1); c2bSettings* settings(c2bSettingsP); const QString searchEngine(settings->value("c2bReferenceList/SearchEngine").toString()); ui.searchEngine->addItem(searchEngine); ui.searchEngine->addItem("https://www.google.com/search?ie=UTF-8&q="); ui.searchEngine->addItem("https://scholar.google.com/scholar?ie=UTF-8&q="); ui.searchEngine->addItem("https://pubmed.ncbi.nlm.nih.gov/?term="); ui.searchEngine->setCurrentIndex(0); ui.searchEngine->setFocus(); ui.addQuotes->setChecked(settings->value("c2bReferenceList/SearchEngineAddQuotes").toBool()); } c2bRLWebSearchSettings::~c2bRLWebSearchSettings() {} void c2bRLWebSearchSettings::accept() { c2bSettings* settings(c2bSettingsP); settings->setValue("c2bReferenceList/SearchEngine", ui.searchEngine->currentText()); settings->setValue("c2bReferenceList/SearchEngineAddQuotes", ui.addQuotes->isChecked()); QDialog::accept(); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bSearchInFilesPatternEdit.ui������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020257� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.190766041 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bSearchInFilesPatternEdit.ui�����������������������������������������������������0000644�0001750�0000144�00000004467�15104461330�022256� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <author>Pere Constans</author> <class>c2bSearchInFilesPatternEdit</class> <widget class="QDialog" name="c2bSearchInFilesPatternEdit"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>594</width> <height>85</height> </rect> </property> <property name="windowTitle"> <string>Edit Pattern - cb2Bib</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>6</number> </property> <property name="topMargin"> <number>6</number> </property> <property name="rightMargin"> <number>6</number> </property> <property name="bottomMargin"> <number>6</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="c2bSearchInFilesPattern" name="pattern" native="true"/> </item> <item row="1" column="0"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="2" column="0"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="standardButtons"> <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> </property> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bSearchInFilesPattern</class> <extends>QWidget</extends> <header>c2bSearchInFilesPattern.h</header> </customwidget> </customwidgets> <resources/> <connections> <connection> <sender>buttonBox</sender> <signal>accepted()</signal> <receiver>c2bSearchInFilesPatternEdit</receiver> <slot>accept()</slot> <hints> <hint type="sourcelabel"> <x>248</x> <y>254</y> </hint> <hint type="destinationlabel"> <x>157</x> <y>274</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bSearchInFilesPatternEdit</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel"> <x>316</x> <y>260</y> </hint> <hint type="destinationlabel"> <x>286</x> <y>274</y> </hint> </hints> </connection> </connections> </ui> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bREHighlighter.h������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015734� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.598762824 30 atime=1762812828.042759324 30 ctime=1762812827.602762793 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bREHighlighter.h�����������������������������������������������������������������0000644�0001750�0000144�00000001621�15104461633�017725� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BREHIGHLIGHTER_H #define C2BREHIGHLIGHTER_H #include <QRegExp> #include <QSyntaxHighlighter> /** RegExp SyntaxHighLighter @author Pere Constans */ class c2bColors; class c2bREHighlighter : public QSyntaxHighlighter { public: explicit c2bREHighlighter(QTextDocument* doc); ~c2bREHighlighter(); protected: virtual void highlightBlock(const QString& text); private: QColor text_color; QRegExp rx0; QRegExp rx1; QRegExp rx2; QRegExp rx3; QRegExp rx4; QRegExp rx5; c2bColors* c; }; #endif ���������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bShortcutPushButton.h�������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�017116� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.614762698 30 atime=1762812828.042759324 30 ctime=1762812827.618762667 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bShortcutPushButton.h������������������������������������������������������������0000644�0001750�0000144�00000002533�15104461633�021112� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSHORTCUTPUSHBUTTON_H #define C2BSHORTCUTPUSHBUTTON_H #include <QPushButton> class c2bShortcutPushButton : public QPushButton { Q_OBJECT public: explicit inline c2bShortcutPushButton(QWidget* parentw = 0) : QPushButton(parentw) {} inline ~c2bShortcutPushButton() {} void setKeysequence(const QKeySequence& ks); void setDefaultKeysequence(const QKeySequence& ks) { _default_keysequence = ks; } inline QKeySequence keysequence() const { return _keysequence; } signals: void shortcutChanged(const QKeySequence& oldks, const QKeySequence& newks); public slots: void clear(); void reset(); protected: virtual void keyPressEvent(QKeyEvent* qevent); private: inline void _set_keysequence(const QKeySequence& ks) { const QKeySequence oldks(_keysequence); setKeysequence(ks); emit shortcutChanged(oldks, ks); } QKeySequence _default_keysequence; QKeySequence _keysequence; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/qweb��������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013367� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�015430� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/PaxHeaders/kit����������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014156� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/kit/��������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�016217� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/kit/PaxHeaders/c2bWebBrowser.cpp����������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017407� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/kit/c2bWebBrowser.cpp���������������������������������������������������������0000644�0001750�0000144�00000013251�15104461330�021375� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bWebBrowser.h" #include "c2bUtils.h" #include <QApplication> #include <QClipboard> #include <QContextMenuEvent> #include <QShortcut> #include <QTimer> #include <QWebFrame> c2bWebBrowser::c2bWebBrowser(QWidget* parentw) : QWebView(parentw) { // Avoid flickering (Qt 4.3) setAttribute(Qt::WA_NoSystemBackground, true); setAttribute(Qt::WA_OpaquePaintEvent, true); // Set default background to application page()->setPalette(qApp->palette()); // Actions setContextMenuPolicy(Qt::ActionsContextMenu); viewBackwardAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewBackward.png")), tr("Backward"), this); viewBackwardAction->setShortcut(QKeySequence("Left")); viewBackwardAction->setStatusTip(tr("Backward")); addAction(viewBackwardAction); viewForwardAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewForward.png")), tr("Forward"), this); viewForwardAction->setShortcut(QKeySequence("Right")); viewForwardAction->setStatusTip(tr("Forward")); addAction(viewForwardAction); c2bUtils::addSeparator(this); viewHomeAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewHome.png")), tr("Home"), this); viewHomeAction->setShortcut(QKeySequence("Esc")); viewHomeAction->setStatusTip(tr("Home page")); addAction(viewHomeAction); c2bUtils::addSeparator(this); viewReloadAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewReload.png")), tr("Reload"), this); viewReloadAction->setShortcut(QKeySequence("R")); viewReloadAction->setStatusTip(tr("Reload current page")); addAction(viewReloadAction); c2bUtils::addSeparator(this); viewZoomInAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewZoomIn.png")), tr("Zoom In"), this); viewZoomInAction->setShortcut(QKeySequence(QKeySequence::ZoomIn)); viewZoomInAction->setStatusTip(tr("Zoom in")); addAction(viewZoomInAction); viewZoomOutAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewZoomOut.png")), tr("Zoom Out"), this); viewZoomOutAction->setShortcut(QKeySequence(QKeySequence::ZoomOut)); viewZoomOutAction->setStatusTip(tr("Zoom out")); addAction(viewZoomOutAction); connect(viewForwardAction, SIGNAL(triggered()), this, SLOT(forward())); connect(viewBackwardAction, SIGNAL(triggered()), this, SLOT(back())); connect(viewHomeAction, SIGNAL(triggered()), this, SLOT(home())); connect(viewReloadAction, SIGNAL(triggered()), this, SLOT(reload())); connect(viewZoomInAction, SIGNAL(triggered()), this, SLOT(zoomIn())); connect(viewZoomOutAction, SIGNAL(triggered()), this, SLOT(zoomOut())); QShortcut* copy_shortcut = new QShortcut(QKeySequence(QKeySequence::Copy), this); connect(copy_shortcut, SIGNAL(activated()), this, SLOT(copy())); connect(page(), SIGNAL(linkHovered(QString,QString,QString)), this, SLOT(linkHovered(QString))); connect(page(), SIGNAL(statusBarMessage(QString)), this, SIGNAL(statusMessage(QString))); connect(this, SIGNAL(titleChanged(QString)), this, SLOT(_set_window_title(QString))); } c2bWebBrowser::~c2bWebBrowser() {} void c2bWebBrowser::setHomePage(const QString& hp_url) { _home_page = hp_url; home(); } void c2bWebBrowser::setFont(const QFont& qfont) { QWebSettings* wsettings = settings(); wsettings->setFontFamily(QWebSettings::StandardFont, qfont.family()); wsettings->setFontSize(QWebSettings::DefaultFontSize, qfont.pointSize()); } void c2bWebBrowser::setFixedFont(const QFont& qfont) { QWebSettings* wsettings = settings(); wsettings->setFontFamily(QWebSettings::FixedFont, qfont.family()); wsettings->setFontSize(QWebSettings::DefaultFixedFontSize, qfont.pointSize()); } void c2bWebBrowser::copy() { page()->triggerAction(QWebPage::Copy); } void c2bWebBrowser::home() { if (!_home_page.isEmpty()) load(c2bUtils::stringToUrl(_home_page)); } void c2bWebBrowser::loadPage(const QString& p_url) { if (!p_url.isEmpty()) load(c2bUtils::stringToUrl(p_url)); } void c2bWebBrowser::zoomIn() { setTextSizeMultiplier(textSizeMultiplier() + 0.1); } void c2bWebBrowser::zoomOut() { setTextSizeMultiplier(textSizeMultiplier() - 0.1); } QWebView* c2bWebBrowser::createWindow(QWebPage::WebWindowType /* type */) { if (!_hovered_link.isEmpty()) c2bUtils::openFile(_hovered_link, this); return 0; } void c2bWebBrowser::mousePressEvent(QMouseEvent* qevent) { if (qevent->button() == Qt::BackButton) { back(); qevent->accept(); } QWebView::mousePressEvent(qevent); } void c2bWebBrowser::_set_window_title(const QString& pagetitle) { // This fixes anchor clicked cases where titleChanged signal emits an empty document title if (!pagetitle.isEmpty()) setWindowTitle(pagetitle); } void c2bWebBrowser::linkHovered(const QString& link) { _hovered_link = link; if (_hovered_link.isEmpty()) emit statusMessage(QString()); else if (_hovered_link.contains(".tex.html#")) { const QString q(QFileInfo(link).fileName().split('#').last()); const QVariant v( page()->mainFrame()->evaluateJavaScript("document.querySelector('a[id*=\"" + q + "\"]').text")); if (!v.isValid()) emit statusMessage(QString()); else emit statusMessage(v.toString()); } else { QString vlink(link); emit statusMessage(vlink.remove("file://")); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/kit/PaxHeaders/c2bWebBrowser.h������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017054� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/kit/c2bWebBrowser.h�����������������������������������������������������������0000644�0001750�0000144�00000002524�15104461330�021043� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BWEBBROWSER_H #define C2BWEBBROWSER_H #include <QMenu> #include <qwebview.h> class c2bWebBrowser : public QWebView { Q_OBJECT public: explicit c2bWebBrowser(QWidget* parentw = 0); virtual ~c2bWebBrowser(); QAction* viewBackwardAction; QAction* viewForwardAction; QAction* viewHomeAction; QAction* viewReloadAction; QAction* viewZoomInAction; QAction* viewZoomOutAction; signals: void statusMessage(const QString ms); public slots: void loadPage(const QString& p_url); void setFixedFont(const QFont& qfont); void setFont(const QFont& qfont); void setHomePage(const QString& hp_url); protected: virtual QWebView* createWindow(QWebPage::WebWindowType type); virtual void mousePressEvent(QMouseEvent* qevent); protected slots: void copy(); void home(); void zoomIn(); void zoomOut(); private: QString _home_page; QString _hovered_link; private slots: void _set_window_title(const QString& pagetitle); void linkHovered(const QString& link); }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/PaxHeaders/engine�������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014634� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/engine/�����������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�016675� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/engine/PaxHeaders/c2bWebBrowser.cpp�������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020065� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/engine/c2bWebBrowser.cpp������������������������������������������������������0000644�0001750�0000144�00000013126�15104461330�022054� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bWebBrowser.h" #include "c2bUtils.h" #include <QApplication> #include <QClipboard> #include <QContextMenuEvent> #include <QShortcut> #include <QTimer> #include <QWebEngineSettings> c2bWebBrowser::c2bWebBrowser(QWidget* parentw) : QWebEngineView(parentw) { // Set default background to application #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) page()->setBackgroundColor(qApp->palette().color(QPalette::Window)); #endif // Actions setContextMenuPolicy(Qt::ActionsContextMenu); viewBackwardAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewBackward.png")), tr("Backward"), this); viewBackwardAction->setShortcut(QKeySequence("Left")); viewBackwardAction->setStatusTip(tr("Backward")); addAction(viewBackwardAction); viewForwardAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewForward.png")), tr("Forward"), this); viewForwardAction->setShortcut(QKeySequence("Right")); viewForwardAction->setStatusTip(tr("Forward")); addAction(viewForwardAction); c2bUtils::addSeparator(this); viewHomeAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewHome.png")), tr("Home"), this); viewHomeAction->setShortcut(QKeySequence("Esc")); viewHomeAction->setStatusTip(tr("Home page")); addAction(viewHomeAction); c2bUtils::addSeparator(this); viewReloadAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewReload.png")), tr("Reload"), this); viewReloadAction->setShortcut(QKeySequence("R")); viewReloadAction->setStatusTip(tr("Reload current page")); addAction(viewReloadAction); c2bUtils::addSeparator(this); viewZoomInAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewZoomIn.png")), tr("Zoom In"), this); viewZoomInAction->setShortcut(QKeySequence(QKeySequence::ZoomIn)); viewZoomInAction->setStatusTip(tr("Zoom in")); addAction(viewZoomInAction); viewZoomOutAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewZoomOut.png")), tr("Zoom Out"), this); viewZoomOutAction->setShortcut(QKeySequence(QKeySequence::ZoomOut)); viewZoomOutAction->setStatusTip(tr("Zoom out")); addAction(viewZoomOutAction); connect(viewForwardAction, SIGNAL(triggered()), this, SLOT(forward())); connect(viewBackwardAction, SIGNAL(triggered()), this, SLOT(back())); connect(viewHomeAction, SIGNAL(triggered()), this, SLOT(home())); connect(viewReloadAction, SIGNAL(triggered()), this, SLOT(reload())); connect(viewZoomInAction, SIGNAL(triggered()), this, SLOT(zoomIn())); connect(viewZoomOutAction, SIGNAL(triggered()), this, SLOT(zoomOut())); QShortcut* copy_shortcut = new QShortcut(QKeySequence(QKeySequence::Copy), this); connect(copy_shortcut, SIGNAL(activated()), this, SLOT(copy())); connect(page(), SIGNAL(linkHovered(QString)), this, SLOT(linkHovered(QString))); connect(this, SIGNAL(titleChanged(QString)), this, SLOT(setWindowTitle(QString))); } c2bWebBrowser::~c2bWebBrowser() {} void c2bWebBrowser::setHomePage(const QString& hp_url) { _home_page = hp_url; home(); } void c2bWebBrowser::setFont(const QFont& qfont) { QWebEngineSettings* wsettings = settings(); wsettings->setFontFamily(QWebEngineSettings::StandardFont, qfont.family()); wsettings->setFontSize(QWebEngineSettings::DefaultFontSize, qfont.pointSize()); } void c2bWebBrowser::setFixedFont(const QFont& qfont) { QWebEngineSettings* wsettings = settings(); wsettings->setFontFamily(QWebEngineSettings::FixedFont, qfont.family()); wsettings->setFontSize(QWebEngineSettings::DefaultFixedFontSize, qfont.pointSize()); } void c2bWebBrowser::copy() { page()->triggerAction(QWebEnginePage::Copy); } void c2bWebBrowser::home() { if (!_home_page.isEmpty()) load(c2bUtils::stringToUrl(_home_page)); } void c2bWebBrowser::loadPage(const QString& p_url) { if (!p_url.isEmpty()) load(c2bUtils::stringToUrl(p_url)); } void c2bWebBrowser::zoomIn() { setZoomFactor(zoomFactor() + 0.1); } void c2bWebBrowser::zoomOut() { setZoomFactor(zoomFactor() - 0.1); } QWebEngineView* c2bWebBrowser::createWindow(QWebEnginePage::WebWindowType /* type */) { if (!_hovered_link.isEmpty()) c2bUtils::openFile(_hovered_link, this); return 0; } template <typename Arg, typename R, typename C> struct InvokeWrapper { R* receiver; void (C::*memberFun)(Arg); void operator()(Arg result) { (receiver->*memberFun)(result); } }; template <typename Arg, typename R, typename C> InvokeWrapper<Arg, R, C> invoke(R* receiver, void (C::*memberFun)(Arg)) { InvokeWrapper<Arg, R, C> wrapper = { receiver, memberFun }; return wrapper; } void c2bWebBrowser::showTitle(const QVariant& v) { if (!v.isValid()) emit statusMessage(QString()); else emit statusMessage(v.toString()); } void c2bWebBrowser::linkHovered(const QString& link) { _hovered_link = link; if (_hovered_link.isEmpty()) emit statusMessage(QString()); else if (_hovered_link.contains(".tex.html#")) { const QString q(QFileInfo(link).fileName().split('#').last()); page()->runJavaScript("document.querySelector('a[id*=\"" + q + "\"]').text", invoke(this, &c2bWebBrowser::showTitle)); } else { QString vlink(link); emit statusMessage(vlink.remove("file://")); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/engine/PaxHeaders/c2bWebBrowser.h���������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017532� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qweb/engine/c2bWebBrowser.h��������������������������������������������������������0000644�0001750�0000144�00000002444�15104461330�021522� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BWEBBROWSER_H #define C2BWEBBROWSER_H #include <QMenu> #include <QWebEngineView> class c2bWebBrowser : public QWebEngineView { Q_OBJECT public: explicit c2bWebBrowser(QWidget* parentw = 0); virtual ~c2bWebBrowser(); QAction* viewBackwardAction; QAction* viewForwardAction; QAction* viewHomeAction; QAction* viewReloadAction; QAction* viewZoomInAction; QAction* viewZoomOutAction; signals: void statusMessage(const QString ms); public slots: void loadPage(const QString& p_url); void setFixedFont(const QFont& qfont); void setFont(const QFont& qfont); void setHomePage(const QString& hp_url); protected: virtual QWebEngineView* createWindow(QWebEnginePage::WebWindowType type); protected slots: void copy(); void home(); void zoomIn(); void zoomOut(); private: QString _home_page; QString _hovered_link; void showTitle(const QVariant& v); private slots: void linkHovered(const QString& link); }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2b.h�������������������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�013325� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.514763487 29 atime=1762812827.99875967 30 ctime=1762812827.514763487 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b.h������������������������������������������������������������������������������0000644�0001750�0000144�00000005635�15104461633�015330� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2B_H #define C2B_H #include "c2bBibParser.h" #include "c2bNetworkQueryInfo.h" #include <metadataParser.h> #include <network.h> #include <QObject> class c2bClipboard; class QProgressDialog; class QWidget; class c2b : public QObject { Q_OBJECT public: explicit c2b(QWidget* main, QObject* parento = 0); ~c2b(); // Actions static inline const QString documentMetadata(const QString& fn) { return metaParser()->metadata(fn); } static inline const QString encodeLink(const QString& ln) { return netqinf()->encodeLink(ln); } static inline void showMessage(const QString& message) { instance()->emitMessage(message); } static inline void doSearchInFiles(const QString& string, const QString& fn) { instance()->emitSearchInFiles(string, fn); } // Pointers static inline c2b* instance() { Q_ASSERT_X(_c2b_single_instance, "c2b", "cb2Bib resources were not instantiated"); return _c2b_single_instance; } static inline QWidget* mainWidget() { return instance()->_c2b_main; } static inline c2bClipboard* clipboard() { return instance()->_c2b_clipboard; } static inline network* net() { return instance()->_c2b_network; } static inline c2bNetworkQueryInfo* netqinf() { return instance()->_c2b_netqinf; } static inline c2bBibParser* bibParser() { return instance()->_c2b_bibparser; } static inline metadataParser* metaParser() { return instance()->_c2b_metadataparser; } public slots: static void configure(int index = -1); void exitRequested(); signals: void searchInFiles(const QString& string, const QString& fn); void statusMessage(const QString& message); private: QProgressDialog* _download_progress; QWidget* _c2b_main; c2bBibParser* _c2b_bibparser; c2bClipboard* _c2b_clipboard; c2bNetworkQueryInfo* _c2b_netqinf; metadataParser* _c2b_metadataparser; network* _c2b_network; static c2b* _c2b_single_instance; inline void emitMessage(const QString& message) { emit statusMessage(message); } inline void emitSearchInFiles(const QString& string, const QString& fn) { emit searchInFiles(string, fn); } private slots: void proxyAuthenticationRequired(const QNetworkProxy& proxy, QAuthenticator* auth); void showMessage(const QString& title, const QString& ms); void updateDownloadProgress(qint64 bytesReceived, qint64 bytesTotal); }; #endif ���������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bBibParser.cpp��������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015452� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.374764591 29 atime=1762812827.99875967 30 ctime=1762812827.378764559 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bBibParser.cpp�������������������������������������������������������������������0000644�0001750�0000144�00000015675�15104461633�017462� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bBibParser.h" #include "c2b.h" #include "c2bSettings.h" #include <bibPreparser.h> #include <QComboBox> #include <QMessageBox> c2bBibParser::c2bBibParser(QObject* parento) : bibParser(parento) { _c2b_mainP = c2b::mainWidget(); _bp_updates_gui = false; // Warn users if journal database file is not setup const QString journal_f(_settingsP->fileName("cb2Bib/JournalFile")); if (journal_f.isEmpty()) QMessageBox::information(_c2b_mainP, tr("Information - cb2Bib"), tr("No Abbreviation Journal file has been specified.\n\n" "Note: Abbreviation files are specified through the cb2Bib Configure dialog."), QMessageBox::Ok); else { QFile f(journal_f); if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) // jdbfile.exists wouldn't produce an errorString QMessageBox::warning(_c2b_mainP, tr("Warning - cb2Bib"), tr("Unable to open the Journal Abbreviation file %1 for reading.\nError: '%2'.\n\n" "Note: Abbreviation files are specified through the cb2Bib Configure dialog.") .arg(journal_f, f.errorString()), QMessageBox::Ok); else f.close(); } // Set status messages connect(this, SIGNAL(statusMessage(QString)), c2b::instance(), SIGNAL(statusMessage(QString))); // Set preparser log connect(_preparserP, SIGNAL(preparserLogAvailable(QString)), this, SLOT(showLog(QString))); } c2bBibParser::~c2bBibParser() {} void c2bBibParser::currentReferenceUpdated() { // Current reference has been updated by the base class. // Update it in the GUI _bp_updates_gui = true; bibReferenceIterator i; for (i = _current_reference.constBegin(); i != _current_reference.constEnd(); ++i) _field_editors[i.key()]->setText(i.value()); // Set default type to article if (_current_reference.typeName.isEmpty()) _current_reference.typeName = "article"; setReferenceType(_current_reference.typeName); setCiteID(); _bp_updates_gui = false; emit bibModified(fieldCount() > 0); } void c2bBibParser::clearCurrentReference() { _bp_updates_gui = true; // Clear by setting empty QString as a workaround for bug // http://bugreports.qt.nokia.com/browse/QTBUG-7866 // Affects versions 4.6.x, expected to be fixed in 4.6.3 for (int i = 0; i < _bibliographic_fields.count(); ++i) _field_editors[_bibliographic_fields.at(i)]->setText(QString()); // _field_editors[_bibliographic_fields.at(i)]->clear(); _field_editors["id"]->setText(QString()); // _field_editors["id"]->clear(); bibParser::clearCurrentReference(); _current_reference.typeName = "article"; _type_editor->setCurrentIndex(1); _bp_updates_gui = false; emit bibModified(false); } void c2bBibParser::referenceEdited(const QString& value) { if (_bp_updates_gui) return; if (sender()) { const QString name(sender()->objectName()); if (name == "id") { _current_reference.citeidName = value; emit setDocumentFilename(); } else if (name == "typecombo") _current_reference.typeName = value; else if (name == "file") _current_reference[name] = value; else { // Attention: No name checking is done. // Only reference editors must be connected here. _current_reference[name] = value; setCiteID(); emit setDocumentFilename(); } emit bibModified(fieldCount() > 0); } } void c2bBibParser::setCiteID() { bibParser::setCiteID(); _field_editors["id"]->setText(_current_reference.citeidName); } void c2bBibParser::setField() { if (sender()) { const QString name(sender()->objectName()); if (_field_editors.contains(name)) _field_editors[name]->setText(parse(name, _field_editors.value(name)->text())); } } void c2bBibParser::setReferenceType(const QString& type) { int i(0); while (i < _type_editor->count()) { if (_type_editor->itemText(i) == type) { _type_editor->setCurrentIndex(i); return; } ++i; } _type_editor->setCurrentIndex(0); _type_editor->setItemText(0, type); } void c2bBibParser::setWidgetMapping() { // Setting Reference Types _type_editor->insertItems(0, _bibliographic_types); _type_editor->setCurrentIndex(1); _current_reference.typeName = "article"; // Tracking Field Editor Line changes // Track using textChanged instead of editTextChanged. The latter does not track line clears for (int i = 0; i < _bibliographic_fields.count(); ++i) { const QString& name = _bibliographic_fields.at(i); connect(_field_editors.value(name), SIGNAL(returnPressed()), this, SLOT(setField())); connect(_field_editors.value(name), SIGNAL(textChanged(QString)), this, SLOT(referenceEdited(QString))); } connect(_field_editors.value("id"), SIGNAL(textChanged(QString)), this, SLOT(referenceEdited(QString))); connect(_type_editor, SIGNAL(editTextChanged(QString)), this, SLOT(referenceEdited(QString))); } void c2bBibParser::showLog(const QString& log) { if (!_preparser_logP) _preparser_logP = new c2bBibPreparserLog(_c2b_mainP); _preparser_logP->append(log); _preparser_logP->show(); // Don't use exec(), it could be a recursive call if clipboard changed } void c2bBibParser::checkRegExpFile(const QString& fn) { if (fn.isEmpty()) { QMessageBox::information(_c2b_mainP, tr("Information - cb2Bib"), tr("No RegExp filename has been specified.\n\n" "Note: RegExp files are specified through the cb2Bib Configure dialog."), QMessageBox::Ok); return; } QFile f(fn); if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) QMessageBox::warning(_c2b_mainP, tr("Warning - cb2Bib"), tr("Unable to open the RegExp file %1 for reading.\nError: '%2'.\n\n" "Note: RegExp files are specified through the cb2Bib Configure dialog. " "After manual matching, patterns can be edited and stored in a " "RegExp file for future autodetection.") .arg(fn, f.errorString()), QMessageBox::Ok); else f.close(); } �������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/win���������������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�013227� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.862760743 30 atime=1762812828.046759292 30 ctime=1762812827.862760743 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/win/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461633�015275� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/win/PaxHeaders/WinConsole.cpp������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016070� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.858760774 30 atime=1762812828.046759292 30 ctime=1762812827.862760743 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/win/WinConsole.cpp�����������������������������������������������������������������0000644�0001750�0000144�00000003072�15104461633�020063� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "WinConsole.h" #include <QEventLoop> #include <QSysInfo> #include <fcntl.h> #include <io.h> #include <iostream> WinConsole::WinConsole(QObject* parento) : QObject(parento) { // Exclude _setmode on older Windows consoles if (int(QSysInfo::productVersion().toDouble()) > 7) { try { fflush(stdout); _setmode(_fileno(stdout), _O_U16TEXT); } catch (...) { fflush(stdout); _setmode(_fileno(stdout), _O_TEXT); } } } WinConsole::~WinConsole() {} int WinConsole::execute(const QString& program, const QStringList& arguments) { QEventLoop eventloop(this); _process.setProcessChannelMode(QProcess::MergedChannels); connect(&_process, SIGNAL(readyReadStandardOutput()), this, SLOT(output())); connect(&_process, SIGNAL(finished(int,QProcess::ExitStatus)), &eventloop, SLOT(quit())); _process.start(program, arguments); if (_process.waitForStarted()) eventloop.exec(); output(); std::wcout << std::endl; return _process.exitCode(); } void WinConsole::output() { while (_process.canReadLine()) std::wcout << QString::fromUtf8(_process.readLine()).toStdWString(); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/win/PaxHeaders/win.pro�������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014622� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/win/win.pro������������������������������������������������������������������������0000644�0001750�0000144�00000000215�15104461330�016604� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������QT = core CONFIG += c++11 CONFIG += console TEMPLATE = app TARGET = ../c2bconsole HEADERS += WinConsole.h SOURCES += WinConsole.cpp main.cpp �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/win/PaxHeaders/main.cpp������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014734� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.858760774 30 atime=1762812828.046759292 30 ctime=1762812827.858760774 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/win/main.cpp�����������������������������������������������������������������������0000644�0001750�0000144�00000001445�15104461633�016731� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "WinConsole.h" #include <QCoreApplication> #include <QFileInfo> int main(int argc, char* argv[]) { if (argc < 1) return 1; QFileInfo fi(argv[0]); const QString exe(fi.absolutePath() + "/cb2bib.exe"); QStringList arguments; for (int i = 1; i < argc; ++i) arguments.append(argv[i]); QCoreApplication a(argc, argv); WinConsole wc; const int code(wc.execute(exe, arguments)); return code; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/win/PaxHeaders/WinConsole.h��������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015535� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.862760743 30 atime=1762812828.046759292 30 ctime=1762812827.862760743 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/win/WinConsole.h�������������������������������������������������������������������0000644�0001750�0000144�00000001273�15104461633�017531� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef WINCONSOLE_H #define WINCONSOLE_H #include <QProcess> class WinConsole : public QObject { Q_OBJECT public: explicit WinConsole(QObject* parento = 0); ~WinConsole(); int execute(const QString& program, const QStringList& arguments); private slots: void output(); private: QProcess _process; }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bCoreCiter.h����������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015126� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.566763076 30 atime=1762812828.042759324 30 ctime=1762812827.566763076 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bCoreCiter.h���������������������������������������������������������������������0000644�0001750�0000144�00000001664�15104461633�017126� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCORECITER_H #define C2BCORECITER_H #include <QObject> #include <QRegExp> #include <QWidget> class settings; class c2bCoreCiter : public QObject { Q_OBJECT public: explicit c2bCoreCiter(QWidget* parentw = 0); ~c2bCoreCiter(); void cite(const QStringList& keys); public slots: void setLyXPipe(); private: void _cite_to_clipboard(const QStringList& keys) const; void _cite_to_lyx_pipe(const QStringList& keys) const; QRegExp _citeids; QString _command; QString _lyxpipe; QWidget* _parentWP; settings* _settingsP; }; #endif ����������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bSearchInFilesPattern.ui����������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017451� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.190766041 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bSearchInFilesPattern.ui���������������������������������������������������������0000644�0001750�0000144�00000011060�15104461330�021433� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <author>Pere Constans</author> <class>c2bSearchInFilesPattern</class> <widget class="QWidget" name="c2bSearchInFilesPattern"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>687</width> <height>83</height> </rect> </property> <property name="windowTitle"> <string>Pattern</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>0</number> </property> <property name="topMargin"> <number>0</number> </property> <property name="rightMargin"> <number>0</number> </property> <property name="bottomMargin"> <number>0</number> </property> <property name="spacing"> <number>6</number> </property> <item row="1" column="0" colspan="8"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="0" column="0" colspan="8"> <layout class="QHBoxLayout"> <property name="spacing"> <number>6</number> </property> <property name="leftMargin"> <number>0</number> </property> <property name="topMargin"> <number>0</number> </property> <property name="rightMargin"> <number>0</number> </property> <property name="bottomMargin"> <number>0</number> </property> <item> <widget class="c2bLineEdit" name="inputPattern"/> </item> <item> <widget class="QToolButton" name="clearB"> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/clear_left.png</normaloff>:/icons/icons/clear_left.png</iconset> </property> </widget> </item> </layout> </item> <item row="2" column="7"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>16</width> <height>20</height> </size> </property> </spacer> </item> <item row="2" column="2"> <widget class="QLabel" name="label"> <property name="text"> <string>Type:</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QCheckBox" name="NOT"> <property name="text"> <string>&NOT</string> </property> </widget> </item> <item row="2" column="4"> <widget class="QLabel" name="label_2"> <property name="text"> <string>Scope:</string> </property> </widget> </item> <item row="2" column="3"> <widget class="QComboBox" name="patternType"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> </widget> </item> <item row="2" column="1"> <widget class="QCheckBox" name="caseSensitive"> <property name="text"> <string>&Case sensitive</string> </property> </widget> </item> <item row="2" column="6"> <widget class="QComboBox" name="yearScope"> <item> <property name="text"> <string>Exact</string> </property> </item> <item> <property name="text"> <string>Newer</string> </property> </item> <item> <property name="text"> <string>Older</string> </property> </item> </widget> </item> <item row="2" column="5"> <widget class="QComboBox" name="patternScope"> <item> <property name="text"> <string>all</string> </property> </item> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bLineEdit</class> <extends>QLineEdit</extends> <header>c2bLineEdit.h</header> </customwidget> </customwidgets> <resources> <include location="cb2bib.qrc"/> </resources> <connections> <connection> <sender>clearB</sender> <signal>clicked()</signal> <receiver>inputPattern</receiver> <slot>clear()</slot> <hints> <hint type="sourcelabel"> <x>639</x> <y>19</y> </hint> <hint type="destinationlabel"> <x>402</x> <y>9</y> </hint> </hints> </connection> <connection> <sender>clearB</sender> <signal>clicked()</signal> <receiver>inputPattern</receiver> <slot>setFocus()</slot> <hints> <hint type="sourcelabel"> <x>629</x> <y>27</y> </hint> <hint type="destinationlabel"> <x>477</x> <y>24</y> </hint> </hints> </connection> </connections> </ui> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/dialog.h����������������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�014116� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1762812827.63876251 30 atime=1762812828.042759324 30 ctime=1762812827.642762477 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/dialog.h���������������������������������������������������������������������������0000644�0001750�0000144�00000001125�15104461633�016107� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef DIALOG_H #define DIALOG_H #include <Qt> /** Remove What's This button from c2b dialogues */ namespace dialog { static const Qt::WindowFlags flags(Qt::WindowTitleHint | Qt::WindowSystemMenuHint); } // namespace dialog #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/qtsingleapplication�����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016503� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�020544� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/PaxHeaders/INSTALL.TXT�����������������������������������������0000644�0000000�0000000�00000000074�15104461330�020267� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/INSTALL.TXT����������������������������������������������������0000644�0001750�0000144�00000022374�15104461330�022263� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������INSTALLATION INSTRUCTIONS These instructions refer to the package you are installing as some-package.tar.gz or some-package.zip. The .zip file is intended for use on Windows. The directory you choose for the installation will be referred to as your-install-dir. Note to Qt Visual Studio Integration users: In the instructions below, instead of building from command line with nmake, you can use the menu command 'Qt->Open Solution from .pro file' on the .pro files in the example and plugin directories, and then build from within Visual Studio. Unpacking and installation -------------------------- 1. Unpacking the archive (if you have not done so already). On Unix and Mac OS X (in a terminal window): cd your-install-dir gunzip some-package.tar.gz tar xvf some-package.tar This creates the subdirectory some-package containing the files. On Windows: Unpack the .zip archive by right-clicking it in explorer and choosing "Extract All...". If your version of Windows does not have zip support, you can use the infozip tools available from www.info-zip.org. If you are using the infozip tools (in a command prompt window): cd your-install-dir unzip some-package.zip 2. Configuring the package. The configure script is called "configure" on unix/mac and "configure.bat" on Windows. It should be run from a command line after cd'ing to the package directory. You can choose whether you want to use the component by including its source code directly into your project, or build the component as a dynamic shared library (DLL) that is loaded into the application at run-time. The latter may be preferable for technical or licensing (LGPL) reasons. If you want to build a DLL, run the configure script with the argument "-library". Also see the note about usage below. (Components that are Qt plugins, e.g. styles and image formats, are by default built as a plugin DLL.) The configure script will prompt you in some cases for further information. Answer these questions and carefully read the license text before accepting the license conditions. The package cannot be used if you do not accept the license conditions. 3. Building the component and examples (when required). If a DLL is to be built, or if you would like to build the examples, next give the commands qmake make [or nmake if your are using Microsoft Visual C++] The example program(s) can be found in the directory called "examples" or "example". Components that are Qt plugins, e.g. styles and image formats, are ready to be used as soon as they are built, so the rest of this installation instruction can be skipped. 4. Building the Qt Designer plugin (optional). Some of the widget components are provided with plugins for Qt Designer. To build and install the plugin, cd into the some-package/plugin directory and give the commands qmake make [or nmake if your are using Microsoft Visual C++] Restart Qt Designer to make it load the new widget plugin. Note: If you are using the built-in Qt Designer from the Qt Visual Studio Integration, you will need to manually copy the plugin DLL file, i.e. copy %QTDIR%\plugins\designer\some-component.dll to the Qt Visual Studio Integration plugin path, typically: C:\Program Files\Trolltech\Qt VS Integration\plugins Note: If you for some reason are using a Qt Designer that is built in debug mode, you will need to build the plugin in debug mode also. Edit the file plugin.pro in the plugin directory, changing 'release' to 'debug' in the CONFIG line, before running qmake. Solutions components are intended to be used directly from the package directory during development, so there is no 'make install' procedure. Using a component in your project --------------------------------- To use this component in your project, add the following line to the project's .pro file (or do the equivalent in your IDE): include(your-install-dir/some-package/src/some-package.pri) This adds the package's sources and headers to the SOURCES and HEADERS project variables respectively (or, if the component has been configured as a DLL, it adds that library to the LIBS variable), and updates INCLUDEPATH to contain the package's src directory. Additionally, the .pri file may include some dependencies needed by the package. To include a header file from the package in your sources, you can now simply use: #include <SomeClass> or alternatively, in pre-Qt 4 style: #include <some-class.h> Refer to the documentation to see the classes and headers this components provides. Install documentation (optional) -------------------------------- The HTML documentation for the package's classes is located in the your-install-dir/some-package/doc/html/index.html. You can open this file and read the documentation with any web browser. To install the documentation into Qt Assistant (for Qt version 4.4 and later): 1. In Assistant, open the Edit->Preferences dialog and choose the Documentation tab. Click the Add... button and select the file your-install-dir/some-package/doc/html/some-package.qch For Qt versions prior to 4.4, do instead the following: 1. The directory your-install-dir/some-package/doc/html contains a file called some-package.dcf. Execute the following commands in a shell, command prompt or terminal window: cd your-install-dir/some-package/doc/html/ assistant -addContentFile some-package.dcf The next time you start Qt Assistant, you can access the package's documentation. Removing the documentation from assistant ----------------------------------------- If you have installed the documentation into Qt Assistant, and want to uninstall it, do as follows, for Qt version 4.4 and later: 1. In Assistant, open the Edit->Preferences dialog and choose the Documentation tab. In the list of Registered Documentation, select the item com.nokia.qtsolutions.some-package_version, and click the Remove button. For Qt versions prior to 4.4, do instead the following: 1. The directory your-install-dir/some-package/doc/html contains a file called some-package.dcf. Execute the following commands in a shell, command prompt or terminal window: cd your-install-dir/some-package/doc/html/ assistant -removeContentFile some-package.dcf Using the component as a DLL ---------------------------- 1. Normal components The shared library (DLL) is built and placed in the some-package/lib directory. It is intended to be used directly from there during development. When appropriate, both debug and release versions are built, since the run-time linker will in some cases refuse to load a debug-built DLL into a release-built application or vice versa. The following steps are taken by default to help the dynamic linker to locate the DLL at run-time (during development): Unix: The some-package.pri file will add linker instructions to add the some-package/lib directory to the rpath of the executable. (When distributing, or if your system does not support rpath, you can copy the shared library to another place that is searched by the dynamic linker, e.g. the "lib" directory of your Qt installation.) Mac: The full path to the library is hardcoded into the library itself, from where it is copied into the executable at link time, and ready by the dynamic linker at run-time. (When distributing, you will want to edit these hardcoded paths in the same way as for the Qt DLLs. Refer to the document "Deploying an Application on Mac OS X" in the Qt Reference Documentation.) Windows: the .dll file(s) are copied into the "bin" directory of your Qt installation. The Qt installation will already have set up that directory to be searched by the dynamic linker. 2. Plugins For Qt Solutions plugins (e.g. image formats), both debug and release versions of the plugin are built by default when appropriate, since in some cases the release Qt library will not load a debug plugin, and vice versa. The plugins are automatically copied into the plugins directory of your Qt installation when built, so no further setup is required. Plugins may also be built statically, i.e. as a library that will be linked into your application executable, and so will not need to be redistributed as a separate plugin DLL to end users. Static building is required if Qt itself is built statically. To do it, just add "static" to the CONFIG variable in the plugin/plugin.pro file before building. Refer to the "Static Plugins" section in the chapter "How to Create Qt Plugins" for explanation of how to use a static plugin in your application. The source code of the example program(s) will also typically contain the relevant instructions as comments. Uninstalling ------------ The following command will remove any fils that have been automatically placed outside the package directory itself during installation and building make distclean [or nmake if your are using Microsoft Visual C++] If Qt Assistant documentation or Qt Designer plugins have been installed, they can be uninstalled manually, ref. above. Enjoy! :) - The Qt Solutions Team. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/PaxHeaders/README.TXT������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020116� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/README.TXT�����������������������������������������������������0000644�0001750�0000144�00000001641�15104461330�022104� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Qt Solutions Component: Single Application The QtSingleApplication component provides support for applications that can be only started once per user. Version history: 2.0: - Version 1.3 ported to Qt 4. 2.1: - Fix compilation problem on Mac. 2.2: - Really fix the Mac compilation problem. - Mac: fix crash due to wrong object releasing. - Mac: Fix memory leak. 2.3: - Windows: Force creation of internal widget to make it work with Qt 4.2. 2.4: - Fix the system for automatic window raising on message reception. NOTE: minor API change. 2.5: - Mac: Fix isRunning() to work and report correctly. 2.6: - - initialize() is now obsolete, no longer necessary to call it - - Fixed race condition where multiple instances migth be started - - QtSingleCoreApplication variant provided for non-GUI (console) usage - Complete reimplementation. Visible changes: - LGPL release. �����������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/PaxHeaders/src�������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017272� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/�����������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�021333� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtlockedfile.h����������������������������������0000644�0000000�0000000�00000000074�15104461330�022166� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtlockedfile.h���������������������������������������������0000644�0001750�0000144�00000002560�15104461330�024155� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #ifndef QTLOCKEDFILE_H #define QTLOCKEDFILE_H #include <QFile> #ifdef Q_OS_WIN #include <QVector> #endif #if defined(Q_OS_WIN) # if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT) # define QT_QTLOCKEDFILE_EXPORT # elif defined(QT_QTLOCKEDFILE_IMPORT) # if defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # endif # define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport) # elif defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport) # endif #else # define QT_QTLOCKEDFILE_EXPORT #endif namespace QtLP_Private { class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile { public: enum LockMode { NoLock = 0, ReadLock, WriteLock }; QtLockedFile(); explicit QtLockedFile(const QString& name); ~QtLockedFile(); bool open(OpenMode mode); bool lock(LockMode mode, bool block = true); bool unlock(); bool isLocked() const; LockMode lockMode() const; private: #ifdef Q_OS_WIN Qt::HANDLE wmutex; Qt::HANDLE rmutex; QVector<Qt::HANDLE> rmutexes; QString mutexname; Qt::HANDLE getMutexHandle(int idx, bool doCreate); bool waitMutex(Qt::HANDLE mutex, bool doBlock); #endif LockMode m_lock_mode; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtsinglecoreapplication.cpp���������������������0000644�0000000�0000000�00000000074�15104461330�024776� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtsinglecoreapplication.cpp��������������������������������0000644�0001750�0000144�00000006563�15104461330�026774� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include "qtsinglecoreapplication.h" #include "qtlocalpeer.h" /*! \class QtSingleCoreApplication qtsinglecoreapplication.h \brief A variant of the QtSingleApplication class for non-GUI applications. This class is a variant of QtSingleApplication suited for use in console (non-GUI) applications. It is an extension of QCoreApplication (instead of QApplication). It does not require the QtGui library. The API and usage is identical to QtSingleApplication, except that functions relating to the "activation window" are not present, for obvious reasons. Please refer to the QtSingleApplication documentation for explanation of the usage. A QtSingleCoreApplication instance can communicate to a QtSingleApplication instance if they share the same application id. Hence, this class can be used to create a light-weight command-line tool that sends commands to a GUI application. \sa QtSingleApplication */ /*! Creates a QtSingleCoreApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc and \a argv are passed on to the QCoreApplication constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(int& argc, char** argv) : QCoreApplication(argc, argv) { peer = new QtLocalPeer(this); connect(peer, SIGNAL(messageReceived(QString)), SIGNAL(messageReceived(QString))); } /*! Creates a QtSingleCoreApplication object with the application identifier \a appId. \a argc and \a argv are passed on to the QCoreApplication constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(const QString& appId, int& argc, char** argv) : QCoreApplication(argc, argv) { peer = new QtLocalPeer(this, appId); connect(peer, SIGNAL(messageReceived(QString)), SIGNAL(messageReceived(QString))); } /*! Returns true if another instance of this application is running; otherwise false. This function does not find instances of this application that are being run by a different user (on Windows: that are running in another session). \sa sendMessage() */ bool QtSingleCoreApplication::isRunning() { return peer->isClient(); } /*! Tries to send the text \a message to the currently running instance. The QtSingleCoreApplication object in the running instance will emit the messageReceived() signal when it receives the message. This function returns true if the message has been sent to, and processed by, the current instance. If there is no instance currently running, or if the running instance fails to process the message within \a timeout milliseconds, this function return false. \sa isRunning(), messageReceived() */ bool QtSingleCoreApplication::sendMessage(const QString& message, int timeout) { return peer->sendMessage(message, timeout); } /*! Returns the application identifier. Two processes with the same identifier will be regarded as instances of the same application. */ QString QtSingleCoreApplication::id() const { return peer->applicationId(); } /*! \fn void QtSingleCoreApplication::messageReceived(const QString& message) This signal is emitted when the current instance receives a \a message from another instance of this application. \sa sendMessage() */ ���������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtsingleapplication.cpp�������������������������0000644�0000000�0000000�00000000074�15104461330�024125� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtsingleapplication.cpp������������������������������������0000644�0001750�0000144�00000023241�15104461330�026113� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include "qtsingleapplication.h" #include "qtlocalpeer.h" #include <QWidget> /*! \class QtSingleApplication qtsingleapplication.h \brief The QtSingleApplication class provides an API to detect and communicate with running instances of an application. This class allows you to create applications where only one instance should be running at a time. I.e., if the user tries to launch another instance, the already running instance will be activated instead. Another usecase is a client-server system, where the first started instance will assume the role of server, and the later instances will act as clients of that server. By default, the full path of the executable file is used to determine whether two processes are instances of the same application. You can also provide an explicit identifier string that will be compared instead. The application should create the QtSingleApplication object early in the startup phase, and call isRunning() to find out if another instance of this application is already running. If isRunning() returns false, it means that no other instance is running, and this instance has assumed the role as the running instance. In this case, the application should continue with the initialization of the application user interface before entering the event loop with exec(), as normal. The messageReceived() signal will be emitted when the running application receives messages from another instance of the same application. When a message is received it might be helpful to the user to raise the application so that it becomes visible. To facilitate this, QtSingleApplication provides the setActivationWindow() function and the activateWindow() slot. If isRunning() returns true, another instance is already running. It may be alerted to the fact that another instance has started by using the sendMessage() function. Also data such as startup parameters (e.g. the name of the file the user wanted this new instance to open) can be passed to the running instance with this function. Then, the application should terminate (or enter client mode). If isRunning() returns true, but sendMessage() fails, that is an indication that the running instance is frozen. Here's an example that shows how to convert an existing application to use QtSingleApplication. It is very simple and does not make use of all QtSingleApplication's functionality (see the examples for that). \code // Original int main(int argc, char **argv) { QApplication app(argc, argv); MyMainWidget mmw; mmw.show(); return app.exec(); } // Single instance int main(int argc, char **argv) { QtSingleApplication app(argc, argv); if (app.isRunning()) return !app.sendMessage(someDataString); MyMainWidget mmw; app.setActivationWindow(&mmw); mmw.show(); return app.exec(); } \endcode Once this QtSingleApplication instance is destroyed (normally when the process exits or crashes), when the user next attempts to run the application this instance will not, of course, be encountered. The next instance to call isRunning() or sendMessage() will assume the role as the new running instance. For console (non-GUI) applications, QtSingleCoreApplication may be used instead of this class, to avoid the dependency on the QtGui library. \sa QtSingleCoreApplication */ void QtSingleApplication::sysInit(const QString& appId) { actWin = 0; peer = new QtLocalPeer(this, appId); connect(peer, SIGNAL(messageReceived(QString)), SIGNAL(messageReceived(QString))); } /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a argv, and \a GUIenabled are passed on to the QAppliation constructor. If you are creating a console application (i.e. setting \a GUIenabled to false), you may consider using QtSingleCoreApplication instead. */ QtSingleApplication::QtSingleApplication(int& argc, char** argv, bool GUIenabled) : QApplication(argc, argv, GUIenabled) { sysInit(); } /*! Creates a QtSingleApplication object with the application identifier \a appId. \a argc and \a argv are passed on to the QAppliation constructor. */ QtSingleApplication::QtSingleApplication(const QString& appId, int& argc, char** argv) : QApplication(argc, argv) { sysInit(appId); } #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a argv, and \a type are passed on to the QAppliation constructor. */ QtSingleApplication::QtSingleApplication(int& argc, char** argv, Type type) : QApplication(argc, argv, type) { sysInit(); } # if defined(Q_WS_X11) /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier will be QCoreApplication::applicationFilePath(). \a dpy, \a visual, and \a cmap are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE cmap) : QApplication(dpy, visual, cmap) { sysInit(); } /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier will be QCoreApplication::applicationFilePath(). \a dpy, \a argc, \a argv, \a visual, and \a cmap are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(Display* dpy, int& argc, char** argv, Qt::HANDLE visual, Qt::HANDLE cmap) : QApplication(dpy, argc, argv, visual, cmap) { sysInit(); } /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier will be \a appId. \a dpy, \a argc, \a argv, \a visual, and \a cmap are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(Display* dpy, const QString& appId, int argc, char** argv, Qt::HANDLE visual, Qt::HANDLE cmap) : QApplication(dpy, argc, argv, visual, cmap) { sysInit(appId); } # endif // Q_WS_X11 #endif // QT_VERSION < 0x050000 /*! Returns true if another instance of this application is running; otherwise false. This function does not find instances of this application that are being run by a different user (on Windows: that are running in another session). \sa sendMessage() */ bool QtSingleApplication::isRunning() { return peer->isClient(); } /*! Tries to send the text \a message to the currently running instance. The QtSingleApplication object in the running instance will emit the messageReceived() signal when it receives the message. This function returns true if the message has been sent to, and processed by, the current instance. If there is no instance currently running, or if the running instance fails to process the message within \a timeout milliseconds, this function return false. \sa isRunning(), messageReceived() */ bool QtSingleApplication::sendMessage(const QString& message, int timeout) { return peer->sendMessage(message, timeout); } /*! Returns the application identifier. Two processes with the same identifier will be regarded as instances of the same application. */ QString QtSingleApplication::id() const { return peer->applicationId(); } /*! Sets the activation window of this application to \a aw. The activation window is the widget that will be activated by activateWindow(). This is typically the application's main window. If \a activateOnMessage is true (the default), the window will be activated automatically every time a message is received, just prior to the messageReceived() signal being emitted. \sa activateWindow(), messageReceived() */ void QtSingleApplication::setActivationWindow(QWidget* aw, bool activateOnMessage) { actWin = aw; if (activateOnMessage) connect(peer, SIGNAL(messageReceived(QString)), this, SLOT(activateWindow())); else disconnect(peer, SIGNAL(messageReceived(QString)), this, SLOT(activateWindow())); } /*! Returns the applications activation window if one has been set by calling setActivationWindow(), otherwise returns 0. \sa setActivationWindow() */ QWidget* QtSingleApplication::activationWindow() const { return actWin; } /*! De-minimizes, raises, and activates this application's activation window. This function does nothing if no activation window has been set. This is a convenience function to show the user that this application instance has been activated when he has tried to start another instance. This function should typically be called in response to the messageReceived() signal. By default, that will happen automatically, if an activation window has been set. \sa setActivationWindow(), messageReceived(), initialize() */ void QtSingleApplication::activateWindow() { if (actWin) { actWin->setWindowState(actWin->windowState() & ~Qt::WindowMinimized); actWin->raise(); actWin->activateWindow(); } } /*! \fn void QtSingleApplication::messageReceived(const QString& message) This signal is emitted when the current instance receives a \a message from another instance of this application. \sa sendMessage(), setActivationWindow(), activateWindow() */ /*! \fn void QtSingleApplication::initialize(bool dummy = true) \obsolete */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtlockedfile_unix.cpp���������������������������0000644�0000000�0000000�00000000074�15104461330�023564� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtlockedfile_unix.cpp��������������������������������������0000644�0001750�0000144�00000003040�15104461330�025545� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include <string.h> #include <errno.h> #include <unistd.h> #include <fcntl.h> #include "qtlockedfile.h" bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = (mode == ReadLock) ? F_RDLCK : F_WRLCK; int cmd = block ? F_SETLKW : F_SETLK; int ret = fcntl(handle(), cmd, &fl); if (ret == -1) { if (errno != EINTR && errno != EAGAIN) qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = F_UNLCK; int ret = fcntl(handle(), F_SETLKW, &fl); if (ret == -1) { qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtlockedfile.cpp��������������������������������0000644�0000000�0000000�00000000074�15104461330�022521� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtlockedfile.cpp�������������������������������������������0000644�0001750�0000144�00000010206�15104461330�024504� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include "qtlockedfile.h" /*! \class QtLockedFile \brief The QtLockedFile class extends QFile with advisory locking functions. A file may be locked in read or write mode. Multiple instances of \e QtLockedFile, created in multiple processes running on the same machine, may have a file locked in read mode. Exactly one instance may have it locked in write mode. A read and a write lock cannot exist simultaneously on the same file. The file locks are advisory. This means that nothing prevents another process from manipulating a locked file using QFile or file system functions offered by the OS. Serialization is only guaranteed if all processes that access the file use QLockedFile. Also, while holding a lock on a file, a process must not open the same file again (through any API), or locks can be unexpectedly lost. The lock provided by an instance of \e QtLockedFile is released whenever the program terminates. This is true even when the program crashes and no destructors are called. */ /*! \enum QtLockedFile::LockMode This enum describes the available lock modes. \value ReadLock A read lock. \value WriteLock A write lock. \value NoLock Neither a read lock nor a write lock. */ /*! Constructs an unlocked \e QtLockedFile object. This constructor behaves in the same way as \e QFile::QFile(). \sa QFile::QFile() */ QtLockedFile::QtLockedFile() : QFile() { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Constructs an unlocked QtLockedFile object with file \a name. This constructor behaves in the same way as \e QFile::QFile(const QString&). \sa QFile::QFile() */ QtLockedFile::QtLockedFile(const QString& name) : QFile(name) { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Opens the file in OpenMode \a mode. This is identical to QFile::open(), with the one exception that the Truncate mode flag is disallowed. Truncation would conflict with the advisory file locking, since the file would be modified before the write lock is obtained. If truncation is required, use resize(0) after obtaining the write lock. Returns true if successful; otherwise false. \sa QFile::open(), QFile::resize() */ bool QtLockedFile::open(OpenMode mode) { if (mode & QIODevice::Truncate) { qWarning("QtLockedFile::open(): Truncate mode not allowed."); return false; } return QFile::open(mode); } /*! Returns \e true if this object has a in read or write lock; otherwise returns \e false. \sa lockMode() */ bool QtLockedFile::isLocked() const { return m_lock_mode != NoLock; } /*! Returns the type of lock currently held by this object, or \e QtLockedFile::NoLock. \sa isLocked() */ QtLockedFile::LockMode QtLockedFile::lockMode() const { return m_lock_mode; } /*! \fn bool QtLockedFile::lock(LockMode mode, bool block = true) Obtains a lock of type \a mode. The file must be opened before it can be locked. If \a block is true, this function will block until the lock is aquired. If \a block is false, this function returns \e false immediately if the lock cannot be aquired. If this object already has a lock of type \a mode, this function returns \e true immediately. If this object has a lock of a different type than \a mode, the lock is first released and then a new lock is obtained. This function returns \e true if, after it executes, the file is locked by this object, and \e false otherwise. \sa unlock(), isLocked(), lockMode() */ /*! \fn bool QtLockedFile::unlock() Releases a lock. If the object has no lock, this function returns immediately. This function returns \e true if, after it executes, the file is not locked by this object, and \e false otherwise. \sa lock(), isLocked(), lockMode() */ /*! \fn QtLockedFile::~QtLockedFile() Destroys the \e QtLockedFile object. If any locks were held, they are released. */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtlocalpeer.h�����������������������������������0000644�0000000�0000000�00000000074�15104461330�022033� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtlocalpeer.h����������������������������������������������0000644�0001750�0000144�00000001456�15104461330�024025� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #ifndef QTLOCALPEER_H #define QTLOCALPEER_H #include <QLocalServer> #include <QLocalSocket> #include <QDir> #include "qtlockedfile.h" class QtLocalPeer : public QObject { Q_OBJECT public: QtLocalPeer(QObject* parento = 0, const QString& appId = QString()); bool isClient(); bool sendMessage(const QString& message, int timeout); QString applicationId() const { return id; } Q_SIGNALS: void messageReceived(const QString& message); protected Q_SLOTS: void receiveConnection(); protected: QString id; QString socketName; QLocalServer* server; QtLP_Private::QtLockedFile lockFile; private: static const char* ack; }; #endif // QTLOCALPEER_H ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtlockedfile_win.cpp����������������������������0000644�0000000�0000000�00000000074�15104461330�023376� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtlockedfile_win.cpp���������������������������������������0000644�0001750�0000144�00000011315�15104461330�025363� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include "qtlockedfile.h" #include <qt_windows.h> #include <QFileInfo> #define MUTEX_PREFIX "QtLockedFile mutex " // Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS #define MAX_READERS MAXIMUM_WAIT_OBJECTS #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #define QT_WA(unicode, ansi) unicode #endif Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate) { if (mutexname.isEmpty()) { QFileInfo fi(*this); mutexname = QString::fromLatin1(MUTEX_PREFIX) + fi.absoluteFilePath().toLower(); } QString mname(mutexname); if (idx >= 0) mname += QString::number(idx); Qt::HANDLE mutex; if (doCreate) { QT_WA({ mutex = CreateMutexW(NULL, FALSE, (TCHAR*)mname.utf16()); }, { mutex = CreateMutexA(NULL, FALSE, mname.toLocal8Bit().constData()); }); if (!mutex) { qErrnoWarning("QtLockedFile::lock(): CreateMutex failed"); return 0; } } else { QT_WA({ mutex = OpenMutexW(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, (TCHAR*)mname.utf16()); }, { mutex = OpenMutexA(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, mname.toLocal8Bit().constData()); }); if (!mutex) { if (GetLastError() != ERROR_FILE_NOT_FOUND) qErrnoWarning("QtLockedFile::lock(): OpenMutex failed"); return 0; } } return mutex; } bool QtLockedFile::waitMutex(Qt::HANDLE mutex, bool doBlock) { Q_ASSERT(mutex); DWORD res = WaitForSingleObject(mutex, doBlock ? INFINITE : 0); switch (res) { case WAIT_OBJECT_0: case WAIT_ABANDONED: return true; break; case WAIT_TIMEOUT: break; default: qErrnoWarning("QtLockedFile::lock(): WaitForSingleObject failed"); } return false; } bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); if (!wmutex && !(wmutex = getMutexHandle(-1, true))) return false; if (!waitMutex(wmutex, block)) return false; if (mode == ReadLock) { int idx = 0; for (; idx < MAX_READERS; idx++) { rmutex = getMutexHandle(idx, false); if (!rmutex || waitMutex(rmutex, false)) break; CloseHandle(rmutex); } bool ok = true; if (idx >= MAX_READERS) { qWarning("QtLockedFile::lock(): too many readers"); rmutex = 0; ok = false; } else if (!rmutex) { rmutex = getMutexHandle(idx, true); if (!rmutex || !waitMutex(rmutex, false)) ok = false; } if (!ok && rmutex) { CloseHandle(rmutex); rmutex = 0; } ReleaseMutex(wmutex); if (!ok) return false; } else { Q_ASSERT(rmutexes.isEmpty()); for (int i = 0; i < MAX_READERS; i++) { Qt::HANDLE mutex = getMutexHandle(i, false); if (mutex) rmutexes.append(mutex); } if (rmutexes.size()) { DWORD res = WaitForMultipleObjects(rmutexes.size(), rmutexes.constData(), TRUE, block ? INFINITE : 0); if (res != WAIT_OBJECT_0 && res != WAIT_ABANDONED) { if (res != WAIT_TIMEOUT) qErrnoWarning("QtLockedFile::lock(): WaitForMultipleObjects failed"); m_lock_mode = WriteLock; // trick unlock() to clean up - semiyucky unlock(); return false; } } } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; if (m_lock_mode == ReadLock) { ReleaseMutex(rmutex); CloseHandle(rmutex); rmutex = 0; } else { foreach (Qt::HANDLE mutex, rmutexes) { ReleaseMutex(mutex); CloseHandle(mutex); } rmutexes.clear(); ReleaseMutex(wmutex); } m_lock_mode = QtLockedFile::NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); if (wmutex) CloseHandle(wmutex); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtsingleapplication.h���������������������������0000644�0000000�0000000�00000000074�15104461330�023572� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtsingleapplication.h��������������������������������������0000644�0001750�0000144�00000004114�15104461330�025556� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #ifndef QTSINGLEAPPLICATION_H #define QTSINGLEAPPLICATION_H #include <QApplication> class QtLocalPeer; #if defined(Q_OS_WIN) # if !defined(QT_QTSINGLEAPPLICATION_EXPORT) && !defined(QT_QTSINGLEAPPLICATION_IMPORT) # define QT_QTSINGLEAPPLICATION_EXPORT # elif defined(QT_QTSINGLEAPPLICATION_IMPORT) # if defined(QT_QTSINGLEAPPLICATION_EXPORT) # undef QT_QTSINGLEAPPLICATION_EXPORT # endif # define QT_QTSINGLEAPPLICATION_EXPORT __declspec(dllimport) # elif defined(QT_QTSINGLEAPPLICATION_EXPORT) # undef QT_QTSINGLEAPPLICATION_EXPORT # define QT_QTSINGLEAPPLICATION_EXPORT __declspec(dllexport) # endif #else # define QT_QTSINGLEAPPLICATION_EXPORT #endif class QT_QTSINGLEAPPLICATION_EXPORT QtSingleApplication : public QApplication { Q_OBJECT public: QtSingleApplication(int& argc, char** argv, bool GUIenabled = true); QtSingleApplication(const QString& appId, int& argc, char** argv); #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) QtSingleApplication(int& argc, char** argv, Type type); # if defined(Q_WS_X11) QtSingleApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0); QtSingleApplication(Display* dpy, int& argc, char** argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0); QtSingleApplication(Display* dpy, const QString& appId, int argc, char** argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0); # endif // Q_WS_X11 #endif // QT_VERSION < 0x050000 bool isRunning(); QString id() const; void setActivationWindow(QWidget* aw, bool activateOnMessage = true); QWidget* activationWindow() const; // Obsolete: void initialize(bool dummy = true) { isRunning(); Q_UNUSED(dummy) } public Q_SLOTS: bool sendMessage(const QString& message, int timeout = 5000); void activateWindow(); Q_SIGNALS: void messageReceived(const QString& message); private: void sysInit(const QString& appId = QString()); QtLocalPeer* peer; QWidget* actWin; }; #endif // QTSINGLEAPPLICATION_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtsinglecoreapplication.h�����������������������0000644�0000000�0000000�00000000074�15104461330�024443� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtsinglecoreapplication.h����������������������������������0000644�0001750�0000144�00000001270�15104461330�026427� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #ifndef QTSINGLECOREAPPLICATION_H #define QTSINGLECOREAPPLICATION_H #include <QCoreApplication> class QtLocalPeer; class QtSingleCoreApplication : public QCoreApplication { Q_OBJECT public: QtSingleCoreApplication(int& argc, char** argv); QtSingleCoreApplication(const QString& appId, int& argc, char** argv); bool isRunning(); QString id() const; public Q_SLOTS: bool sendMessage(const QString& message, int timeout = 5000); Q_SIGNALS: void messageReceived(const QString& message); private: QtLocalPeer* peer; }; #endif // QTSINGLECOREAPPLICATION_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/PaxHeaders/qtlocalpeer.cpp���������������������������������0000644�0000000�0000000�00000000074�15104461330�022366� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/qtsingleapplication/src/qtlocalpeer.cpp��������������������������������������������0000644�0001750�0000144�00000012213�15104461330�024351� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). // SPDX-License-Identifier: BSD-3-Clause #include "qtlocalpeer.h" #include <QCoreApplication> #include <QDataStream> #include <QRegularExpression> #include <QTime> #if defined(Q_OS_WIN) #include <QLibrary> #include <qt_windows.h> typedef BOOL(WINAPI*PProcessIdToSessionId)(DWORD,DWORD*); static PProcessIdToSessionId pProcessIdToSessionId = 0; #endif #if defined(Q_OS_UNIX) #include <sys/types.h> #include <time.h> #include <unistd.h> #endif namespace QtLP_Private { #include "qtlockedfile.cpp" #if defined(Q_OS_WIN) #include "qtlockedfile_win.cpp" #else #include "qtlockedfile_unix.cpp" #endif } const char* QtLocalPeer::ack = "ack"; QtLocalPeer::QtLocalPeer(QObject* parento, const QString& appId) : QObject(parento), id(appId) { QString prefix = id; if (id.isEmpty()) { id = QCoreApplication::applicationFilePath(); #if defined(Q_OS_WIN) id = id.toLower(); #endif prefix = id.section(QLatin1Char('/'), -1); } prefix.remove(QRegularExpression("[^a-zA-Z]")); prefix.truncate(6); QByteArray idc = id.toUtf8(); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) quint16 idNum = qChecksum(QByteArrayView(idc)); #else quint16 idNum = qChecksum(idc.constData(), idc.size()); #endif socketName = QLatin1String("qtsingleapp-") + prefix + QLatin1Char('-') + QString::number(idNum, 16); #if defined(Q_OS_WIN) if (!pProcessIdToSessionId) { QLibrary lib("kernel32"); pProcessIdToSessionId = (PProcessIdToSessionId)lib.resolve("ProcessIdToSessionId"); } if (pProcessIdToSessionId) { DWORD sessionId = 0; pProcessIdToSessionId(GetCurrentProcessId(), &sessionId); socketName += QLatin1Char('-') + QString::number(sessionId, 16); } #else socketName += QLatin1Char('-') + QString::number(::getuid(), 16); #endif server = new QLocalServer(this); QString lockName = QDir(QDir::tempPath()).absolutePath() + QLatin1Char('/') + socketName + QLatin1String("-lockfile"); lockFile.setFileName(lockName); lockFile.open(QIODevice::ReadWrite); } bool QtLocalPeer::isClient() { if (lockFile.isLocked()) return false; if (!lockFile.lock(QtLP_Private::QtLockedFile::WriteLock, false)) return true; bool res = server->listen(socketName); #if defined(Q_OS_UNIX) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) // ### Workaround if (!res && server->serverError() == QAbstractSocket::AddressInUseError) { QFile::remove(QDir::cleanPath(QDir::tempPath()) + QLatin1Char('/') + socketName); res = server->listen(socketName); } #endif if (!res) qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString())); QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection())); return false; } bool QtLocalPeer::sendMessage(const QString& message, int timeout) { if (!isClient()) return false; QLocalSocket socket; bool connOk = false; for (int i = 0; i < 2; i++) { // Try twice, in case the other instance is just starting up socket.connectToServer(socketName); connOk = socket.waitForConnected(timeout / 2); if (connOk || i) break; int ms = 250; #if defined(Q_OS_WIN) Sleep(DWORD(ms)); #else struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; nanosleep(&ts, NULL); #endif } if (!connOk) return false; QByteArray uMsg(message.toUtf8()); QDataStream ds(&socket); ds.writeBytes(uMsg.constData(), uMsg.size()); bool res = socket.waitForBytesWritten(timeout); if (res) { res &= socket.waitForReadyRead(timeout); // wait for ack if (res) res &= (socket.read(qstrlen(ack)) == ack); } return res; } void QtLocalPeer::receiveConnection() { QLocalSocket* socket = server->nextPendingConnection(); if (!socket) return; while (true) { if (socket->state() == QLocalSocket::UnconnectedState) { qWarning("QtLocalPeer: Peer disconnected"); delete socket; return; } if (socket->bytesAvailable() >= qint64(sizeof(quint32))) break; socket->waitForReadyRead(); } QDataStream ds(socket); QByteArray uMsg; quint32 remaining; ds >> remaining; uMsg.resize(remaining); int got = 0; char* uMsgBuf = uMsg.data(); do { got = ds.readRawData(uMsgBuf, remaining); remaining -= got; uMsgBuf += got; } while (remaining && got >= 0 && socket->waitForReadyRead(2000)); if (got < 0) { qWarning("QtLocalPeer: Message reception failed %s", socket->errorString().toLatin1().constData()); delete socket; return; } QString message(QString::fromUtf8(uMsg)); socket->write(ack, qstrlen(ack)); socket->waitForBytesWritten(1000); socket->waitForDisconnected(1000); // make sure client reads ack delete socket; emit messageReceived(message); //### (might take a long time to return) } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bComboBox.h�����������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014757� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.550763203 30 atime=1762812828.042759324 30 ctime=1762812827.554763172 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bComboBox.h����������������������������������������������������������������������0000644�0001750�0000144�00000001172�15104461633�016751� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCOMBOBOX_H #define C2BCOMBOBOX_H #include <QComboBox> class c2bComboBox : public QComboBox { Q_OBJECT public: explicit c2bComboBox(QWidget* parentw = 0); ~c2bComboBox(); protected: virtual void contextMenuEvent(QContextMenuEvent* e); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bCollectionIndex.h����������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016332� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.546763234 30 atime=1762812828.042759324 30 ctime=1762812827.546763234 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bCollectionIndex.h���������������������������������������������������������������0000644�0001750�0000144�00000001705�15104461633�020326� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCOLLECTIONINDEX_H #define C2BCOLLECTIONINDEX_H #include "ui_c2bLogWidget.h" #include <QDialog> #include <QProcess> class c2bCollectionIndex : public QDialog { Q_OBJECT public: explicit c2bCollectionIndex(QWidget* parentw = 0); ~c2bCollectionIndex(); void index(); private slots: void aborted(); void addToLog(); void help(); void indexingEnded(int exit_code, QProcess::ExitStatus exit_status); void reject(); private: QProcess* _indexerP; QPushButton* _buttonAbort; Ui::c2bLogWidget ui; void closeEvent(QCloseEvent* qevent); }; #endif �����������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/icons�������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013544� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/�����������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�015605� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/tex.png�����������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015127� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/tex.png����������������������������������������������������������������������0000644�0001750�0000144�00000004260�15104461330�017115� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����gAMA��|Q��� cHRM��z%��������u0��`��:��o_F��&IDATxb?C~~EEEE߿@ A!Pp1FFFO<:uT �bI012ep 1 ǯ _~(A @P@051hH24Tr�x �F *\Ato"WSPBH̋nEKit`ەaI5bAŅ [xPM #X;ЧL3: s&W30<| Fo? Ѡ1a F�#8\FHDC �s /'0 1*?g`eac:X6r,(d@@DDELQ�K"�'#Mh 1@ 42 t pX\�쳿q(7(CgD wex%4'@�@�11�sdu,gbbbPSScFQ @,X Cv#T[[[�Dt Cs ۷o(� Rk[�Y +pOEI,/ihL3ЕO |uN;Q`v0K돿1xq2Xx `Y�TRVAJ/Uvxʠ'g _}g`bmfR+r2<za b`Aޫ ?ewf0'� D102He8^Vly?C"0+Óe .A>gga CnR2 <y Ü43p32$p3\! L(i�  5A l? h# 4þ*V^ex'��0gÄE-iNUiHW<g )f3 KQQQ�J"da Rj`s5a'S~3Yp0d:q3a-8:|k'm#ٻ^~ &"��88YY3yp?he H%, *ƠO_,~D1 L30 'hK/4$xAIj{7 af q_3l8as}; * <<<p� 9|47K`3�20 XU#z e w``cx y18J0y30�kU/v\xV�JZ~g2d 0؍ " \LtJ &| }W>Oa8} 0|AY!'Pǯ yDQB P�Å/ڒ.*R X-30p�K8N6V`Ej-`o2$3xj1+`N>| *L(-7�bAnkp'/N ;LW30> +ì} eq20s 0r S B \|C/[yҪaW,?�0t 7830!}c l%S(r0l&@�pm'G&`B?` .fΝVQ!'@=~9B�"4Ɉ7V899QJ=666w1־5kV̙3�$j�,1?~d{5m4; =�D@3 ˁ7aY#888^~܌a9�MB�~ ۷oa~]=@�0+ @qZ�Ă'A�oܸgɒ%̙r� FPɹ,++{B|ŋOfϞmz/7#4 :rM@Pv0�HyW;����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/configure_utilities.png�������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020403� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/configure_utilities.png������������������������������������������������������0000644�0001750�0000144�00000003550�15104461330�022372� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs��1��1(R���tEXtSoftware�www.inkscape.org<��IDATh͚[o3@E#!Y!+'�Fm.@1AbI5!/Hd7HHya _2Y"-3 M߻>ejzgzN/9Um%"RJ6"*{\)e�*BB�pE$9'8  & zCX6h,ATg%I趌*ͳ}*:R)erp8deT Z'�T <X xqˡ<EQ 6@VSπK<@ ?aHd,]z !ItaR.{'4?>$:iE0 {?Lzji�/,^tH*Q^V9w,V@<'NѷT*RJbi=oss{70H@ZF^�M ’ #GF(wb94& (]7  LLLHAeGկ}C"H""0h?Dh,"loosQ~hhǙ<N(N@AB!ЎI(Rdz=xySLA*�@ yQE?ة]qPuݾ~-E %ȂlXdsp]u}PB疑8(�»?uz<˲y%ϟʋ/imI=WB  2 ޻qOW~Oq\O.aCr\h`n92}6LNNb6at'Y%MR! cfO̱cs`cai)u{@>fIJh Bs,.-WEhuXM NM1Lbii]gaa'F>X(bX^^f<~@{'H.@,nݾb<-@SFw>�h44 $$YhiydzYΕ{޽{G3"ͷJ}LﵑX_v<I.E5ILHHW/,Q_vT*20JHwMKT>e~OceyQrÚm{C@'n@%mQ=n4LLL^+.⋊`&Ϟ=ò,* m˃��vCGS )a8yaj}v|x��|ЉYH2g $u}1{G}ǩ<yÇjX]]]|*"P JaǏguuKyUl:t4Mܹi4M&kkk>-_xyH0 Ξ=˙3gzdwL,E�X___ҥK78EJ}VD ͛~XVKZ-666W^nf(CZ|tec<,ˢ^jh6lll4]c`#�EV}<#R\r">>{~b}jVfff5MD)^w8۷'O,OOOK g10AGC~[T 6-yŞdxܻw.\/Dgd +�| x&ҦQa6?^䍰e-@8'1h^cH s!�:z " }rj����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/configure_fonts.png�����������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017521� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/configure_fonts.png����������������������������������������������������������0000644�0001750�0000144�00000005772�15104461330�021520� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs��1��1(R���tEXtSoftware�www.inkscape.org<�� wIDATh͚{\}?>fܙw׋i4}!cQZ(HcS\DZPh5mB (QUHA%nژ8cv;{Ow]Tis~9wGH)!9B@ej@EJNh_7 ` ?Rj FĀ-7۩ Dc!�\:3{F(e` HN۶ PD/=W@9hbk@s[#M^G4䐞}T -joḵƄ #=1Xо)%b9C- ~$Ju]<ws�ضeYE(U5"˿.,,0iB2 7oF( })@l6K\&Lb&i)i}?uP(D"`C*ū™:~6ettUU)JR)TU i(JʼfVVVXYYqJR MJ!HD"e2ryD"�\*m)%P333`&T Mq CCC$ Do;F(Z2::ʮݻ<AyirL&9Tz* b^{t:(H)z#'& ?J)4 )%۷owEjdUU :aO4 @kEa8$ nvZ<kXH 60^xaϓ_9B4Ÿ_k׿N8FuEiB;w$֙B/w}WV/n_'�p|iD"\Emҩ$I瑾(ic'|o,>4nSokGiaFDc[5[͍ZݲMNNbF@`kf3_ӓbn!B<)ٽ{7y t/+.L&;r�BK_[E~_~Ҕ^܏jA( 0iS* iiv=+x}tn߼fLY^: [u%)Q5~#d2B�TU065WUx<Z \Z9~5x\2bmFjĊ(UWaX"-ZSUP]׃y#<eg|ُv0Hcuo]L$i ۆ`ZI�R:fR?_e_qp=T=X t]r^;SQ{j0EQD"변ߑRր,pa|-nmw_6 j zo. ZXBQR-"5Ħq|'o'$ ;hhK@Ymj=~',b&mDRLߛ'wQs`xX 8,//fT*=N@}(ۦR72[ !<{(PM}VضXK P $ `l&m_1,%Dw]jJZu5ϕH(cccLoFAií<\^gJBRuۊiAK)�P3e8SSS\"W0,0/ҫA oz�^Jy Fٲu+SSۘ.6nOMs"KUAD"dY,[ p\AV\mYULLN ~q{s߁E.f.`ll|>j@'֢@gK-&^4d8W y#_eY>�lٲL&/ D�Oj]C=0AD4u]ޟ$I>{%Q?c �XYYZzp><ZmQU۾4.Pi^H3P(H +wӷj6G6#fOeYAɤP(or# \faah4JT FE_~�V%U|]IRxGPq~yxkRRVm>={]va4Q,r8yl !ǎ;~СgY:J@x;R|+XZO[-* /^ԩSOΑor~AZ RbYCCC<S fgg)b1R o&9qę? iY?NBbHTq[YEQS{ضam\.3??"G62eYr9rOgϞMiAƶIbxxd2 4ömciiҏ9?s\Sz{?4F~ƩT*dYzm}ݥ<~ 2>>aҒɇ ^05- 8<t>8[44oS!0M]׉D"q>u_h[\qa|||>O.#N9KKK XRʁlmCd0e^w3Z-8'5?8\٥>? .@TU%:euD=ϣ\unJ>gff&o߾G9嵀Ka4M^#h[a2i<y޽{Nhk+}4_&ӭ㚦F9~{ޢ|TCg As~5xx'%:(΅L43|"ii.�(Ԯ<t4ކ,ik,R@iE^sd(0����IENDB`������cb2bib-2.0.3/src/icons/PaxHeaders/filesaveas22.png��������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016615� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/filesaveas22.png�������������������������������������������������������������0000644�0001750�0000144�00000002321�15104461330�020577� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��NIDATxڵmlE{* J[l b@LK/Z*؊Zb%! /@BP 1AH  UFP- \KKzwۻٻu6Yf63>8t]`ieUO ȱm}s=N%~C((J 7[عm H`NCC]ݔ<XIX$YphَT.^ ֚i9Fع lM QYHhͤGhQ:;;%`X`g� $z ur}kѳLhE>c~\ ]ะ0b3veeb{#yi:!( Wҭ D.1԰g{W+oM_&<Ӏ?\D$*k]Op,LWC dYú Rlm0XZC$GoX茅g; TmcaS-o9+9_U$` �`9=13i?:#&uJ.=qgzV,QXE (3y[lfױs3ޢy&xf*65A!I\Ī-R>EF~&o�l%A&+ޱ,sBV^⦪d�u]2nL0$28"R̚ZH<4iΟ"+/;n~LKNK/OSiڗjG͵YHE D~*Sn1M|guR\m s]_ҥ%0<<l] :y!0Y8خ-8z*dW|9ycP]]-ːXD$Lב?Mv49^p:v'9Ͳ�I&S__ P!!Mފ\?QS9R` +N6&Nv*rte|c*И,~cx+SG)yrfq"^",*oS05RXFw]mR7V C�2U&)% ~k֭[Wj,0����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/mimeFolder.png����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016412� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/mimeFolder.png���������������������������������������������������������������0000644�0001750�0000144�00000001100�15104461330�020366� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���sBIT|d��� pHYs��a��a0U���tEXtSoftware�www.inkscape.org<��IDAT8Օ=A_uWϨ!DdN|I,C!p@Br2Âj}ҨOoJݤx J0/&gfԬcjuMTp8$8p'"]"`Z$$۳E$$al6y�n_UհcYk�ci4So�j0spqn��}4EQLzn{,~꽇s03ns{,�n�1t)�<�Ty>7|Eqmjv�gY�K$�B;�`~�3󜈬<09,>1;9mib\vO{wMYN5zx<Bcd1ڔTT""Vh c0sLd6 *UsED@ 9�𻉪*O濺7"ݮY����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/edit-undo.png�����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016217� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/edit-undo.png����������������������������������������������������������������0000644�0001750�0000144�00000001542�15104461330�020205� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDATxڥKhQϙ;ɴI/GnD\nƅVpƍn+u+*.WnDP-Zj[km5Mb$&3MPAt7s�0Os2]GjwDZ6􈾐$ 8,]dk-+kl5pښJ]^ps%ItA{gAk5̀?"իcoWBSߖ]0I$ lUu NcM99'+�HM*N@0670lji1㪯:*]�@|)mA mLhֆmLҢјY.ш�\[[q`sJ[罃VgՆ<t9Hy]l 3(;l.:;L~ iN" .UV1qWX+GBr6Wsk2s ��ҬZ( K0ϧy1qR;,1|VW<_/O\NK{uEG֭OS[_X_#c:,B`�c k SQ>hY0F.‹ݑ 킩!f6[C1csvY:jriʾ`9[p{G�drE57DY{*O{* &Jq _L>AbPHrg5@PeI?H/t(����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/citer_citation_checked.png����������������������������������������0000644�0000000�0000000�00000000074�15104461330�020775� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/citer_citation_checked.png���������������������������������������������������0000644�0001750�0000144�00000001326�15104461330�022763� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sRGB����bKGD������ pHYs����u85���tIME 6}��VIDATxڍ]HSqsfR20001/ыO L`AA`EEaa(YJ]sLt;X[PxH`P[^y{cA#!DH/hxzxyNF{30pe(Ic _Ky2,SZG$D`2SLWōxvnvsjɒA#HK7Ƿ7YoVj*jiӑJ}2 >VHj.YH@_�aJ!\a^Q.QRP�`1悐$s~<5yAfyXV%c' Зyvt-rb F`.'~6OPR!7'_GHNN!33am5S4IQ" y1)�5IʜUz%A+{wQ~X8#ߩ/HFUU.b?g:?IFQ6ٓ9eXzخN>":jkĵDŽcS" /:::(|'`+!QͲD`QH`dcрN`(~ ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/bullet.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015616� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/bullet.png�������������������������������������������������������������������0000644�0001750�0000144�00000000712�15104461330�017602� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���d-���gAMA��OX2���bKGD������ pHYs�� �� ����tIME 92��GIDATM1jP�?/ ,.B'7ADG(tҞWX .DrNEj}Җ~oTj=l9c&h6dY錢(2I4Mv5Դ؀q0<WUhvyN^o,bf<xGѸ\pR7Z )%b6ys:(JAp;$IV_I)s˲,۶1� fb^RrYH)ERRJ\.x �@v'q`x<(Lo@\X�.R^q(>{}~.����IENDB`������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/cb2bib.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015452� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/cb2bib.png�������������������������������������������������������������������0000644�0001750�0000144�00000006570�15104461330�017446� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���bKGD������ pHYs�� �� ����tIME![�� IDATxݛkUzsNUuu܌066`nRHUZ* QP@lH ˆ_cz^;cc 3S]UGuUWϴgwmQRMtTsFp {/;cƌ%|Fݳgn[hf.&}m۶PJSNMGlԇjժ}Xzsmrĉǎöm\q=}}}=/Ru'|cǎ ͒=͒dp]uvtt:u @>3zB)r9<\ufK&q[ZZ^ܵkХ$wJYfeY?RJaYVP˲=^JIOOǏ~̙W_Y9s§ӅV|DF:y_<a>YH=`v\J:ĩS<5AlNGK!Æ(Dgt= Eo陃<"oAXvDR@>Ȁ3~O:ijjs\.G[k ObH&֚}'EY꜊`s^?B7P1@9I3ڛC Q B2dljnON$/OR 5yb aaHݟfN;LnLmmiF kSMDbBc8s|e~޶93L>M�@I �q*SJqSHb>y7@V.5rk!@(t!T)%Kl%lRX¶,l²$R(Kb T)@P@Ch-42BӒ!p )JY/U!1"D)IF)͚2Ѡ $RFF)DH"C߁@H#!ɻND(!1`IA,[uʠ @KA((&_ՔԆ2h(D9%C `II0S 0BښEƐH0J&E2 _F(^FDA)!@Arz xQ/+<_QGGiJ#;PR$QPt)cS+�S6:{3P_XK={"R"QzRj% qU " "դ ">/C\ja*)'NV= v&,,HRAҦQ[`0#A6(%+$]Bܺ2:ϖЏ6;(!G1*Ɨ~73}7Ɣ 68pU reAewAo�x'oƞAZj^ٓlO@,1]AK2!'40bXt- Ciiܼe #@1'o, 4qi0̬^vC@3 >^@ '7t;vXRwJ+(b3L󭭭olݺuI Z[.)c߇aXYLBsss~ҤI_1 MfG?6>Rʊ )&%Ɩ-[E¨JVm*9q.:b&(,QZ7/^xsp%^/Fm`I)%h ub8NP(=(@*�~F` Ƙ8!+"]d/�t*"yI )A@l"g[5M49"B,5emUH3?Ah]_)U `YVh=^C2Q͛=r7օ%KKJ fH ͌3Yz}\}͔lM}@jKNLMNCܳ9H gӆwNrL6Woz|S/<,\U_ւL  bwy?`[+v�߹�-,`a:!m+o D}?Ê;coC#`n T(wu>%)-=ټi=GƲmZE߾s,`=yKzϞai䛚v~� ZKߊ_1&<|Z6qwЪsI^z1 xԝ|ߞݥwÐ>>ܹ]w/[>*\H°RĈuaSo}w3ױe _ac.;5gnű|@uto\@>+~W*c ~m n~*nD[oY6{I]>1!|ppώ!o⩧J8azu/Ǟ`TTZ#H1-A oѲc<n;o@ke\?{.|~~kɱu!= )4ư�f͝7nSڿw?C?ZJ,s;*>)�X0R{[mbi`g�6.?*. CzC*Ŭs[/�-#jn5T2J;Yw �IDK/y^'d+B0T(e^I߷vu؎zȦ o[&78:gBn!Jp$y;pܵǩ_֯r璥8D7oΎeӆs?֜;O~-aώnFanG' o+5_c "Fd3I{AG];nxh&'Jy?#^:yTyȻBe2u0\3Ǹ˃+61}g|^~`pl5!ac ~<c3 4.7ty2TvK!˒& F?. 5pv`/NDkPF,,\6  L?gEߘ|n/U!1gKI[׉�8{vo6\h4;q╒(QTWJ[h ^>j+ ^:3" վ&@+ !dY7Xu/8ծ044k/1 ftOьi" �Q����IENDB`����������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/exec22.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015417� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/exec22.png�������������������������������������������������������������������0000644�0001750�0000144�00000002173�15104461330�017406� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���sBIT|d��� pHYs��a��a0U���tEXtSoftware�www.inkscape.org<��IDATxڅUMH\W>͛:X⌴n b tאHign]R.FZ!quƆҍTM, }o;$8޽;|l6KOk�N Z*eYS:;.wAiG%%%f#֢" R+gffC�C?85QVVu\7jkkFۙH$O*666u]?<<<M *EtroPiR4}7C+2Pg,'R2 9NO0XՂ\lkk@NNN؀Ar"M&*{V/,,,;\w�|@�˳�vqX' R^Up|>; (AeVi~NwGFF 'TxTFG~>::2WVV>X'-  Y#7987JKKh+PVZ;;; ϯ!m<\Qhƀ:q괋)BW072==݌B"= TiHņCw᤺;44TWWa/+ӁفPX%.J[A=Gî 2ab_7Ȁ>CzrNt�W9B:??CDQk|5oӳgADNt.c9C@h|rj`u>R $b]P(9s%gpYa"�@:G /G�4A |3Hwkk<YtnSsMZZZ"9sl755yld\UUU]=]p0�f5˂gά?>>ɀHRROOθ Us O,.Z\\|+4SFoj///8;;{gItLK%>z9F����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/annote.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015613� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/annote.png�������������������������������������������������������������������0000644�0001750�0000144�00000006750�15104461330�017607� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sRGB����bKGD������ pHYs��1��1(R���tIME ) �� hIDATh޵K]y}^fh@/(K Ĥ TJ*H&8Y{E{ERJ٤ 6a?,E0` R =<:>ݝŌ.34T{;Wp ٳg/J)[9vO۷ns$o !ra�|3?|-8qO ! n?8FkMEg5EQ_{&o_Oq<�B۷k^6?R:[?~baal[o}t瞇077׸<NGټt:G<x}Rs(Ð?~w h6߯Vc˲j,8uRJ ׯV8/7L�ؓ5Xk)ccXkB\1~aֆ[+ʥ%MX^^9O$`;? /pE{k-[}*j5 _J<VeR\.c*W|+ߪ?P � 3z<Udv ~~jw35(T"ZU9 Qޛ7mJ)<m$`nIZktzHlԚ/UkظW#0 k_r\MkUCXq퀿Q)l_nތ^n#.۹ \}ת۪]kht+ֺ="TJkLw%ވiMU05Uf~N ]O K8#V d?ezf?s{ BJ  픓t2D3b:#LOW |Fy |VD<;qCb8Ҝ=e?dkf,J zÂ||4osݻ)m-I2P'n0sOSxsh݁fJ4%+CH)P(>87,/'| 5 ƷsS5QatJN�|)*T8cY %8 !ѯ% kQ6 .$DSi � ; `E8K6ж7 8صgKATQ)ﻛlH`zNT 41TRX8q%9AS;FT򣟿ι:G"m RA&vHe<4L+#Mwd0ʣ5Waǎ ` 88$}4,SBgDR;d x嵏m$Zgs=J ʕ6LL9Y'5$}s{R+V#=M_[dGb,6#)_w3v6[aTO# J23['mqkjs><e2,,Z€!8k GcF{kr7E[r&bnY\Niiquh<ZXdd )󐡏=zL\|N}@ꫪ ;{Z4XZIth05 "##GZƂt8! 8!@8У(蚂> y%~p|i42Co'R)�gd2ٌiK: NI0h NXY^IXZ]VV@=TI6`ed]r3R'\ (CzR +D) y+N!<#mɇ9RI|n*[I@)!(iNR@ H{-8 biKgT @>3achVM9oڌ%Ԋz@/t R:R\xVs`wHsqf%@+8VvkCBkPk#.[ec1Q!ZFŽ \\N(^@ՐjY:!r%bJ'8)2Ep8k$gwbzC*Ѫz4 !1fZeyj8.Ư)pq-7j~·xAj'/@Ŋ_2?S#<V3IA7-H23=aZEJ3 Iu,o `@$iFa * fzc~ (g1xZ0R+y s-&m~k@[>b~F2ř_H"%8|4r0<ɲv{K틌FCњE/ک= ߰�:KI6ĆaN똨 |iJ+XIOE =R%CEs:J0,q9V<vW8y}=$Fc ^{3ztփ@@*U%R28rl'50]Q QJ 'F8JL4C4+'O/0 8]D k7{w7Bf0tCeV%'JӴ dUPݷYCO�O8e mr '|E)XwTNceeX` E yѨƺe~Dsb7~z_t:�fb!6glT$9t^r^FP1y̔}"Opa%�[hH%JsRL4I&#Z1_+?<ӧOiu52TqXH(�Lsn9aqaJ&Jf$B1<!$2J~|Np^ RIffix_ 'NximVÚi5b QL'$If$=pt303Qr5 #קm1Zs]X^ug',cxwp9'1zmBu?: C KEX:Üv/gr;b93wN|GxwSFW;H(+'/^~;f~'ػwEQB搄 Qx3Z;yӬ r0-HJB2H8wsQCc 4ﳰH?3yqtΝW=I{|7C9e;m陉p>/ I dRbds5`L(%Ip8d7wGWy쩧Z=]ujP{TʾQ ;s;+ZF\oirT}6<bgJ5~6QQDj$u}X),YQ╗<vؿNsԟPd^ B!L Kz-I7v0t4 ) ]Džu,Z5o<vsA˞����IENDB`������������������������cb2bib-2.0.3/src/icons/PaxHeaders/filesave22.png����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016271� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/filesave22.png���������������������������������������������������������������0000644�0001750�0000144�00000001436�15104461330�020261� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxڵ]kAMo&闔ŏkZ?oMAH?@HHJAkۚݝYa Bp朰s}lvyP׮oGQ4><BYe'=�<O QmgX)$v޾76]^^Fwk /]ʼn0Ƃ,�U+b~ !6>lLZRJ[hig2YJ3NR`st>6>uqݼ09R(DBsA8p<\C097Y+$ƱEKM,qsѕ)d2'qXc:`fI`ݚոڗCqjQ8ma8{ʂ5'wt BPi>9ɍ S;~v\4ĹaV:r#dd̰\fw0:[dp}@VQl4?O!0T8) C<}iZًr^z{{%~!"8ȢvaCpN@XX z S pnh_o4us1c~"IIQQs[,fjoLv}/3 [ kʃHyoRO58@~;Bb4T[woN <o!nQQ/ W(M]3 \(ٟP����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/filter.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015614� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/filter.png�������������������������������������������������������������������0000644�0001750�0000144�00000000655�15104461330�017606� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������7���sBITUF��� pHYs����:���tEXtSoftware�www.inkscape.org<��,IDAT(cI4`yRwzTXfjǸ@-_{_=w{kRF?CƲ5?&~FӋce &g6h>{7ں1(g}pu0Ag TYn|+{& ]* 1�˞]+I?rd1T9_ޞYnSWgVY$VT2Oά­`u NV//i ,xE�;/:����IENDB`�����������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/viewZoomIn.png����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016435� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/viewZoomIn.png���������������������������������������������������������������0000644�0001750�0000144�00000003031�15104461330�020416� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;��� pHYs�� �� ����gAMA��|Q��� cHRM��z%��������u0��`��:��o_F��IDATxb9s&xxx4 Ǐ?8HDDDׯ_ߟ>}zPXXxo0|� 9, sXYYݿ}6EFFVEVV(oGU>{lP}1� Xa/##:''Gv99y],V(--鳢_d`�bd񐖖-#((�t_EZ'߿g.!8  @>>H### 660&&F8edK2 X]80H  tXl@.#Zhp80>211a5 XT{ׯ`P  4�d)3?`d0l� @.G**B@#02@"`ׂ bgge+(Ea�IJcV ̬  ZFx9?s~:T@,?f-Uyjk] "P<~2`;L8 2�b07ax+,̽RR,p32?0W!޽;}}w[[[ _~oPR@�182| ߯Du'Lw>ܹϝ;o66VN`@.0#\@׉ 02ة1ۨ3hK02?tƷo={\`Dmݶm3gr<x'`a`j @܅ lݸ``Ǐ.PyFYYYPr;}aW`0|H�njJ>~{[&o mZF0�]*AEݻwG3 Ǐw`. FlG8̀EÜ{Gn>(h/= >˞<yh`�sի@_/V3% ..l "9\;!ePTa$..(  >0c�SAC)X+�nlgd?#CCC1pqq1�k87n�S~`8/o?P K2<`d`fo?6ڵk)@ lbvcWgxG`~z޳3ci`-a6F0O~Xcc]=/[_gf鬠z 緀ٙ hcmP L~߁G`_@~��+d0>����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/edit16.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015423� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/edit16.png�������������������������������������������������������������������0000644�0001750�0000144�00000001264�15104461330�017412� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��1IDAT8KHTQwhFȊ"6!-jS @M=E !BI&aQ"Z1A0HHih;3k1#>8|sϹbf�HTˀH8K$k>ML<IA)QE�佼ɠ*+�8**)炃"hCHh5�9�!h$� i S%y\uʺs ;PYUyx\\U *“^=#q%Ceu+�8;Fgw'VMMe-},^uCgV[eհh 9z |uX,6VG[3/N2|3 t ?<"X<̌= 6nXm/Xnd2P(XX4-JfMt4 ޾d>3j�ffTʲ٬u<>DVW/ퟧot8q 33 13ZZZ=@%U�13//\eH4����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/fileclose22.png���������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016440� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/fileclose22.png��������������������������������������������������������������0000644�0001750�0000144�00000002040�15104461330�020420� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���sRGB����bKGD������ pHYs��v��v}Ղ���tIME  T3��IDAT8˵K[Y?1$(."!tfE7rۍP:JDz,&m´Iy%h˽w6d0̃û9s֚1o e֞{vj۶mqK%R�ڝm۴Z- @wd޺ޙ5XeYq w4;3%)N{#R(0 \zB$CB>|@:FJI84M6`@ i(0 mp_JO"^zH) BR С,T*i /B+f*�ax`۶QJQx-_|abb7odXF!@\.G*"Q,y Vd2Ifee%޼ym>�uT*j5=z$w%#$Hp5J<~G"  133˗/q]L&Í7V|ׯ_S(bddu`zuzzxH$B6֭[TUr$I:/^q*NիW.ru\ÇlnnAh|聊+ �vbS. ÜC&attԴփ!^t:X~:{{{DQ<x֚P(Կ9>88:]>grrZ <{O,wӧOH)qf=ܻw5"m{$Rϟ?s&JG�hBܖRn).F*�1Mf1Z~,Aࡣ4B$%Uv:_ `0hFq)e)aԔRcBsnh����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/viewcb.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015606� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/viewcb.png�������������������������������������������������������������������0000644�0001750�0000144�00000002611�15104461330�017572� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME-9D^��IDATxڵOl]3s-8I 8`(Y@ȭZ$bR6Xʊl*uɂ %RZ TUڬ MٔTCϼgΰω;yo4ߜ9wΓ v^ig&ξҳ/wDX$ӈSs ~�%D(Sj?~?܎YւB[dCy?Yc k7 {/f�FX"vm9|��)#De`Ҍ5y'zYV܊ �9 3|/i|G+�"hၞMܳ8ɨi)Y85 !|j�Ea,/T8J[E}@'hb!v)W# ]C� , yE#Jfm�p94cL)4`X I qӌȚ>hm2'#Bd-AuB TV s%0"Hd^1FQ@0@:J聦k-`D0Fxpx"CUYQ]Ж_83}nGys|#19·_iӦ+,6eaAD#~9Im+~3ųEw>cNMMqW*",`J3e STȲU>.Pc``۶mϗ[+r}!)b6�Ks_>cff΃ȲpQ,=pu>rlƬyV յ.c ,o* ׯ㿄ZG X[vʩS>n.|95!"tww}=[[UKwE:p "%h7M4R###z{{n| />bհ6^oyùR I8R0000Z \YǥK,ˮn)Qh4jTU:7o޺F1{B*QIRV|29TU\S\ֺ..VVJ4%cjZF(8+ĿVŴgycϣxIӔ$I(9ɡCFh;jӬ߾}}ZKQczz:9vǏB8`5LDm߾7nܸEUʕ+N>a'C;^&1����IENDB`�����������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/fileopen22.png����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016274� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/fileopen22.png���������������������������������������������������������������0000644�0001750�0000144�00000001434�15104461330�020262� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxڵjAS6DР(AV\$H|�"t% DшD$LgRt:3ATMM}]d!y�)LVEB. ...-͆"9JL{F9.TN ~0N:1}4|ϓo@UU̬p@8pn\9 A]ںrgo>|rZ ̻(2TZ~X?TQ| cJs g:-%F)}>:qg2] ߑ}:`[:'�Tkl2tC)hXk Pڕ|gr|sY�&O Z"P_�, uJinsO˩=5<FZ7ȶzcu#FL7 5\lАR4(n 6W560v$t#� 0 oŠ^pJ=(dDF`E2g" wWT| 5ï?;S0 V$`!'nMBtf͆QG(\eY^lw1Z ou"fتghꭼ<<VUКPw^/?{:>}D0#WM;JW/pj]{8tg{�8xK/qTy����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/back_cb2bib_32.png������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016736� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/back_cb2bib_32.png�����������������������������������������������������������0000644�0001750�0000144�00000003132�15104461330�020721� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME.+ħA��IDATXåmh[HWW+c˶b'RZEv+nccl4 Bh`,`ЇRA^0X4Y3XM5%db9HrotW_쁃=<;t:=zLl6g v(D,0MӈbsNǣhp:s:88(yb=w\9NX ۶D"躎A昘0 ehhH700pp6 _S{`X,fiܵk+++b1t]dY.G(>~K1PVe=L&sW^Eu4M N(Bˬbd2FFFiMp]בe7obi @6m:SSS(twwMB I---B!$I"HJBT.IRBTr]Y[@  �~_M3_lvuu8Ӱ^e$I6] ض AHR;I,H_]R)pggg9|0nhNA4z噪Ύ�xy}4d2ӧo߾Φ�x[8&Lr…mK(;/:۶L-Mwbeeވ2/pGرc_ٴ yqnfFgr\ZpZkZ<Çfy(ul ^J ^D+GzLD_WU2i gsW{nH_|leis{G'"<s@vDy >|=g ?xPUxJD8qT,Y|XϯK�ҳfrw<yei�3<4-~~CJ6B&rBkX"W(+y!#8k=WXUs"nGԌAMnASj2W&յ,0`#ݖBy5�R@}͙D[$rjp�_{V{y^H{?QeK2Vm[8B߆ϐQa2c쉺w\ (,cܯUU 5F�"*dBpοuQdI@QԞ^,7S,UJQT*M(J|Hv�Mxe=*JESox<E!Du]5h_xvِaq,6mOGrݏo#fO7nmhhhF��<;y< ^2]__|wttY+IUՆloOr"?X]eWkբRS(vU5-lxmv^vmP( ll꩐YzrI<aV~m||X0 !feUeYm-˺T(:cIJ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/filesaveas.png����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016451� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/filesaveas.png���������������������������������������������������������������0000644�0001750�0000144�00000004025�15104461330�020436� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���gAMA��7���tEXtSoftware�Adobe ImageReadyqe<��IDATxb?5)ՙ~}x3e7~^?wgOH/@�Q2@vCO/@�Ba#_FF?1AՀhY x𥜁V?O{ΧA�@�_> cK\E VOdP2p�%0~+ #.�o~O?0od``e`ge8C_fe``:rn>0ܔgpa j� PZn.v#yA>.~.ySho@5L nc+&Q�@,Z @6 0H 0>00lc`dd`xL _f ԇ�JHB Q~ @^fx ho?]�8�j3k1�?/``VZh9ec`&LO݋>W~3+�Aâpjs@P'P`xx ×}k@f:�_�p"T?PAA<Ǡ|"0 v 1%Û}~.7~�b=8*;Q F+Ơo Lt@YvfvPrx�@�A�B ,BPI�I|߄d 7�$ @�1|L= 2 ˿Cх+ 9>[ o`T;ѐv @,a� /`I/?X &@` XN=bg`Y Wh 1!�)A k-KA߀Eϟ}C 4?/+dy%f<3k=Pt1aN�b 7`!1p=bl,~}�}z@C3lƏ?�?H Rp9}@)? ~F0 r_~@a >�" }ǐNrPe`,r|:�XF +ý.J2|q`22tڮ��bՂ ?~f&ʿ( 00F]pZx:s%.[فY(8� ( @7x$(03]6 0:ñ^d3R l_p=, 8�Pp} Xu0QJc'RT,_�Yhod�8̟JŠ2\V&@.}2(2ppY/Y Ь )x  :8[<� 2~660\l?h-ήK17?_C *:�(q'B�b׿> @XZ% _R UD!Jο(YX,02 × � @0dO#$ ,~h3 eOp,%A W&` ~H !3N�/`{O#(1޽{)|D~$Ty__�We\8�@10Hp7=x0lt/@Ճ::p �ZSr@�11 0�w�@�{()����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/help16.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015426� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/help16.png�������������������������������������������������������������������0000644�0001750�0000144�00000001254�15104461330�017414� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��)IDATxڍOa( ABd"1. &,?`\L0 D BwzV!\'}wZ=ϣ>'~-ޟ4.rcO/s\ro an`i#� j$->z.wȚ<>.=%-ٌKgJ25\2> urYXxģK|0J q]3h'qՇ sK#=ͻT�>ȸ*]%?> 5/0KAL8˳e�t<w4^gZDJ5P K&<ӟx75 !P$5m:*x f\>OGDdoNZ@u7P$3I%5,Hc-iiӈ h6*+]|Ow m,ږO6/ F+**^!gpmժxۛ76YHy=;/ٹVC}����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/viewForward.png���������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016626� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/viewForward.png��������������������������������������������������������������0000644�0001750�0000144�00000000622�15104461330�020612� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD���@��� pHYs�� �� ����tIME ͗���tEXtComment�Created with The GIMPd%n���IDAT8˵q@D{mGe]6o H�҅�ȩ{렩8{=;O?{уK(t]/ DDH$$h6L IC]nda7KdDP@*ipRsW"$(+, &4��6آJ"͇Mۄ+XV!qĔS]XZg ?{C̦;1F?| J ����IENDB`��������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/cb2bib.ico��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015440� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/cb2bib.ico�������������������������������������������������������������������0000644�0001750�0000144�00000351074�15104461330�017436� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �D��v������ �(�$E��@@��� �(B��LM�00��� �%��t� ��� ������� ������� �h���PNG  ��� IHDR���������\rf���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������ pHYs�� �� B(x��CIDATx}yUS]HHHvpG㊈QFdQqQQC#(( ;@ Y""-$&[]^T^}o=PU9u{sv��R׮qQW!!2 E: 48(�h-i4�)D�X[t�B)4P_# %�m�lIe ׆UǍJ%8) %HWpPz�u]ɓ Q7phG]& + h65l/@_?S!�PhR0(2F P+;+IH=ԑ�IR 0("Bl{6n$hj$DQ*sjPxnMD�8$IpB\utR N4P`.%H�pxτZDZ%A#� IUDH�p��qp2l@'HC$@ɄD�8 @ 9ܾh�  � I*1v$hb$j�$!?2jgϘr$hf%�8�6lؠ.100-[,gfƆ u֥|\.R4xxd$:Op;5k`Μ92�qr홈ݕLw+p3fw1X,~FeY>B$I&IRJEHQ!2$IReB 3q?>*Vز#Ew[Qs=Wq\gs^Ӓ*-HR<σ8yT* Tl6O<q`Æ /L�y�<CI>-IR !,*7:dYV#艪t:v`޼y⋙Z>51mxt{c֨\rD�Կt�\xrJ hW�/ҌBL&sq<�NR$ tZCrQtzӽ0>5mmmBO?vvvzjVii5�T“_*Y(~߾u?^leˤy�۳gOwY$3�FO&/ˡd �z2P`;::MV1>1OfSangfЄ$5߃}<Y};'Iq܅'8kϞ====@"�x0zzz={^$ie&҂L&t:ٳgCvd2EjUs5_Bj APT/}ɷş'T ,|ܹQ˗ZފVP{ (t:T*j P(`شir* A `:>먣zabOOO*k�ܚ5krD3,͚5 v.]DjF_#н}ZE\FX5PEb&S P山1Uwt؏H{mD R) .?Al޼O= "x]TX~ɛ7oބ)Sn�|r~```l"=PuYhii(o}axx(2vN� 2ɷƪT*llQ* 5p(˾fdY,8Xh9̟?Gy$,Y[l!癥R-_|8q �R}}}Wd2#R49s9Hrxᇱm6C bf�*SO $add֯_ŋ3q[oŦMJ ‘xɒ%+l6X�,_ߴiӑ�Bl3gbHرcNT*POh�@_(ˎ T�L&1֭[q7sEpgC?4J7׿޸|m+W1S pRL&"'> dYlݺ~;$Ib"_? o� PVQVM{|?:mX,nW̟?q=BP(\<00p!G5k�\n,˟%7o>`y}ݪy@FDQUŕ$ g- pYpM�: h$ѻcoZߎo}[8C1w\޽8 dp$�zzzt;ꨣ I|AJ%`M?Ngq?@%lпA04r<>裏ƞ={utt===wQs 6p(LGa-\6m5A aHH<Sz|T{g͛7cѢE,˧�+6M�Yގ?H@^2}F;~un qxpkBeY>:H� p-F.c~D�I\^ja޽ӿsFL [lG@HL �黥ǎl*}@8qسga"#_2 H AX+svG;vkQWp HyppPsh|NaFS;]eATAh�"m'/َDO+@' GGG T+@7tZmqg8ǟn4L�g:\.!~% j(0 �gy'̨F'O 8̖2#9^�D� Z* g3B[]3[ÁxV kTB` BҒ>N' ݋^ٳ 2/b pg^)t:YI#0@zNa �#l< �3qϳƈP(0::1X,T*!͆ۢSrR b#,Jޮ vs  vM�y % ?]6].�NUqDEbd7JzA` 7@V?G#hcƌ4d΍ `.*v'B! 8k NҥK-3/bg ;�S`"{UީZZ�X5tvѸ0ynJ(gۅ/ux�y:C"6]QH$vf1Q�hz3ϸ@`OExA RzD�DÀu(4"nxO( Nh ,L$@w<ZX?m N' d!jV O>852tLFݤ4i:KKX PRTjHR־Fl_Kɏ22 ZZZT{` _ݏ#ffX~=111JE:БL1cΝVd2_D/Kq�qxAm�Jkk+сRI<A`z ^ aVF1V8CKK :::ىv56Y;PG ިFZqhmmuafU椽ֆ&E{5;�Qd2dYtvvfYJ%W@~(t3ӌH!gӪ�q`GG̙KA5*LgNE> %r:)8$#�m08G]^ܑslCJo z@P˚fr,<x0i @D< dǵO=GxS,`,$AOiyG{?@(z0 > %k I&~+.GU6;taM�Y e6`olNr;NAд�v";`v W�#e2Q׿]3[)'* �Vbr/�d_ HU(ZӁ wN6Ǥm An)ɲV(@ �WTj*�XWZ+Gb(BTU#0;dsYyWm�jB`64;� �((S^S=ąqc5RG\FRAZռb"�ժ^,˚z?IZUڵy Z/(/A1D HG RT*abbR RI#[fO6dY�PO4NILeYV&\CgP*<9Y]W?$ZE\?xڌ83fqM$80 #U l@¼V6{�6,$H`v�Y�-Pȯ{mw`Q?"?AXB.WcQ|aS(umIZ<ϣ^9<]A_4Ec%IBZERQGM~3[3G|:9_/6utvik?I0V(ЧZ?@*vHϖ/== H-V=>{oᄃws;M~E AZz|:~|iK%#WFЕbFh'vd,[A=307[FoD񩹺Eן^RmV^ƳW;?f䠸nb׷z`L�%v9)GsK|;/!W*R< N|: h9#˲DlI{ {#>o 8 @ *~q&N|wA~F5^. %p)ɷAQw߾wM|I7dS [ą@|zm=3qFFOv ݑ)71i<:BB~<6K5yrqd! |oӻ&P?%{PMX�Ǵ7؇'w;#C|:k~ޱ�n1[и GA|V2;%gۭPh:(=&|/W_\^|�LeBhVG7 #a!r8y*c- Fv^(/4©Aھ�q-.NKA|?~B"�P,Dg#y4wMz/#(/OpYVd !0p{7.qq2h\qPvyN͒?MyhGj)tUDD q ˈ)a�vfMXilg^1CB]~ ^[7Ih MspQfSh�:Tw-p$ Y{{7طEA8=MK.g/X>�4+{ `*8+XGo_?C= !lؐTB~0c-贿zC},-k^FKKJ=݊gV"ab,˘5 k֜cU G;tv;"M#VĸJE\q=q[8|b+�2=?暿R_?q4~6C]HOt rBKU O`Al>bYǃQ'*q{Q*UM͘őGm=-®eAAյp*6ٙGExhkK3C%<kic7>G$P;Gn^ &P\`|5 n٩b٩+w~5(7_yioX5G<lS{4.h{89'wR7sі,8|ͦu(vıwgC=~g1=[$Ƿg?{[�'R5ӘgcXaHڒ…sqy I.M_0B73qK�8YĒ%ӝ檅?݁͟)*7:]?K~ #VyRdip=9ìYm3Vf֖M3gǟ.VULTãN8χЧ挿w{tTտ|>BNZ>;IE�Df]}د<,cCCEppo>Q('T|}9k3gfqeK}]Y>-|<M~ kgRn*"w#.ƽ~Ӻ[ ӹ9XX� v/>UpJ898`kx63r%;]LL>u4LҶp뭟BGGF&2.X B^z_yzL5@36?\|�UXv,6Gd Xt~k9zZ?]?I8Y nFF�v&sm]9qh 1^o׮SG'4j il3=(|sh<qǛ&lM\|e?aV\tB*�2\h#hsА�<h4Vt}^_Oŋa|\@WLcyVJz}Gx4-+V<[򖽯Y[a|\)R>p'\ I;G ��\PE~^AMW/;0J Mk-|RCq_(E[^êU?|D WOGTP&e%?!+b֬6d)y|"9/PA%.RBēއ+N\~~Gϟw3?wv3�F٤ "i3PSmV*=ǡ=:he;&EooX?щ8_=\/wW}ط>>O&ff+S>=a̞ Qumv5ȩА�>�iwq:OoU2oF_zY njA\8v>Mf sMrV`6z/j5ux}g\D%; p 8nė/zz``g5OlÍ7W^y*=aFszIsf'?{z&s,'(iCCElْx}RЮ]cصk0ߖ_[^;lޔÉ:^_W9ԓpo|n|;⁁ |kⴏ,w{mZ^ls f-m�`VWf嗝/;�0>Qŏ~ |0\{GTPו'I2FG+Kظq�5;ҋ =j#XwW]rɳ8q1s!2 -x?>*8WW"XM1_owtdpi =狇 ӧbAOx/g~t&ݻ4y8ԺZp#Ө\q`b\ {Ob: p4ܯ~X6] 37JC_?+V&;Ey;v\rɇ4I6m—0.Y?| s{=g0C3ϙǙ`V)`D~Ӫ/_ӞqGMwA}SjnY=tt\v) yyM{CjpDT*J~Jl<yar׬z"u(2^0IkV3p뭧c̬|nvhL#͠y(y\T(X=k\_x:N;m̤=A~Oj. pC32Vv1MU.&oEn]f~��8�ݻF�=/@ww&ڵʿص/(A㚦4X̄o5 `A#? B|ӟ��vVi-4Yqᅫ0sf~k? *Bfv_ WN6;/'B3e b~C ta޼X�9߬3ϙ5U "wÀiaN6fQJBsa.-)`]għqQs$^O,.p%3_I{?* Z'3hVNppNwމIg0)}'i/ݻF~D՞pcŊd_qYin]myyr.oN@F\ɯ8{&?z4AF׿plI|/Z4h?m}aun88@8l7na`k//dP3?.pW;q2wQ28�9(nݯ'x$ÍXwpm㷿d}u3gt?au߿ ;ܓǁn`^oDXl}ːz݄u3�z{oƅ->CM{e~p+sO(\Ejgg&ܐƃΛΧcLjzVvKpycΜv\}Gl;:�\"~z;CiElf%A2 �sfeI~8w� L7I+|w!q] J/F-%d $˾ᬚB/Nב߉blw@+Sg?y n\q_pc+._꣚s{?iÏ*W|nr*3rn_][ny:)`Іõ|d1Xk i\j nya@η3@5te;zTvzկ^~: ӏP(ظq�;w 1vy RݧGct'{sznŊ'qg3p.�\`0C\4u0~̦7s4E0:R$Vem;|x/ÚόY~gяޭ(b�֮ ( �STψ3*ǭT3`!6+C!?ßlj'.h/x~<t_o߸»=~-q}h!V8I3K=k<E 0SgG _;jpN-# ֩mmi%'W.G5m''o"sҥ3pe𓟜s7W<O:Ť_ n_B~@ٳqukWx oч;24xfYUػ[9vp5ȯ0,tssͭݯOgE~*]eFwYxO|T͛s/⦛|`@t4AWKp*0^Wiop&Q  L8"CYflE~6:\u2cc|i�pS{Q ێ?V\qIcқ�NPZ3ilsx_\C~p@~kue_8l6+ ;?qm|7ܰ9/' ϞCOϳ(Kɨ�J Z䮇{/|-lAe*(*)Qv?V%Kf`ƌ,36<ڎ%L#mƛo[>{7i,[vF_K.Y{} ۶ e˟5׼ͦO,cە�z7~R+PXoD lْk�@ ޑQ=mmi* WYm"b|\J˴ilڀu#0g7j7144 pa7֯߇%U5;Fq:h�3tX!)cxXiۣ ; ȩi%-#}umy==Kڹ;4ȀI+:mN[l~޻ >xE;8U~U(0,z@\엶ਧgI ͫ˞]_CKK O8fׂ  4H)Pm=fN�am^ۇKgNkxs@fu9-c�<󱹗A-$Ooa%fa@-'[oY`~)79%뎏 x]8YdDdžKTVmf/}.L;ʕQ.8Yd$@fGDx,i,ΒƋ@0{ڐ[^�']XfF*`~ H�4v?o?z^H{8 vPH?ӛ\ ORndFSraA/3=�Xp&� Rk۹�q*A'`7K1nۥRq㓟W3r�_kxl \k�oLuS'AJePwx%qꩋ e�|sϛz)qdL `Ϗ=OjZ$cxe]${]_i|##eLLm[;vXN@HG Ànz~ÓOnSOgLg[=0}zGa'�Y"+p� mg =f%]7ݹ: W]uF{3J87TXai꯿ee)MZ "a {GϫOb7~v ]n85zI ˗E]&!3'Q20.R7l~I՟um[}ۨP|�D1�aT%:<jizz|<~F~N LJDA)grߍGgmyy,E Hǩ"N/IT=Nۣ^%@`]eOo\4n2?'H�"@B'pkc{E`Iҹ `͢-vUyӺ4QQ4E�0 Eo[UA$ށDEaIbn uil͍ޯ{[?E? �к:j8 Av2g݇gW#Ai? *YQ1ٛQ�a<33  d ^�X�ġBX?kٚ6ߩ//$Ã�B, ScDO8%"=4B`^wAkd!{x+F%À �cwzѼtq\p޶p`Q!~w9=zFH/ 7[,VeHZN p!�G5Avك5 XIisd4: P <L6\/\p}&B~3K{(@D#Մ. ax\T�'©cB{ިuB~!`&�`ٻA�! >m�K SYz,4Bݵoաs_ P&:3�.7`^_Čfd'Yg3e A xة0,5p{HoYK=ʹ�((Q��i2P&20Fc&FgFьfR;h �7Àll^Y|6ߝeƮQG B|3A@O>[y"Bh�mɪ xz(ˢw}gyv�?HKf_~%rO>NSO|_#~*8EQ,U�PL�3a@e!Qd$ < \QL=\C �3 BxY,I$O41m}jryN T*U X, E�Pwz8!v"?(~L0H @sE�^$DusT| <s(Ks&ruP@u @cD]=aif4;z~Ts=kjvy. EQUN~Y,ɐd HL�&Q8p?˲bx|CCC@&EK'@*| <pjx4CoZl8Gf�Mxպ0$Ud TNɤdښEkk--hiiA:qV(K(J(P(! r!H|u�(@l@#~:�'3<i1Y M}z#D Qq ŲYk6<=iAkk RN, ZC*@(J((066<12<xW_|ɍt(0wN ?u@_鹕$a˷[MԵABC `P~3$? aAP/{WVmw"�j|+_:T*% GGGUOLLHmy;7pӟP'?=oH~@NlD'#{߁i^EPx�'@!JRɀ(J_xKw߫P_D=ϒ"׃#WM|'RAE0/eVչ/CDU'=D#W*BᑇV}gE(^&.DE(=P""�C{1ث>#A k`G~Zr!CX=.Ww秇,no24f萈:zGkPܩN/T(h#Wɿ?o۶m+�ܦmD3aGyc 38#]'=8  #ϡщ ]w�}p99~!tfF@? �P"lJRs!a87 0 $0̗f~�di0VEmGтF!(y/} �W'C!op/K�(>@�:a&#XsFe8E\zFQwDU �E;>tϯ1D__vn Q(=~< 0yloOZa3h%�XiO?QA辡A˛7[o.('~: #�L8?Dh(hiia(Om\?3&�I_yBQ{=xU1zuWj=?J=4%IB&,o~788}<{W3{_? LǏ=L�:.] {[YSVɴXޯ?4~o>sk42ޟ hƶ0S4Q�mT\ D 7ګJO@ V0^쒩I{ p�0?($-kxU\2G߇ݻzz y睭r Kzd.8 ~>K$2ėhG?߆yIc\ڻo>޽s7z{{AI=<}W</ b@6UW/uJ(7|^8؁fG_3s@ɤ-`'{Ŏ޸;3<<<'xU0/ӁMn|lX%D@!Ymdж(f,=B~*7?{`r-?,9(6?C!?P0z*Qs+OJWEki>FqJ~ROv=zͿ@�7|YD}ϟJ "2<HunQuKf38ɃD^?7(<mp>Jyrصk7y{wu׍_BXN5+ڑh#DY;n'?9�?}'Q HNz=]/Uu R\#czh]n(~\�@,k<o:nS2X}7;gu>̴4zJ.Iq�]jtwwG% ubҫvC=�#PT~]{€;Wv $ J 'vB5:?SiBǑ%* j0Z k28]k U }_z<"#? (2SM fmy;}(<u4A(XI$˴jzyttt1+~-oo_ǟ?2>dF_<h�)^ٚ z#�쮙}ՙY^Aػ2tZ RWN r^a/R& #?jգZnh{~z8�s̑eYd2Lm2 3:,ZiT7}˯@8D $g @wwHHŢBڪܰaû0ܫ/lY1 :Ϩy_3,α\3Էf[*5��5fi!InF_YGڪ}yǝܺuNoKo3AGq,fLٳ1slf+Fyr}7lvXnWQ}Ycqfkf<iӺ5j=occc׿CCnu$/6j�===hmmugg?Μ9]E ;wRY֠!ceYgwgOU[q:;;:3V08[BCcOө Oܳ{AwwwM g._+fإ"Y>iTQd6`shXӦuSqz_0r9esW]VЮCo|^:W򩔜iiA6hRttu~ (UЈU{iԩZ@&ϣZKYotl׿C/V<~'?BXrtٍF.c<QiisP.P*1^T*}A<,X[srkz憧Bkt@9tbl6۰d7Yp`�{ϯuPOHO(3\ y7ϗE/J(K(Gal c(kBVY=Nn<N}cV(oa""qĒڲ~-144$oߺnn('sCޅ}ccseaӏ=Xѱ*� JK%SPc~N72FFF�@~ qo5flԏHG4^2[V \8<]{h|^~g+n喇'|MA~�%mBdQK֫qq/JbT,v@8R8CT�`4f_AV,b||\^ؘW~|2lIzgy+Ȳd$s|<+|8iXUN*C[ ۷o]Vܼy!-[s7 6loڴ)^,A)lIey W@} �x`"**By"`?&&&xK6 >�ÖHAGXfMLjZ;<oZ1Si@dE&Ūj`?JrycO|coN~@ $ f5b 2ljJ0B> j{Wvh#@[4 D�4 藊l"/RGCt`Y:JA*ݍ}Dy~/nܸU{P_ӒH@3  M!E^dȲM6aᄑ~˳{{{N=4!D�4m)By*ǩKYn] zyaFAAd]vaw�Yӟ^zv.Fާwmz�h&PBP gYTU-Czxtd^ɐ>6fk#�_d$`޽ص{'ʕ?=obbCnR[$y@4*WRNN7OJIDv6|T'ˬ@ulllƍo]qъ_?R@L�h @GZ@ 5Y-D= o]ғsdsΦ aEsuS:i($si$�Вv !@hgS �Z|Ϡ-LuЂO҆>/A;>3$90P;OPOzĴS` B}p&<[@$ 7h Z˺|&%/HQ'=/�- RdqE*68/!;esS�hB3 /Ѧ|:7U!ۜ'H^GZ#!z $H k~ V���%tEXtdate:create�2019-02-09T23:34:22+01:00v ���%tEXtdate:modify�2019-02-09T23:31:07+01:00[Q+����IENDB`(���������� �������� �� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������������������������� ��� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%���(���(���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���'���&���"������������ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������&���2���=���C���F���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���G���F���E���B���?���8���0���&��������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%���8���K���Y���b���g���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���h���g���e���`���Z���P���C���7���'��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������0���J���1��� ������ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������9���X ;���#������ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#���@���bB���(������ ���������������������������������������������������������������������������������������������������������������������fff```]]] bbb UUUUUUUUUffffffffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxIII$$$2Oq$$$M���*������ �������������������������������������������������������������������������������������������������������������2qqi>>;/.-!! ...X���,������ ������������������������������������������������������������������������������������������������������/db^YXSUURGGE775"""###$$$%%%%%%&&&'''((()))******+++,,,------...//////000000000000111111111111111222222222222222222222333333333333333333222///***$$$777a���.�������������������������������������������������������������������������������������������������������fffcc]|QPL[[VHHGAAABBBDDDFFFHHHJJJLLLNNNPPPRRRTTTVVVWWWYYY[[[]]]^^^```bbbcccdddeeefffgggggghhhhhhiiijjjjjjkkkkkkkkklllllllllmmmmmmmmmmmmmmmmmmjjjddd[[[NNNCECk���/���������������������������������������������������������������������������������������������������```-,*DDACCB>>>AAACCCDDDFFFHHHJJJLLLNNNOOOQQQSSSUUUWWWYYYZZZ[[[]]]___```bbbcccddddddeeeffffffgggggghhhhhhiiiiiijjjjjjkkkkkkkkkkkkkkkkkkllllllhhhcccYYYLLLJJJy���0�����������������������������������������������������������������������������������������������]]] 11/===???AAABBBDDDDDDEEEFFFHHHIIIKKKMMMOOOPPPRRRSSSUUUWWWXXXZZZ[[[\\\]]]^^^______`````````aaaaaabbbbbbccccccdddddddddeeeeeeeeeeeeeeeeeeccc]]]TTTHHHQSS���1�������������������������������������������������������������������������������������������NNN %%%===???AAACCCBBBAAA@@@@@@@@@BBBCCCEEEEEEGGGHHHJJJKKKMMMMMMOOOPPPQQQRRRRRRSSSSSSSSSTTTUUUUUUUUUUUUVVVVVVWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXVVVQQQIII???WWW���4���������������������������������������������������������������������������������������UUU""">>>@@@AAAAAA@@@<<<999777666666777888999:::;;;<<<===>>>???@@@@@@AAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFDDDAAA:::111\]]���5���!��������������������������������������������������������������������������������UUU""">>>@@@AAAAAA>>>777111---*********+++,,,,,,------......///000000000000111111111111111111222222222222222333333333333333333333333333333222///***$$$bcc���8���"����������������������������������������������������������������������������UUU###???AAABBB@@@;;;777jkk���9���"������������������������������������������������������������������������UUU$$#???AAAAAA@@@:::555psq=���$������ ��������������������������������������������������������������UUU%%%@@@BBBBBB@@@999444wyxB���%������ ����������������������������������������������������������UUU%%%@@@BBBBBB@@@999555}~J���&������ ������������������������������������������������������UUU''&@@@CCCCCCAAA:::555///V���(������ ��������������������������������������������������UUU'''AAACCCCCCAAA:::555BBBd���'������ ����������������������������������������������UUU'''AAACCCCCCBBB:::555RTTp���)������ ������������������������������������������UUU(('BBBDDDDDDBBB:::555cee���(������ �������������������������������������UUU)))BBBDDDDDDBBB;;;666tvv���'������ ���������������������������������UUU)))BBBDDDEEEBBB;;;666���'������ �����������������������������UUU*))CCCEEEEEEBBB;;;666���$������ ��������������������������UUU++*CCCEEEEEECCC<<<666���!�����������������������������UUU++*CCCFFFFFFCCC<<<666���1�����������������������������UUU+++DDDFFFFFFCCC===777���@���&��������������������������UUU,,,DDDFFFFFFDDD===777���N���/������ ��������������������UUU,,,DDDGGGGGGDDD===777���X���7������ ��������������������UUU--,EEEGGGGGGDDD===777���]���<���!��� ��������������������UUU---EEEGGGGGGEEE===777���a���?���#�����������������������UUU---EEEHHHHHHEEE===777���b���?���#�����������������������UUU..-FFFHHHHHHEEE>>>777���b���?���$�����������������������UUU..-FFFHHHHHHFFF>>>777���b���?���$�����������������������UUU..-FFFHHHIIIFFF>>>777���b���?���$�����������������������UUU 00/FFFIIIIIIFFF>>>888���b���?���$�����������������������UUU 00/GGGIIIIIIFFF???888���b���?���$�����������������������UUU 00/GGGIIIIIIGGG???888���b���?���$�����������������������UUU 000GGGIIIJJJGGG???888���b���?���$�����������������������UUU 000GGGJJJJJJGGG???888���b���?���$�����������������������UUU 000HHHJJJJJJGGG???888̝†††††††††††س���b���?���$�����������������������UUU 000HHHJJJJJJHHH???888ڸ͟""����uuկڸڸڸڸԫΟKK��AA���b���?���$�����������������������UUU 000HHHJJJKKKHHH???999SS����00���b���?���$�����������������������UUU!! 000HHHKKKKKKHHH???999TT���� ���b���?���$�����������������������UUU! 00/HHHKKKKKKHHH@@@999TT����bb���b���?���$�����������������������fff!! 111IIIKKKKKKHHH@@@999TT����Ϣ͝���b���?���$�����������������������fff!! 111IIIKKKKKKHHH@@@999TS����uu���b���?���$�����������������������fff 111IIIKKKLLLHHH@@@999Ү::00## ! !!!!''33\\SS����>> FF  66���b���?���$�����������������������fff 221IIIKKKLLLHHH@@@999ED����ִSS����Ϣۺʗ ll����~~���b���?���$�����������������������fff 111IIIKKKLLLHHH@@@999ss����SS����uuۺ))))��PP���b���?���$�����������������������fff 111IIILLLLLLHHHAAA999uu����SS����͞ ۺܽhhii�����b���?���$�����������������������fff 110IIILLLLLLHHHAAA999ut����SS����,+1111**����ۺ{{Ӫְܻ���b���?���$�����������������������fff!!!111IIILLLLLLIIIAAA999tt����SS����ڹKK��ww���b���?���$�����������������������fff!!!111JJJLLLLLLIIIAAA999tt����SR����ڹLLEE��55���b���?���$�����������������������fff!! 110JJJLLLLLLIIIAAA999tt����RR����ϣٸϢċ�� ���b���?���$�����������������������fff 000JJJLLLLLLIIIAAA999tt����RR����[[aa��͞���b���?���$�����������������������fff! 100JJJLLLMMMIIIAAA:::ts����RR����OOFF,,��SS���b���?���$�����������������������fff!! 110JJJLLLMMMIIIAAA:::ts����RR����]]�� ���b���?���$�����������������������fff 00/JJJLLLMMMIIIAAA:::ss����RR����yyϤ�����b���?���$�����������������������fff///JJJLLLMMMIIIAAA:::ss����RR����ȕ�����b���?���$�����������������������fff///JJJLLLMMMIIIAAA:::ss����<<����׸{z��԰::��>>CC���b���?���$�����������������������fff///JJJLLLMMMIIIAAA:::sr����LK ! ! !!!!!!!!!!||��Чpp���b���?���$�����������������������fff///JJJLLLMMMIIIAAA:::Ըsr����]\��Σbbԯ���b���?���$�����������������������fff///JJJLLLMMMIIIAAA:::rqrr����gg ��cc<<���b���?���$�����������������������fff///JJJLLLMMMIIIAAA:::XWrr����yyUU��((OO���b���?���$�����������������������fff///JJJLLLMMMIIIAAA:::/.rr����ĒȘ��Ì���b���?���$�����������������������fff///JJJLLLMMMIIIAAA:::ʥoo����00ɞ ��22ڽ���b���?���$�����������������������fff///JJJLLLMMMIIIAAA:::,+baƚӷջּּ??����ǚؾؾؾѮ..��Ӳ++��%% ���b���?���$�����������������������fff000JJJLLLMMMIIIAAA:::tsMMMMNMNMNNNNNNNNNNONONOOOOOOOOOOOOOOqq55ͣ!!**���b���?���$�����������������������fff 000JJJLLLLLLIIIAAA:::���b���?���$�����������������������fff 000JJJLLLLLLIIIAAA999���b���?���$�����������������������fff 000JJJLLLLLLIIIAAA999���b���?���$�����������������������fff 000JJJLLLLLLIIIAAA999���b���?���$�����������������������fff 111IIILLLLLLHHHAAA999���b���?���$�����������������������fff111IIILLLLLLHHHAAA999���b���?���$�����������������������fff 111IIILLLLLLHHHAAA999���b���?���$�����������������������fff 111IIIKKKLLLHHH@@@999���b���?���$�����������������������fff 111IIIKKKLLLHHH@@@999���b���?���$�����������������������fff 222IIIKKKKKKHHH@@@999���b���?���$�����������������������fff 333IIIKKKKKKHHH@@@999���b���?���$�����������������������UUU 222HHHKKKKKKHHH@@@999���b���?���$�����������������������UUU 333HHHKKKKKKHHH???999���`���>���#�����������������������UUU 333HHHJJJKKKHHH???999���Z���:��� ��� ��������������������UUU 444HHHJJJJJJHHH???888���P���4������ ��������������������UUU 555HHHJJJJJJHHH???888���@���)��������������������������UUU!!!555GGGJJJJJJGGG???888$$$,,,222444555333&&& p���g���g���g���g���g���g���g���g���g���g���g���g���g���g���g���g���g���g���g���g���g���g���g���d���]���P���@���.�����������������������������UUU"""666GGGJJJJJJGGG???888***333:::===>>>;;;--- L���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���?���:���1���'��������� �����������������������UUU###666GGGIIIJJJGGG???888...888AAACCCCCCAAA333 .���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!��������������� ��������������������������UUU$$$666GGGIIIIIIGGG???888111<<<DDDFFFGGGEEE666###///��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� �����������������������������������UUU$$$777GGGIIIIIIFFF???888222===EEEHHHIIIGGG777$$$PPP��������������������������������������������������������������������������������������������������������������������UUU%%%888FFFIIIIIIFFF>>>888222===EEEHHHIIIFFF888%%%UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU%%%777FFFHHHHHHFFF>>>777222===EEEHHHHHHFFF777%%%UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU%%%777FFFHHHHHHEEE>>>777222===DDDHHHHHHFFF777%%%UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU&&&888EEEHHHHHHEEE===777222<<<DDDHHHHHHEEE888&&&UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU&&&888EEEGGGHHHEEE===777tttrrrrrrrrrrrrrrrrrrrrrsssssssssssssssttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvyyy111<<<DDDHHHGGGEEE888&&&UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU'''999EEEGGGGGGEEE===777111<<<DDDGGGGGGEEE999'''UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU(((999EEEGGGGGGDDD===777111;;;DDDGGGGGGDDD999(((UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU'''999DDDFFFGGGDDD===777111;;;DDDGGGFFFDDD999'''UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU'''888DDDFFFFFFCCC===777111;;;CCCFFFFFFDDD888'''UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU(((999DDDFFFFFFDDD<<<777111;;;CCCFFFFFFDDD999(((UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU(((999CCCEEEGGGDDD>>>888444===DDDFFFEEECCC999(((UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU(((999CCCEEEFFFEEE@@@<<<888@@@DDDFFFEEECCC:::(((UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU(((999BBBEEEFFFFFFCCCAAA===BBBFFFFFFEEEBBB:::(((UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU(((999BBBDDDEEEGGGFFFCCCAAA???>>>???@@@AAACCCDDDEEEFFFCCC<<<333(((***IIIHHHHHHFFFEEEDDDCCCAAA@@@>>>===>>>AAADDDEEEGGGEEEDDDCCC999(((UUU������������������������������������������������������������������������������������������������������������������������������������������������UUU)))999HHHDDDFFFGGGHHHHHHHHHHHHHHHJJJLLLMMMOOOPPPRRRTTTPPPIII===111333WWWVVVUUUTTTRRRPPPOOOMMMLLLJJJHHHHHHHHHGGGHHHGGGFFFDDDMMM999)))[[[������������������������������������������������������������������������������������������������������������������������������������������������bbb ***888eeeCCCFFFHHHIIIKKKLLLMMMNNNQQQSSSUUUWWWYYY[[[]]]ZZZRRRFFF888:::aaa```___]]][[[YYYWWWUUUSSSQQQNNNMMMLLLKKKIIIHHHFFFCCCiii888***NNN ������������������������������������������������������������������������������������������������������������������������������������������������]]] )))666CCCEEEGGGIIILLLNNNPPPRRRTTTVVVXXXZZZ\\\^^^```^^^WWWLLL>>>===eeedddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLIIIGGGEEECCC666)))]]] ������������������������������������������������������������������������������������������������������������������������������������������������```)))444mmmEEEGGGIIIKKKMMMOOOQQQSSSVVVXXXZZZ\\\^^^___^^^YYYOOOAAA???eeecccaaa___^^^\\\ZZZXXXVVVSSSQQQOOOMMMKKKIIIGGGEEEooo333***```������������������������������������������������������������������������������������������������������������������������������������������������fff333A111ZZZbbbGGGIIIKKKMMMOOOQQQSSSUUUWWWYYY[[[]]]______\\\SSSGGGDDDdddcccaaa___]]][[[YYYWWWUUUSSSQQQOOOMMMKKKIIIGGGdddWWW000555?fff������������������������������������������������������������������������������������������������������������������������������������������������UUUUUU 111999{{{YYYKKKLLLNNNPPPRRRTTTVVVXXXZZZ\\\^^^___]]]XXXOOOLLLdddbbb```^^^\\\ZZZXXXVVVTTTRRRPPPNNNLLLKKKZZZwww999000UUU ���������������������������������������������������������������������������������������������������������������������������������������������������UUUJJJ777@@@eeebbb???888JJJfff�������������������������������������������������������������������������������������������������������������������������������������������������������IIIUUU???EEEGGGFFFCCCBBB@@@>>><<<:::888999888999999::::::888666444222111111000000000000000888wumwumwumwumwumwumwumwumwumwumwumwumwumwum///000000000000000111111222333555:::;;;:::999999888999888:::<<<>>>@@@BBBCCCFFFGGGEEE>>>UUUIII������������������������������������������������������������������������������������������������������������������������������������������������������������UUUUUU IIIBFFF???<<<888444111---***'''&&&&&&&&&&&&%%%%%%%%%$$$###"""!!! !!! *** !!! !!!""""""$$$%%%%%%%%%&&&&&&&&&&&&'''***---111444888<<<???EEEGGGAUUU UUU�����������������������������������������������������������������������������������������������������������������������������������������������������������������������UUUfff```]]] bbb mmmffffffffffffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwNNN&&&6222pwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwffffffffffffffffffmmmbbb ]]] ```fffUUU������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ���)%%%g��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���)(((g��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���)***g��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���)***g��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���(...cÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���"999Z������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������nnnX���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������)E[hnnnnnnnnnnnnnnnnnnnnh[������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������)���6���?���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���A���?���6��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?���������������������������������������������������������������������������������?�����������������������������������������������������������������������������������������������������������?�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���@������� ������@��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#���+���,���,���,���,���,���,���,���,���,���,���,���,���,���,���,���,���*���$������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������8���t���������������������������������������������������������|���a���7��������������������������������������������������������������������������������������������������������������������������������������������������������������������Fadb���>�����������������������������������������������������������������������������������������������������������������������������������������������������������������?hmk���B�������������������������������������������������������MJH{@?<������������������������������������������������������������������qts���G������������������������������������������������������VUS@@@KKKPPPTTTXXX\\\```eeehhhlllnnnoooqqqrrrssstttuuuvvvvvvwwwwwwuuuOOOz}|���M�����������������������������������������������������BBBBBBFFFJJJNNNRRRVVVZZZ]]]aaaeeeeeegggiiiiiikkklllmmmmmmnnnnnnnnnmmmIII���R�������������������������������������������������DDECCCBBB???BBBEEEHHHKKKNNNOOORRRSSSTTTUUUVVVWWWXXXXXXYYYYYYZZZZZZYYY666���X�������������������������������������������EEECCC'''������a��� �����������������������������������FFFCCC k���#�������������������������������GGGDDD! w���%���������������������������HHHDDD466���'��� ��������������������IIIEEEKML���(�������������������HHHFFFuuuxxxzz{]a`������������������ IIIGGG���%��������������� JJJGGG���,��������������� JJJHHH���3��������������� KKKHHH���4��������������� LLLIII���4��������������� LLLJJJ���4��������������� LMMJJJ���4���������������MMMKKK���4���������������MMMKKK���4���������������NNNKKK���4���������������NNNLLL���4���������������NNNLLL���4���������������OOOMMM���4���������������OOOMMM���4��������������� OOOMMM���4��������������� OOOMMM���4��������������� OOQMMM���4��������������� OOOMMM���4��������������� QQQNNN���4��������������� OOOMMM���4��������������� QQQMMM���4��������������� OOOMMM���4��������������� OOOMMM���4��������������� OOOMMM���4���������������OOOMMM���4���������������OOOLLL���4���������������NNNLLL���4���������������MMMLLL���4���������������MMMKKK���2���������������LLLKKK���%���������������LLLJJJ���)))+++������4���@���@���@���@���@���@���@���@���@���@���@���?���- ���������������KKKJJJIIIKKK��������������������������������������������������������������KKKIIIIIIKKK����������������������������������������������������������������������������JJJIIIHHHJJJ����������������������������������������������������������������������������JJJHHHccc]]]]]]^^^^^^^^^^^^_________`````````aaa```aaabbbbbbbbbccccccccciiiHHHJJJ����������������������������������������������������������������������������HHHHHHGGGHHH����������������������������������������������������������������������������HHHGGGGGGHHH����������������������������������������������������������������������������GGGFFFFFFGGG����������������������������������������������������������������������������FFFFFF{{{ FFFFFF���������������������������������������������������������������������������� GGGGGGFFFIII����������������������������������������������������������������������������___EEEGGG666999===@@@DDDIII!!!"""IIIDDD@@@===999666GGGEEEaaa����������������������������������������������������������������������������}}}^^^FFFGGGKKKOOOSSSWWW\\\777333]]]WWWSSSOOOKKKGGGFFF___}}}������������������������������������������������������������������������!!!�'''444444'''!!!�������������������������������������������������������������������������333�888===000$$$ ���������������vtkywoywoywoywoywovtk��������������� $$$000===888333���������������������������������������������������������������������������������AAA��������������������������������������������������������=���5����������������������������������������������������AAA�����������������������������������������������������������������������������������������������������������������������������������������������I���A������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������H���A������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=���4�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���4���@���@���@���@���@���@���@���@���@���@���@���4 ������������������������������������������������������������������������������������������������������������������������������������������������������������?�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���0���`���� ������$���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� K���g���l���l���l���l���l���l���l���l���l���l���l���l���_���G���/��� ��������������������������������������������������������������������������������������������������������������������������kttt���E��� ��������������������������������������������zwoNSRL872984983762762762761651651651651651651651651540kmlxun&����������������������������������������~wQPOCCDIIIOOOUUVYY[```ddehhijjjlllmmnooopppppqqqqooo>>?~('$f��������������������������������������21.???DDDKKKPPPVVVZZZ___dddgggiiijjjlllmmmnnnoooooonnn===xzy���T����������������������������������42-AAA888 !!!###""""""############���[������������������������������0/+CCC���b��������������������������-,)DDDj�������������������**'EEEs!���������������('$FFG&&%{�����������&%"GHH���<�����������## HHJ���T�����������! KKK���^�����������KKK���^�����������MMM���^�����������MMM���^�����������NNN���^�����������OOO���^�����������OOO���^�����������OOO���^�����������PPP���^�����������PPP���^����������� QQQ���^����������� QQQ���^����������� QQQ���^����������� QQQ���^����������� PPP���^�����������PPP���^�����������PPP���^�����������OOO���^�����������OOO���^�����������NNN���^�����������MMM���L�����������LLL 000������&���&���&���&���&���&���&���&���" ������������KKK$$$LLL��������������������������������������������������������KKKvvvtttuuuvvvvvvvvvwwwxxxxxxyyyyyyyyyyyyyyyzzzzzz{{{{{{###JJJ��������������������������������������������������������HHH"""III �������������������������������������������������������� GGG"""HHH!!!��������������������������������������������������������"""GGG!!!GGG"""��������������������������������������������������������"""KKK+++000MMM###��������������������������������������������������������񃃃>>>999>>>DDDKKK+++###KKKDDD>>>999>>>��������������������������������������������������������(((___```(((����������������������������������������������������###�����<<<000 ������������y||||y������������ 000<<<����###�����������������������������������������������������888��������������������������������������������"���#����������������������������������������999��������������������������������������������������������������������������������������������������������/���0���������������������������������������������������������������������������������������������������������������������������������������������������'���(������������������������������������������������������������������������������������������������������������������������������������������������#%(���&���.���.���.���.���.���.���.���.���&!#'���������������������������������������������������������������������������������������������������������������?�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(��� ���@���� �������� �� ����������***����������������������������������������������������/���H���I���I���I���I���I���I���I���I���?���#�������������������������������>>=__\111222222111111111000000000111 ���������������������������^^[CCBCCCKKKSSS[[[bbbhhhkkkllloooppp<<< u ��������������������+++<<<???***,,,111666888:::;;;<<<???u����������������(((>>>+++ ���������������$$$AAA+++011����������� BBB,,,FHG�������DDD...���D����EEE...���Z����GGG///���[����HHH000���[����HHH111���[����III111���[����III333���[����III444���[���� III444���[����###III444���[����$$$III444���[����%%%III333���[����'''HHH111���[����***GGG111���[����...FFF000���[����222EEE///���[����888CCC...lllqqqqqqqqqssssssbbb===>>>>>>>>>???>>>���T���^���^���^���]-����:::AAA---...???666����������������������������<<<@@@000...===888����������������������������999iii===333;;;)))777000;;;ggg555����������������������������===󀀀YYY``_``_YYY888����������������������������AAA@666&&& ���������rqktsnrqk������ ***:::>>>@������������������������������������������������������������������!�����������������������������������������������������������������������������������������������'Ŀ���,��������������������������������������������������������������������������������������������:::���*���+���+���+���+���+���+999���������������������������������������������������������?������������������������������������������������������������������?��?��?��?��????(������,���� ������� �� ����������.//8444844484448444844483338i###r"""p$$$n$$$m$$$j%%%i&&&g662Q�������������mlhOOM222222111000000111z{zq����������������000777@@@IIISSS[[[___aaa888~���Y������������&&&666���Z��������!!!(((���\����+++���;---���T...���Q///���Q000���Q000���Q000���Q///���Q///���Q---���Q ,,,���Q!!!***��� ���1���4���/���+���'!!!111###������������������������"""JJJRRR---"""eee```***�������������������������,,,<<< ���&&&:::000(((���������������������)))����������������4���S��� ��������AAA�����������������������������������������H���<���@���@���@���@���?D�����������������������������������������<���<������ ��������������������������������������������������������������(������ ���� �������� �� �������������������������������������,���o���n���n���n���n���������������mmh...222111000111555���(��������'''999111>>>EEEIII(((LML���1����###fgf���1!!!���p$$$���o%%%���o&&&���o&&&���o%%%���o%%%���o""""""���a���j���jB###&&&"""����������������###KKKJJJ%%%����������������%%%A::: ;;;+++E�������������������������������J���O�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/exit.png����������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015300� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/exit.png���������������������������������������������������������������������0000644�0001750�0000144�00000003112�15104461330�017261� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���gAMA�� a���bKGD������ pHYs�� �� )I���tIME �CJ��IDATxŗmϙ{U^UR]hZ &,@# ZOY PZRI h"RCT$mn\5uwwvWo{̜;slB syM5o2pp}jJ5vէ3{Jf5֠528hkA;hu6�8s~޺c;MlM14�&dZtx!˜@Y7x-ۙa #<EalJ!J%R(Ar{厣J Q ]MU_d ]�غs><G֧Q qr9Q�n螽n%ZT+-]in[ƌy- pE&ӔX )h_};�3SI/g}0&-$pwSs%JlZ3)nUIk7"mam_#խnz6<&鉶+E3Dq@G?� C& %nz3c \,p�Z�>o<PH褘ː?GyɅ{�O<ǹ矤ϹP 4^Dm?:~9c>}w/O.D"k ^OS ]q@SF3L ڬBH<$\1?[m.\/GDW]ی^&neW{y5 }OѮvP_dڗٓ"e&ۇ/|l -(PTO])b6SpX(Q1$fn;5ZtE^-B^%�".\YSWŗOfRݬy i�߅+=.P;R1t>PI'(2#_-@7gf‡v,m9"a+[T\u\!p湊�?ڽ/Tj\ElJO7| P.eU/-@]:Lk__5~1 ^ɛW |կ�jy{G MB mA,p�+ϓ<.M?�o0?DhlYBjFv) wFF~Tg{,WR~I"m#\Y1)#,{s/D+�N] b2t9|f*S4,aM4,]啢@>>< 0nSj8vJwӊ6:h_709| u⭊z"?OϧG;6Ja"ETXq,>r;sEq1۵IJEͱۆVG B)0nswl|IT;Q@}Ӛ]c;5}v{]֔ ˣf'=^Ny<\^),����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/cb2bib128.png�����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015705� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/cb2bib128.png����������������������������������������������������������������0000644�0001750�0000144�00000016403�15104461330�017675� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���bKGD������ pHYs�� �� B(x���tIME y(^W��IDATx]yp՝{ftdY-ف H1`08 $8 c݊!GR[ N`5 $PaCpŠvlɲd,H3czzigzzx~{ߣPX@1r�ӕm �H��+^TT4WjY\GQTe}EI8R vߑ=Z(@*@cc#Dt!Θ � FKbX$;Չw(A|x<GQ֞Չ֞A{  ��ڬ7>>~B�I @Ӵ:C\DQ4,H:v/_NWVV1(2~˲ZYY&{ 9rD�,c`h(OThB!G6:HF20b CꫯJ�'@}}=}a@OODQ\ɲU(P,DQيmZ]�(Jt@$d׭[7JQT>ȽC>Ҭ0 Km}>_a@ Mָ|r /륂%@}}=/++<yӁ@"@ �I2VRB%WRzbUEQĉ)'5T-&$i~?YeYM+EQ ,(j$I+_={ z~I`D�>*)))YTWWŋ ÀeYph%qX,+VX˲ؼy.(_aiV۫ݶqFꪘJ4� a޽cǾӳ`ƌ_V\\PX|9 000EK, 7܀|)Z)$Iyx7tMq(r쟭jFGuV̙3GWVYQQQK.+WĖ-[cǎ ߫ �tSSe�ϟ?^{-ykg%2<7"@> v H$\UeB!hmmŭފN~s}ee$[' �1Xle0j1OEm?|O ��i3-]]]ؼy3>ϣF8�_PEpMӈbhnnN$)UKkq`Г{?$e<^�kU60 dYZ) ~?MQY4M%JD@%[atWQ<8q S 갶Kʯњ1DhYK)BOOO0Y4MC,x<e,XE,KV詷D-DB^*884M0\j(ǧ,8p\ȳɠުC\ICepWkD%I¶ml]`dd8vڦlܽދTI  �UG@ر1a#fJ  all~y @T ](V�rD WD޹466:i'vI+@Ĩvi: Ν;% ԔuA]fv9y2)Il;8)߂S�mg6UgT!s^SsA+94iu];%@qq1JKK,JJJ\]]GeVB`0 ?~###Fdꤑ$r fΜڜvS"pC,0k\FdŨČ3\)S hF0DYYjkk]#Z.5ze8 ׂ?=xIW�3릥 нc&L{$ڭ=JW9 w"\d[ }x&[ q\F1iS!:::��T+.N-R:u亐AHMLrOUp"")[h� qDR$B< Fޓcccg6$8r(-nfJ$FD"Fb)Kj)))IQ~OeY�AUɧ�"�F(1 @T�7r^DYE8ŋ'5ʶ[k!ר\AQ (^B�%'rK7|7ڗ{^czE~o\Q6WS/s_Yw c9!Tk*A�S[#p $e.vH`L #r!BV @9vn|n˽'yK͛' 2L;m}l+vH=^-4+AI8p$e{hz~>3 t�l#\PHx3f[ɽqȦ�|Y` UPw[\Ht Cp)!נoX!GȚ�n|!|Zt;rOyE�NpB=?o36+Xe@HN)CT�j`!3 @QY 4@Y^X hүw}v avO*&?N_z G[IAXڿU8 P_ vs $CJKX|B$,t#B CC%Ԕwc֬R[Ï | ho k0o^9|AG�s+SFYK/5!}ϧq9@_�Ep-oSi ]rC}4Ē%/<xS(/_CO2Q[T6n\eH=EQgSa|Ӯwλ.S1k`@ix%/`|[o}-2}(//ۛŋkL݂ 2`Vu |*z0ghB ?DoJ}W#?`:|:@q :t*?u&vۅX|ymڹVl-dX0أ2Mgfcx8Zе",_~ w1^؃wo?VĐ `9+]vL'PSSoږֲ繵eIڎP�e#xc<|p~AѴkT o.7R:+hZӫ%�R5ј` xX(TL oOcÆzk=Oc젹kT�{ 7d͛9slmo ԩv챬=o|7#^V=ފ+.Emm9z(M+²e % \ɉ 2�%SK/pMkWrVm\d.(֣#xXvFGYtvOVe\󡇮Ķm]سW<Ws8/|�S!&0k0_'ԓRGu�]:JlpO/B_߸;h7;vtc^@I;8@L@m�[)`";( <o| ³ϞkLcd$1 \(1Q V8E^�%w7.@oo$Cշ=;Ap睛16Ʀjc6V�2&ڟ&*@�Eᜳ!fT&;o߿㢋fs 78U&evɴ~,_/4,-sttB4 ?x䑫P]]oDQM//r4ysp)V&ylZֵ '5ץ7/7n:b61=v �ԩ8<=L@9 ~GǨ.1f*͸ﮮ0^y>xeի//@$aŊ7󹍼jY ̥M Jb+ؿ3@eG[?|1As_ŬYhlǣ5wb>B D8 T@Ͽo|smH2Sov? +W~*@{LMM9}W|K _8're7܈s%ʲ,˽Io |͵x̛7 (H(oYgn qM>WrVZgiw@UU.N `1{%ING�I3 r~E']<uc͚Xp&"Xy\JVk:'~_.F@_\{o cɒ?{ 1JJ|�7l/3vË%7~�:gԓ xD"DQF�[$ _6rxuuQZ>ҥAG(FG1,+m۾s>F/~TV7 /Duu)~Kgʁ�B#l(,]Z֥d,p+9_ZGem9+p vߴ7oGyOێB $io[%s³nޅϯ2bAI)Cn[ja oB�~oo/| :HuZ|vbw@Sƣ/GF��6 u$n,ַ^ôiE(K 'x W0Hi n DHu+碤$=D8s c>lz </knTFr=Wb־ Y~__'NDq=eVƒ%d<@>�}n>"*lk{:pFnSl %h)è)^tE VH)tB`DUЫ�;kȖS^<n{=*+1@!4VoVu֫X@5d rd;T@wp"k Mj NߋX?jFO*Ȯuۈܖ~7϶fHE}>'RA 7Uֹ4„ǎĎջdnoW޵U�e lka'cwq ?V@^ys-Nݪ&YQ|H̡$ 9Ա ^ؑջJN}hOmӰB�2`Jɴ|C|/#$)cbl=U KCrX& -LNZ 0Wn4M T H0jz<$CkjpճWA!χx<0�o�S+9^&kW 9-.^!*E | "0 x<>m; c�2 KS�욋|e6q<&-]HUN4E|(**G @)Sӏb�oG$2~$ &1 P R4VzQ[E#<qjkkmpX,Qv ~|!K@}7PhKC>RL'C"@"p~28h ! Ǐ__?4"$',*tV!H$`Y6 `Yh{q| /o &A[Hyn4ht###AsK=?~SqN'q@:lhU <j ~fH$0>>avC{﾿j۶m;1\zXx<mVSDF HD"HdӍ^}8c $z; :'"!ɜx<H$SC[*$Y ȫ+rUm:H;uG/| C'Չxvs(O>SM IR`�"O/uɮE1y@@{894Ǐq߾g=Db@tT@�8ihɵi`AOIAEƵk`FqLےi�EQ` K/ i Vm.*ڒ8C[[[AY}$H1s)O @ٳ6l| ILoI�# i:ujn&v݁~OYE<=%DM �.x<81#-ؽs_~NzQK�e%a0LZ[�MӐe~>/jנ_ V*aIR5ߟ*%Aqq1|>_*?Џfp3/F#Hg!***b4SD{T,CIq\}eeJF0F?ЇfٴW� cc-`F^94j%$)t5ZN`''IgATj*,4Mc lh##ɼ~KK~e˖)G�0#(nm3A^j4Z*`Fw"|2dv)ttpaw޲e�C*sPjjj/zkh,,X^I1::!]6u+K6778e҇$Y?$I0zz{pH3ګojhhhRY>ʜ.FI5wvΉY֭`S£cUH l'b%ڷq6yW Y:88xC8FwO7ڎO/sCJj7v; 72T}}=pLj~:tVQH$2//o5Ҧ$L'uXũSho?gc |M %/j ,��,eyd<9,]w䯟x~%DG[$%@bV9ߍ*u0 ڎ?; Eh=C�b+(rY0h{To'A\bDޡ裗QBYI*"FGGc~3Ԯ�&x*T)4�%�̲J88DH_'Ȋ\JaRJAb0H�Yu =y)�PX)'%"*ު*m|z_DE Obpz Ye^ZDž�*gtQR����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/connect_established.png�������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020327� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/connect_established.png������������������������������������������������������0000644�0001750�0000144�00000004252�15104461330�022316� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����gAMA��|Q��� cHRM��z%��������u0��`��:��o_F�� IDATxb?@b�bh�+++n\ 6 �,5PVVKKHHHd�1;� (W"::zŋ\mm???GgUWW_LL�D:::ӦM{p&Mr(e@l ""Rɓabb2Gv�@�e1_DD]v;zW@)KP-t j�@ĵ-0~ϟ9s={r9(%b\VVVB&&&|@�ŝ@*�\]]ہAjwD.5oƍN>ժU| 8ܹsnݹs}}ؽ{G'Wz90�@(lٲ]]]GUUճ&((e700POʋ>ׯ_'O{Ǐ:u0�@ * rpZ �aaa ,985EHsUTTT޼yï_#߿O>s޽ Y򿲲r�w󲚚lll.9`LA 0M*uǾ~ ߿` ۷o_|-r�@��,q)))SSSA 쫹 `z*e�PI_f`x"8A ?~`89⿱}}@@� $L`-nnFFFRfFD`J^8eʔ322WVVv֭Ϟ= sP�E !o޼XԜ4��"$꺮_֭[Aĸv(jhh_TTv PO`F) @�  ɓ'{߿߿l7Q�*6o̙AX0onn5ӧO?&&||<(ZCn[l9J a� Ǽ}_zٳg`]v?|�9[@!J۶m;&338`4,%9�r`a/P6~ Ǡlg?cǎ={62P A8f^ PPb9� P,P00T, P|r¹sX@ĉA0SPP��[l<H�KȆ2Lh�&qqq`B�SV �@p�U%BoPFN�e?P4rD6mU`z{� f`rVD{XT "PBܻw/E*+JOlM2�b�f %%%Q`y*.A�J ߐ��`a vPmF@w�@�zzzr@|V*=zNL P @+plA\e �f�_u=*omP� RbCX (Fo;� `i5ԩS8<x+WPb*A5U (-A9� `54gΜظ�'QP Kl *ի�TʁZP]#4��V6 ,,OKKljU@t?~ *#`#\Ԗ .󳲲+0PEPEr�@�ZA! `ǬY8$&eѢEw{{;r^Z>�)L> t)HBMM- X7o~zp</Y?a Gڍؤ4+]a� P9lM6wb& 1@񩞞km]!!!{n`rzC� q**Hi�@06'4ΰ%fhRZ0۳9� �Nfr����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/pdf.png�����������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015100� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/pdf.png����������������������������������������������������������������������0000644�0001750�0000144�00000003627�15104461330�017074� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����gAMA��|Q��� cHRM��z%��������u0��`��:��o_F�� IDATxb?C~~E?a��JCy >\ꀀ�-})SX X 9/&&!A|vvW*hڄ,, ?uu򫫹@B�w? .0003306 K20~ Q1 A a܁�Ă6 w20ܼ�t!É 7n00 hAak�PhC�lT-@� A|b >,(I?P,z? u$::VPrr�@^Q`߿ Q]f!aA� �  �d(9.ᏸ   � `Qd �,wJ3ß't})B ZF@L $! W#|bH0C-�Dr ӋgJP?@?`{� &).\ rq3f`D%0rĄj%@�{X*b`Wf$p�#/3 9t�ѾD1>.?VLB,=bPG@� 9ZzY ? d9bl� &B A6?#Т}S]&2HȾrt�1AR2 u/ 98v1|{ �@LD%<XӇ~ˁ  xbfw`V,Gw@�1![`<] /@ -X9Ff257gQ|XC 6�@�dC . ?;#0b//> \ | R+޾``ᯚ_K`p *� T2$Xvm`!"™T0?B W1pD1Te`333io�  ϱrOV {2pKj 2jx޿fZ $7u}(E'a� X XZ 98ȴs 8{ mإ _:F L1|o?$0.�.g=q,;>[3|+b`6Xv?C+.ArÁ# *(2) @8X0?< _?321_`nE/X  91) Xs"W@+` ̙3g̘�@L�e&� X~`xR0Y>زg[GӧO*R@!�o\Z؁q*R1@?;2@3Լ6m-PL@��]x0ز$ፅ;CR18-LT)J2˗ȖF B�T:?#>X12@$ Kpȡ8OPwvv,A9 �fgf` 4V !l/|>a„ �ll�$,۷o&OpZ�JPTTT4B�o߾1>}dz׶�v�??2=z䤸7og9��z&����IENDB`���������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/application-x-txt.png���������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017714� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/application-x-txt.png��������������������������������������������������������0000644�0001750�0000144�00000001210�15104461330�021672� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDAT8jA{{zt~t3D.$;w">E}BB' n 1C({zgOƉ \*8sJ  l5`8==PUT)`*qӱ7l'"LjS0Ûpt 30i.45.p\Aj ::6NFQ9F )FPDa@/& EY7ڝ ԁ^v9 \$ eY'*IϿ"б~6yj&fFQ "z8h.4 Ð4IMH�B{ӫ\t",--dY6C !2b0 s)e~~qD͈9}Yvg`gƁ�f@yA+}D''<yw}p�Sҳl0nkeYZUU6k[׳]|x]pGOEaUUw֛fsg<? QHLꜤ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/configure_shortcuts.png�������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020426� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/configure_shortcuts.png������������������������������������������������������0000644�0001750�0000144�00000002606�15104461330�022416� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0��� 1 ���sBITUF��� pHYs��1��1(R���tEXtSoftware�www.inkscape.org<��IDATxWKoEz^cƏXرy)!H!@nKC$wH$B � !86_`֏]kvOիfr@ pq<3_u}]w!M�JAᾋ `!{hg vpbg/)J]1i$X*ָ$ }cH<S:]LV=tʥ`wgX@IZ;[@-QvHJ7*UnrYM0K;v'uhr\#sFԠ(|:s]llCxx_\,Ӂx(1 ->؍%dM FvoVR#LGj'5c NnL!'%Z:ixq0y$4UA2!'c<b?c:J6&b΅\n~_9 c�An$s4S7%n`9[H'p^/8 6TBPCK5tsцĻL) #*ЇP0S8%dФ`21H6IB6; 5^RdU*EBue'a<�:PM<SxǬ ÎB,ת-N5ݛlvkϗ0h4O!!ks]>@ Vō㣅l__z v2V1уV0lW/lt"[D^tz~UhՎCC;SJ *""V ;jq,fFJ(el!G͓.KX*,5xTY̡)1,Nڙ�۰sw75NvTOo[B"yacv>J k*`pLr &^ lqf>R݋eNE/is!9yhxD' ?S 'S??י'勚-G0EEm9: ~l{iX][ҏ3|Vre pu[u@k40t!틀vq(2X-�EkV3r-H(qEȹҾ~;GZG-2XB1UܣB*Jh(z*A$YObEg6P`tH~SX%m! 7c^XxgMu` }c  �1Q����IENDB`��������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/clear_left.png����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016427� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/clear_left.png���������������������������������������������������������������0000644�0001750�0000144�00000000604�15104461330�020413� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���gAMA�� a���bKGD������ oFFs��������1��� pHYs�� �� d_���tIME- TCs���IDATx1n0E  !ؽ�ri(L"7{I"1Q/YbF|ȿĚ^<4m�dY9u]p1mqα+9ڶ0 ZjuzTޯ i&>e*`&�Ze1ޣ_{�TU#ס7 !|Boi9g)ӃQTUb$0&9S4^""o/�8k]����IENDB`����������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/edit.png����������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015254� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/edit.png���������������������������������������������������������������������0000644�0001750�0000144�00000003133�15104461330�017240� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����gAMA��|Q��� cHRM��z%��������u0��`��:��o_F��IDATxb<r2[w'+1P�� @o?7~7y@�"P߿@?c;9 䟭kwV5 :� ! /?{kW^.S4X TNg >;pΗF�~! 0 Ad]x??00\ w⮪ @xK�DRp]tmG@_@?0x 7oĚ @L$Zƅ @K6`20|˝pc`e(Q Hr�(\Y!+?@�Y #% &* (n @,X @?c|�;si{6 y3021m&@�?0�',�W_~2?w�@�䀿ԁ ?QKۖp1 @D; 7h`(1|N '+3 G�h~2M^5Lfo e}'/v�@�00d�- "02a:'330{PyFB! r!0 JwV0pk�Oz3ܿvA4/h'lA@q( :/O8XMr@ tWn(>###!lw�((8T^fi9Nb? /gWP4�  _ ?jH #@�tbnFvP_Pd`xCA_%䟟_&_aɗO @C�Z} < `ŋ } ~f;?m Xp=[ ׀ 1<p AXCb�^e JF9~1e8bwЮ@dj^KGO_D ObMd`': P�(fR(?@�`D{{371(>ʹr!?6+(q' i D |s-( s;; ''(MR8c X|/r@ Ïj!| h)++$tFlFb�ဿH ,LK!gZ�̕,XJ1K!pŰm< �6!,ـqDv�@`~c0�@(0cӀ9� `eLC; FX>(�`�tr����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/cb2bib.icns�������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015622� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/cb2bib.icns������������������������������������������������������������������0000644�0001750�0000144�00000126735�15104461330�017624� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������icns��ics#���H??????ics8��^3WVW33^333333333^3332,,,,,^33����+^33������^33������^33���V]33++]33++�+]33++++++]33����is32���� Ƃ� §ǂ� ϿĂ� ǂ�係��܁� � ́� ݁� ݁� �|~}߄�̈́�`ihd`aZ���� ÞƸ� � � �қ��܁� � ˁ� ܁� ݁� �^ab߄�̈́�`ihd`aZ���� zq� \`puuys� Xa`bfjnpv~p� \hiyr�^jjo�_ll؁�annׁ܁� cpp� gqqԽɁ� irs܁� ftuɿ݁� ctu�>BE߄�̈́�`ihd`aZ��s8mk��������d ���������%"$$ �����@����F����E����@��������v�������������������Nkj��������������-DBBBBBD"��ICN#��������?�����?������?�����?icl8��VV+V]]]^3333V++VW333,]^33W]]]WWWWWWW]]W333]^333333333333333333,]^33333333333333333,,]^33333333333333333,,]^333332,,,,,,,,,,,,,]]33333+�����������,]]33333�����������W]33333������������+]33333�������������+]33333�����������]33333�����������]33333����������������]33333�������+�+�W33333������V�VW33333��+���V�V�VW33333�++���++�VW33333V����+�V+VW33333+���V�VW33333V+++VV+V�W33333�+++++++�W33333�������������]]]]]+������������il32���˜���ʛſ҇�ɻ­·�ȵЇ�҇�ч�ч�ۀ Ї�Ї�·�dž�ͅ�Ƅ�ӄ�؄� Ϻ׹ބ�  ݸŻ�ܦĸ�߄�߄�Ƭބ�ؠ֭̓ٷׄ�Ԅ�ф�j΅�#&""##̋�ɋ�ŋ���˜���_ſ�gí�dns~w�d�[�[�dȽ�d侪�dچⳇ�dنdž�dنͅ�dنƄ�dӄ�d؄�[ ̶նބ� [ ܵ¸�dۡ´�d߄�m߄�mŨބ�mכʎԩ״ׄ�mԄ�dրф�U|΅�̋�ɋ�ŋ���˜���?p|}ſ�8WbcexĮ|zyt�6W\TSV^gpwywtoje_cjn~v�?X`_a__acdgiknqrtxz|w�?Ybbegikmoqsuvxz|}~x�?Ycdfhj lnprtvxz{}z�?Ydegij|�?Zefhjkܗz�?\ggikmˆړ�?]hhklnˆdž�?]iilmpˆͅ�?^jjmopʆƄ�?_kkmpqӄ�?allnpr؄�?ammoqr ʳԲބ� 6dnnprs ڲ�?jpnpssоٝ�Hmnoqss߄�Hgnortsބ�HenprtsĤބ�HenpsuuחȉҦձׄ�HdoqsuwԄ�Hfrsvxyф�5RWY_e`΅��̋�ɋ�ŋ��l8mk��������������vC���������������������������B������������������������3f�����������������m闑f����������������������������������������������������������������������������������7���������4��������2�������������������������������������������������������������������������������������������2CBBAG���������������������������������������v^�������������� ����it32��W����� ƶ��˼�µ�U�Um�|�qs�x¾m� s¼s?�!fĭywa�ݎ$¾~{yɂԎ�ف׀ل%ǽ~ԀܐҸ�ցׁځºǁƾ݃߉ұ�ǃρ/Ǥµ߁؁Г�΀>|فЏ� x̀:ƽ~݁z� rȀ8yx~Հ׀z� mļрzxvuttry u� mŹ7~|wvqpmt z� mȺkehinoqswx}~� z� mɺnhjkoprswxz{ z� m̿ŀƀ z� m  ɂրz� mˁ̓ʁ͂ЃӅԃր׀فz� ḿςЁ҃ԃՁׂ؃څ܁z� m΀΂ЁсҁӁԁՁւ؃څ܄u� m΀΀πЁсҁӁԁՁׂ؃څ܄u� m΂ЁсҁӁԁՁւ؃څ܅u� m΀πЁсҁӁԁՁր׀؃څ܅u�mς΂Ђ҃ԃւ؃څ܅ u�ḿπЃ҃ԃր׀؃څ܅ u� m΂Ёсҁԃք؂څ܅݂u� m΀πЁсҁԃր׀؃څ܅݃u�mπ΀ЁсҁӁԁք؂فڃ܃ޅz�mππЁсҁӁԁր׀؃فڃ܃ނ z�m΂Ё҃ӃՆ؁فڃۅ܃ރz�m΀πЁҁ҂؈فځۃ܅݀z�m΃ЁсҀz�m΀πЁсҀz�m΂Ђҁz�m΀Ѓҁz�m΁Ё҃z� mπЁ҃z�m΁Ђҁz� mЃҁz� mЁ҃u�mπЁ҃ψ8� mЂҁԀӹ�mЃҁԀúڢ�mЁ҃ԀѶ�m΀Ё҃Ԁڠ�mЁҁԂ ƶ�m΀Ёҁӄ ڞ�mЁׁ҃ ƶ�mЁ҂ր ڜ�mЁҁ׀ �mЁҁ׀ ö�mπсҁ ԙ�mπсҁ ſƙ�mπҁӀ ʜ�mЀҁ̞�mЀҁ׀ ѐ�mЀҁ׀ Ӊ�mсҁր ҅�mсҁՀր ҂�mҁӀրԂ�mҁӀր Ԃ�mҁՁփՂ�mҁԁփ  Ո�mрҁԁց ߱蛅 Ղ�mЁҁԁց*С蛍Ո�mҁӁՁցؘ߯ۯֈ�aҁӁՁ͑黭ֈ�aҁԁփ򰧯̾܍ֈ�mҁԁր󳬽̉󷧄䍀Ո� mԁր𠐁Ո� mԁր 욋Ղ� mӀԁր ٲ鎂ݍ Ղ� mӀԁր ʨ獃֋õՂ� mԁՁր ˽ɔ׋̼ʾԂ� mԁՁʑΐĴؼԂ� mԁփ񸮮𫛃Ԃ� mԁրô褐방 Ԃ� mԁրᕉɬ䑃ėт� mԁր،ލԡт� mԁրĴӲljɊς� mԁր񺪅̵ξ Ӌς�mӀՁր졑Ե𶦄 ΂�mӀՁ뜌͸ ΂�mԁՁրꑁѸꗇ ڋ˂�mԁՁ˻咄 ъ|�mԁրꕅ緸-ƾ¨ˊ˂�mԁր=뙉ڲ龷ݼ⪝|�mԁր)۪$৙ծ|�mԁր%NѨ㱣~#ћȤ|�mԁր%ު~迳|�mԁր踭 |�mԁր|�mԁր؁|�mԁր؁|�mԁւ |�mԁր |�mԁր׀|�mӀօ|�mсЁ Ҁv�a¿v�Yv�6Bad``^`aaccddcbapɿv�)KNIJLKK`ǿv�Hɿv�Aǿv�dżv�nżv�|Ļv�|Ļv�|ùv�|v�|v�o�y޼i�xٵk�D{Ӆуσ̀ʅɃȁƁŁĀ¼o4�1hzÄp\(�!#7;686863431!����� ƶ��˼�µ�U�Um�|�qs�x¾m� s¼s?�!fĭywa�fm$¾~{y�f&~�mǁƾ�m|9µ~x�_|5|~v� Pt{3{|d�LszHywxz`� Hryр/zxutqpor`�Hry8{{Ŀyxtronhl `�+Ht{uoWSWX[]_`deijnorswxyz}}~~}{{zzyxwvttponq `� Ht{ wqUQTUWX\\^_bcfgijmnpqttuvwxyyzz{||{ yyxwvusw `�*Ht{yvwxxyzz||~~ `� Ht{`� Ht{ `�Ht{`� Ht{`�Ht{[�Ht{[�Ht{[�Ht{[�Ht{`�Ht{[�Ht{`�Ht{`�Ut{`�Ht{ `�Ut{f�Ut{ ۊߒf�Ut{f�Ut{۽f�Ut{½f�Ut{Լf�Ut{ f�Uw}ӷf�Uw}ٽf�Uw}кf�Uw} ׿z8�Uw}Ѷ�Uw}úڢ�Uw}Ѷ�Uw} ڠ�Uw} ƶ�Uw} ڞ�Uw} ƶ�Uw} ڜ�Uw} � Uw} ö�Uy ԙ�Uyſƙ�Uyʜ�Uy̞�Ut} ѐ�Ht} Ӊ�Ut} ҅� Ut} ҂� Ht}Ԃ� Ut} Ԃ�Ut}Ղ�Ht} Ո� Ut} ܮ畆 Ղ� Ht} *̞~|敆~xx}Ո� Hr{֓~|xxyz߬}|حֈ� Hr{ ˌy~}踩ֈ�Hr{ 򬢬ʼz~ۆzֈ�Ht 򰨺ʃy~yՈ�Ht} x}zyՈ� Ut x떆|yՂ� Ut ׮{ۈ| ξ~Ղ� Ut Ȥ|ԅ{Ղ� Uy ȹƐօʺǺԂ� UyǍ̋׸Ԃ� U{ ο񴪫輪|y Ԃ� U{亂ꬥ|{Ԃ�U{Ȩ}‘т� U{׉ȿއ{ѝт�U{ѭŃ}DŽ}ς�U{~ȱͽ~ ӄ{ς�U{읍{Ҳ~ x}΂�U{뗇z˴| x|΂�U{|x϶铃| مy˂�U{{xǺ Єz|�U{!x峴-Żɿʃ{~˂�U{?ꔄyخ轶ܹο|᧙|�U{S}٦ッ࢔|Ӫ|�U{'︩Уᮠ}x"yЗz~ƞ|�U{!ݨ~xy罰|{xx|�U{綪뾰 |�U{|�U{ |�U{|�U{|�U{ |�U{ |�U{|�Uyv�Hty�v�Lko�v�(1MNJHHKMMNNPPMLK^ɿv� <>:9;:Qǿv�Eɿv�Aǿv�dżv�nżv�|Ļv�|Ļv�|ùv�|v�|v�o�y޼i�xٵk�D{Ӆуσ̀ʅɃȁƁŁĀ¼o4�1hzÄp\(�!#7;686863431!����� ƶ��˼�µ�U�Um�|�qs�x¾m� s¼s?�!fĭywa�3H#¾~{ytqrx�3\k'~}q�HVbǁƾ~��~n�6LNYZ[^ijor.nljiefjpµ|{{yz {z{{zyxwwP� ?KMVXXZegijmmnnjjhg(ms|{~zyzzyxxwvvP� 5FKXZXX[[_``a0ccgips~yxvu vwyzz{|{zyxxyywvE� 3EJY[XXZZ\\^=_`dguyywqoppopttvx~ywxzywvB�0EIY[ZYXWQQRRST[bр!zxtronihedfggh ijuw{|{ywvB�0EIY[ZYWVPPQRX^{.|zvtpojifebbddeeffgitw|}{ywvB� 0EIY[ZZ]\WVSUTKICBDEGHLMOPTUWX]^_`bbddfeeddccbbaa`__^\\[[XWWVSUdghi jjkmvx}}{yzxB� 0EIY[ZZ]\XWTVUKH=;<<?@ABDDGHIJOPPQSSUUWXWXYZYYXWWVUUTVehijkkllmowy}}{yzxB�0GK[]ZZ__XWXXWXXWXVMLNNOPOPSVVWXYZ[[\\^^_`_`aabbccddefgmnopoprrqryz||}{{yB�0GK[]ZZ__YZ YSRSSTTVWWXZZ[]]^^_`abc ddeeffghghijklpqrrttstyz||}{{yB�0GKZ\[[_`_`aabbcefgghiikmnnoppqrrsuvwxy{{| }}{{}{yB�0GKZ\[\_`aabbccddeghghikmopopqssttuwxwxy{}�~||}|yB� 0GKY[]]_`_`aaceghhikmnnopopqssttuwxwxyy{}z{}xvB�0GKY[]^_`aceghghikmnoopqssttuwxwxy{} {{~xvB�0GKZ\_``abbcceghhikllmmnnoppqsuwxwxzz{}}}zwB�0GKZ]_`abbcceghghiik llmmnnopopqsuwxwxyyzz{}}}zwB�0GKZ\_``abbccddeghhijjkmmnnoppqsuwxwxzz{} ~~zwB�0GKZ]_`aabbccddeghghiijjkmmnnopopqsuwxwxyyzz{}~~zwB�0GKZ]`aceghhikmopopqqsttuuwxwxyy{}{xB�0GKZ]`aceghghikmopopqsttuuwxwxy{}|yB� 0IMZ]`abbcceffghhikmnnopopqqrrssttuuvvwxwxyy{}}{G� 0IMZ]`abbccefgghiikmmnoopqqr ssuuvvwxwxyz||}}~|G�0IMZ]`aceghhik mnsuyz{{}}~G�0IMZ]`aceghghik lqtG�0IMZ]abcceghhikmq؆ُڋɜ~G�0IMZ]abcceghghikmrب~G�0IMZ]bceghhikllmwЛG�0IMZ]bceghghiikllmxܦG�0LO[^bceghhikmmnyɚG�0LO[^bceghghikmmnyԥL�0LO[^bceghhikmozȘG�0LO[^bceghghiikmozӣL�0LO[^deghhikmmnnozǛQ�0LO[^deghghikmmnnozҦm8�0LO\_deghhikmoz̶�0LO\_deghghiikmopozúڢ�0LO]`deghhik mmnnopozѶ� 0LQ]`eeghghik mmnnopp{ڠ�0LQ]`eeghhikmopp{ ƶ� 0LQ]`eeghghiikmopopq{ ڞ�0NS]`ghhik mmnnopopq{ ƶ�0NS]`ghghik mmnnoppqq{ ڜ� 0NQ]`fgghhikmoppqq{ � 0NS]`ghghiikmopopq{ ö� 0NS^aghghiikmmnnopopqqs} ԙ� 0NS^aghghiikmmnoopqs}ſƙ�0NS`bghhikmmnnoppqs}ʜ�0NS`cghikmmnoopqs}̞�0LQbdghhikmopopqs} ѐ�0LQbeghiikmopopqs} Ӊ�0LQbeghiikmmnnoppqs} ҅�0LQbeghiikmmnnoppqs} ҂�0LQdghikmmnnoppqsst~Ԃ�0LQdghikmmnoopqsst~ Ԃ�0LQdghikmopopqqst~Ղ�0LQdghikmoppqst~ Ո�0LQdghikmmnnoppqssttq{ ۪摅 Ղ�0LQehhikmmnnoppqssttq{*ʙyv}搁ywsrwyՈ�0GOehiikmmnnoppqssttpzԏxvrrstyިwvاֈ�0GOfikmmnnoppqssttpzȈ~~|syxx絥}ֈ�0GOfikmoppqsuuq{񩟧ǹ|ty|فuֈ�0GOfillkkmopopqqsuuq{򬤷~s|x}s}Ո�0LSfjttkjmmnnopopqqssttuuq{rwuszՈ�0LSfjvvkjmmnnoppq ssttuuq{ sy둀w݁tՂ�0LSlqwwjhmmnnoppq ssttuur| ֪uكw ͼ|xՂ�0LUlqxwjhmmnnoppq ssttuur| ƠwҀv뾮Ղ� 0QXqttsihmmoppq ssttuur| ǷʼnԀ}Ƕ|zŷԂ�0QXsvrqihmmopopqssttuur|뷨Ň˄zyֵԂ� 0SZtvnmiimmoppqs uuttr|ͽ응𱦧vsy{Ԃ�0SZtvmliimmopopqqsuuttr|}驢윋vu~Ԃ� 0SZprihkknnoppq ssttuutts}ލĥx|˿т� 0SZmoihjknnoppqssttuutts}Ԅyż܂uϙт� 0SXlohhmmnnoppqssttuurrt~z{Ϫ}xxς� 0SXkmhhlmnnoppqssttuurrt~y|Ʈɸ|y uς� 0SXikhhlmnnoppqssttuuppw뙈uҮﰟx| rw΂� 0SXikhhlmnnoppqssttuuppw꓂tɲw~ rv΂�0SXhjgglmoppqssttuuppwvr̳|v ؀t˂�0SXhjgglmoppqssttuupqwurŶxy u|�0SXhjgglmoppqsuqqwys就-¹ƻw챡xz˂�0SXhjgglmopopqqsu8qrw~tت躲ڶͽ|wߣ||�0SXhjgglmopopqqs(uuwwstx쫚wzעﺫ{z{$|ߞvyҧ}{|� 0SXhjgglmoppqs$uuwwstx~}͟᪛xr"s~ϒuyÜ|� 0SXhjffmnoppq(ssttuuwwuvxܣ쫛}xsrs{溭~wursy{|� 0SXhjffmnoppqssttuuwwuvx粥쪜껭 |� 0SXgihhmnoppqssttuuwxx|� 0SXgjhhnnoppqssttuuwxx|�0SXfinnoppqssttuuwxx|� 0SXehjjnnoppqssttuuwxx|� 0SXehmmnnoppqssttuwxx|� 0SXehmmnoopqssttuwxw|�0SVehlmnnopstqqssttuuwwuuw|� 0SVdgjkllmnpqrssuvwwutt}v�0IM]``a`_`efijoptuwvnlfpv�&GJWYZZYYVVXY]^cdgimnpoge_jv�!/2011334 5588775Lɿv� &'%' ('(**)Cǿv�  =ɿv�Aǿv�dżv�nżv�|Ļv�|Ļv�|ùv�|v�|v�o�y޼i�xٵk�D{Ӆуσ̀ʅɃȁƁŁĀ¼o4�1hzÄp\(�!#7;686863431!����t8mk��@�������������������������������������������������BPry~sjD6���������������������������������������������������������������������������������������������������������������� "-Xe|[N! ������������������������������������������������������������������������������������������������������������ RlὧA+����������������������������������������������������������������������������������������������������������#o`G �������������������������������������������������������������������������������������������������������aE �����������������������������������������������������������������������������������������������������/~_����������������������������������������������������������������������������������������������������G+��������������������������������������������������������������������������������������������������)aC ������������������������������������������������������������������������������������������������jϱ'���������������������������������������������������������������������������������������������� ;��������������������������������������������������������������������������������������������� ?]��������������������������������������������������������������������"]y.���������������������������������������!2븯w��������������������������������������,Aè��������������������������������������Zx& �������������������������������������b) �������������������������������������i0�������������������������������������j2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k2�������������������������������������k8�������������������������������������k\=�������������������������������������ktV�����������������������������������kM2�����������������������������������kkN���������������������������������kM2���������������������������������kkN�������������������������������kM2�������������������������������kkN�����������������������������kM2�����������������������������kkM����������������������������kK0���������������������������kbD ���������������������������k��������������������������kŦ��������������������������kѳ% �������������������������kӵ'�������������������������kո(�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������kո)�������������������������dո)������������������������� 8Mո)������������������������� ->ո)�������������������������9>DEEEEEEEEEEEEEEEEEEFL_ո)�������������������������'+01111111111111111112:Nո)��������������������������� 3ո)���������������������������.ո)��������������������������������������������������)ո)��������������������������������������������������)ո)��������������������������������������������������)ո)��������������������������������������������������)ո)��������������������������������������������������)ո)��������������������������������������������������(ո)��������������������������������������������������(ϲ)��������������������������������������������������&Ũ&��������������������������������������������������t܉n�������������������������������������������������� b{t[ �������������������������������������������������� .9\ckllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllkc\6* ���������������������������������������������������� )CIPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPIC( ����������������������������������������������������    ����������������������������������������������������� ���������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/citer_citation.png������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017327� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/citer_citation.png�����������������������������������������������������������0000644�0001750�0000144�00000001210�15104461330�021305� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDAT8jA{{zt~t3D.$;w">E}BB' n 1C({zgOƉ \*8sJ  l5`8==PUT)`*qӱ7l'"LjS0Ûpt 30i.45.p\Aj ::6NFQ9F )FPDa@/& EY7ڝ ԁ^v9 \$ eY'*IϿ"б~6yj&fFQ "z8h.4 Ð4IMH�B{ӫ\t",--dY6C !2b0 s)e~~qD͈9}Yvg`gƁ�f@yA+}D''<yw}p�Sҳl0nkeYZUU6k[׳]|x]pGOEaUUw֛fsg<? QHLꜤ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/application-x-none.png��������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020034� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/application-x-none.png�������������������������������������������������������0000644�0001750�0000144�00000001137�15104461330�022022� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDAT8=kSahkmE -v .~�qRѽY|�Rui ҂.)FЛܗ<!76Uyy~?G v!97͗ UEU\骪)dܧ�!<{@UyOC(TU^5)$xc\QMNDτO?T,r4w$)PUv~KOgCݫ;/`ׂjj!;խ6n;֜Aw%Ǝ+gr;Z`gW7f19s( py{$Oiq ^d(^Y6�03EZEql_-"[_laأJ2Ng9gV6U{XY�53~ (r�3Fc-?y1~6 JmK< �e&#q7����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/connect_no.png����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016454� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/connect_no.png���������������������������������������������������������������0000644�0001750�0000144�00000003750�15104461330�020445� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����gAMA��|Q��� cHRM��z%��������u0��`��:��o_F��^IDATxb?@b�bh�A].***,,,@>36E {s3LKK{WDD$�D *'%%XpYfZ?!!{bb===� Jhee:׻w_WWCWWw ;;{6P݁Ptɓ' ��"ҙk:ΝrppTAi�Mcee Bl0�YPWW6ms_v{{@a_ @V-9翪^ W��p�PA\ Ogmٲٳgϙ3翎:2226WXyĸd��ƘY8_ZZO@@ &=eʔgGgP|&)@) fK.}~/^wSN_t!�@()jhh(d.,,f7oƌA[DBBB_~~ׯ?~Q__2��`q^ojj˟@7P z"##3.? ;vu _d/@�!;l'05 p&5(0-ȑ#@ٳ_ӧ  >7n;�X0g  PYhQ%%U@)#X]vcww@681ʁk׮/_EC.\�N\sd&^�–  9y\S̤I?~lً/qp8 @t]]]?0 H*ݻw_\uցt[[[rξ}Q Lg*@�`` y�lx޽n9nn.ؑ qP!X ݃ {he,;w'رc`>(=lذ5ijhq  v@HH,YժU`Àu2P  GBTK@z`| l"�DPl@ d٦MWTT GȲ3gx"8Jz{{ �`XBPk f9� p:X.� CP*dyyyx?ap"%ӧO߶m+WAxAmPX *9���졡A� d8(@9�۷6F%(Z@ (t@YsѢEMLL@ź% @V�5zٲe`A8lhTf߳gAB%8a345 `A���&` ?DžG`:- A a\ XT3(wBA�G>@*P�@�ZZZMFG(PXYВ T)(^Xf-,,N 9V1@�Jf0ÆM3�408 `%5cPJ �@d 4P5N@)XÁJ8`&��"( @忐t) `kk; -A;g@a/,鄠�,�\ Ϝu@a Rd/@��`WPP#++S�%=#vhJ!%;� �@0&?P����IENDB`������������������������cb2bib-2.0.3/src/icons/PaxHeaders/viewHome.png������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016112� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/viewHome.png�����������������������������������������������������������������0000644�0001750�0000144�00000000632�15104461330�020077� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD���@��� pHYs�� �� ����tIME  P2���tEXtComment�Created with The GIMPd%n���IDAT8͑m0OAST@8}\9PE1x)Dlj xH/+8љGsH$ 䔂$,A(rR"LzC@9L.T׆i}rN!K)eH.vYlZro]XHm�RX&"QARS 6kem=o\nD"ij�r ˠڦ9מ<}�p}5s-K` AKI[z6.����IENDB`������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/clipboard.png�����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016266� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/clipboard.png����������������������������������������������������������������0000644�0001750�0000144�00000001021�15104461330�020244� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDATxڅSOP4qf?_j,,$+)N2q&2&I4z\~^wW%`t:+|~}8gtڀHf�!(J_d28VT*Bir| !(d۶mr<UUq(IٌqLSj a|9bXM<u]ڴ&:UEae3k&D(JpϞ`DdF Dr*@&It?v#-˂p5#x֠:LѼz{s}õ)i>3˝ 0 Ƙp!+{1v_Ǔod~Z}4-ۉ=6/-eHC����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/viewBackward.png��������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016740� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/viewBackward.png�������������������������������������������������������������0000644�0001750�0000144�00000000624�15104461330�020726� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD���@��� pHYs�� �� ����tIME ƒc���tEXtComment�Created with The GIMPd%n���IDAT8˵1n0DInEp�lK &{)@Q@$3߷GV1 Ð4O{fImӟ|7Kϛf2mt}5Lw}cKL@`2yD\aecL2A` 4Af$< �^�dY0oQ^xծ א0"g.M>n�4MQ96T]Ihʫ\j��UU% >MS8q sy3SY(C'~о����IENDB`������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/configure_bibtex.png����������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017645� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/configure_bibtex.png���������������������������������������������������������0000644�0001750�0000144�00000005347�15104461330�021642� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs��1��1(R���tEXtSoftware�www.inkscape.org<�� dIDATh͚]U!$Yݙ/K7M03/(,}XD٧T1ĕdY0 AB,&!3q:L=]u{>=LQuϹVRfBlT$ ! - j:n[ ioh�XM}ZaZQ!�Q› h*M3MUf[9!SU0- @84)" QkLJ"TF2"V "FR [j\ <s#wt蘦|0Bt]G X/a(d2lShIGJZ𠎎#uq=#P"oI A˲p]7rJmmcBLEID2 cRj %0</Ui$�MAiA$qB(J E%Z6&.(L^obUU%a&ӪRX@<;4NB(1ǁ:N!exі#TSHB`ȥlq%~m4sP7ޛu&!Ĵ,u"P �ZfhwFQjZ=-@HRѹZIGr@P5,)e ϋ2MخiZSIs�6? 7شiyΟ?υ xScjjg //QU55 |w|=zy֭[@t8[nezz^z CԼ�}yvZy9](R$K򯣣S]rYJE~rϳʉ 9W.K0a4Mi,+lۖ'N+V׮]·k&}]i۶tGkؔ8Al&۶mA6:m4{b�6mľ}8|0 R ]YDV,{Xh[n![U<x~^Gk :n-c,tL]|\t?($MݻTo0<<G}0_}[l!t̉`[oZ)1Z/\.saٵkWnW^ellǏO yy뭷{Gpx5 aG S<x衇eڵvmg wƍuV\ݻsqA;�anI31um EF@@|Xu2LSqx'qFC?\;w"dll !Dt}2/@lDrDEҜضmwA\n 877({Q(mUU[jVY5!b:P,~:ׯ_>X,.L 64wqqyܟu]r$]]]�`f^nl\.?Ϲs8}a\5}4:Q49y$SSSe[LӤtZʕ+�Au]l޼7| 6ݖ@{:k$X%49Mdƍ sNnL u'}T*3<:thy}xu]*a077iT*:loo/vb@?a;@PJeb سgccc|mKKJM"~\r>Gn3M:<UU9v9.\`lٲ+W.#4M \W^̙3Zj]P8Kڋj0M9_J"jTY+ʰRtG)'''e<z</|o؎9"]וH۶arffFVjG[ReI`;[v&V^l*;yZ)%333њ7'^yo%҈�Nv$Y}?ZY-Jք`M˳1D72'O4M&&&0 #6e199ӧyW9p@q,B4lj-9}X)O:w`0:Db`ѲW;~tt , ۧz5k`6sssT*TUm$,m?3p.tM A">8s\[P!@۶qr4tuuDwhFT\MJ$G~Q_`j̰n/|k$Cͻ[,=�jbHXd||||ppO4&I!x{3L$JC Ͽ \! ӯ , .#R={WՋ/@KP- qW:$8aKTX,r WI:Ik?m&Z<Ľ8z$ݻw/ @u!idl-Y{.]]]J%~ǟXV/fQ\[k˗cǎ(`YlRMQ.^xfǎ{GL&*M , o_^ 𨏔X!t3Sl<XP;A �&�_i&V54R����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/viewReload.png����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016430� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/viewReload.png���������������������������������������������������������������0000644�0001750�0000144�00000000751�15104461330�020417� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������&N:���sRGB����bKGD������ pHYs�� �� ����tIME "-FXM��iIDAT(}ӽkUA}<K0*TN# Z`%XXEEQ`7(Jl,mlRF^f/Ņaaw̙svmMZ1<Nvfn !b;漦q;0aٿe/m*1؋KQF_qk\f4L}fi\ `8^:^ctbLT=wW*J}|¾rx<"bwQq)3;3�}ĉrp 3m[q'jSk&?a܋(P@]Y{xZfc2G]<IhG����IENDB`�����������������������cb2bib-2.0.3/src/icons/PaxHeaders/edit22.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015420� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/edit22.png�������������������������������������������������������������������0000644�0001750�0000144�00000001533�15104461330�017406� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������j ���sBITO��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��nPLTE������������������������������!!!999VVVZZZaaaeeejjjkkklllpppxxx{{{|||S���tRNS��#&MS\l>z#��>IDATxmJAgvu TB+;( 򠃮vR( DKiw _yAy1N|fAr!t1 AD{b0 =dB@U`tE6R)F%b-?PN亴rqf1m+ո]KL\fFd#ma@m>СnJmhVVg֛G8.M 0ޫbmJ%eaJ~piJW!}?vNuDQx'9hs-7Q@iJJ</?پonk����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/application-x-html.png��������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020041� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/application-x-html.png�������������������������������������������������������0000644�0001750�0000144�00000001312�15104461330�022022� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��GIDAT8KOAҖEJQ*`6,\ w._FwQX ! 1ʭj7̼ϼ3JDPJ)O "+5BԲ(Q Rǁ2bH(ˀU:) PZaZkV /]!# wUJfz ^erc#Ndzb_@k]+ /k8~e 5µ%jqe% *�=w Dk4C l (ypFO3GEG.قǗ}lە@gbsgtXkl\39S�R5L"nToF|nv&* "�\c2K"fBQ7#m WOKɓK4ԥ$˕oC[[qx8N~$L233N+�XѲ4M,Klq<qG٬,..�{O�떍y+BϚEQJu6e`EJ77v Z����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/configure_documents.png�������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020371� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/configure_documents.png������������������������������������������������������0000644�0001750�0000144�00000026102�15104461330�022356� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���%���bKGD X��� pHYs��7\��7\Ǥ��� vpAg���0���0�W��+IDATxڵw|TkOIT%RA(B&(Mi"%4A)  M RB EIAZh %$$M&3{?٠r<{fgGxmC̐!3"Es>|y""Gh/dL'\r)$@K+;M.Mn݆KqjGZmk<=yztYcbtaK-^q75yi5GWj_Gw6G?8L^|Gw<<}1oW>r$vpQthW.s̕2)U 7Sa=aoS1|Ti!%#.qy*]Ud dzhmN Q@u)T&r\p,tWImi>}~PNx<;'l S.vJ>1 2sLݧڨƩ}*R� B6  vv$-I]U=/x^(?x'?I<Q:dFk~N^}2hܠqG%]._1|6\) ~ySWwskjdrds$wg|T`Lc jIC@@ 9mA[kYd+EhZkZffD@NP/W߯_-V[ dxxx'2X4^^bw,~wҀujZDR*@YP$%] ViX>Sx3mF[#/x/ uSr98C)>5~T9l@m>g{;YՒtQK !qJ7Y\z7:1q ?X1 ^uSpι 㮽sX}|Z> T�WUB{笧ZӇ ^^! ]d �њ@i P4#H4^b@/ mIGQ 7nr>P{>d uS P*CcZF-uS߳ó~ 6mIM^5QXRJ)?}0m~5a/y2VN*i{(LE%rE!UJ+~�+&-ME?L xvȿiX pؑ# [&l{EMџ}IY^^u}zNE: CB @Aiu( ~2 )VM¥":A # �q@dڨ6"2S{G{$YR$E |!L܎|ݲuU8<$uu +Yrs\2yV*O@1A%y+s>Z3{gpl6cq RR' ui4v÷emU'8xӞM{*Kekg}M�L֨+&41Hy8 +� H0S'E�~9#dArU.ELe*!cۨfxxxx8?>l|gxpI]Re KddI\ `1: r%&-m=8΂+ROiU4苊j'~n@?vs@^Ԛ I+.풖%$A#rƨ U Dw$WU,$@$K2Hs rY.x/K \F[}!�HÕp \DXYr_s $_]< dIF! ^qq ,1c@X:Z:޶GQURI8c|6ly?2s?} 3R[j+U ][]A HX 1Qͦeh u. �c{rA.y9{l9)'A<. KL༺< cDNq(\.2ٌ.@2$S΁|-#0- JԪU#[3:mtcVO?>[vIWCcR66l#Onߟ @@N( EE!EAuRԳ:U ,Zd]rV΂6wm nI9!2W悺E.+\?%.q/$2$W9Ed.)5~O>WZG>G aLL:`Sϧ.k?k?PWF{{oڡj g7<Lc*yMo,P nv[+yyy iUEeuuKn-=lg;m  ο⑻res\_pK:�n[_7-O86 Y/ 2GhK4x{së9\^)+v�yy?g!εN6u}TRw;1)p^Kc`)ov3`6B}A;m6ijuEID{rMܔ4II1-I|!7@be.L_p̵[�i_-n=tvA6|Jod%yxK_K_x6tA 5BÖݺv ;r%=PJ*w gg hZYn�Pcch/kC,dhh%wOtl^Ϡ7ԇ1]kA% l{I$fԓn^hj%.s/]}D#džG.d!;d2 L�"Ke)XH:YdX$jZ.\]U*YrZZ7rSN!źCATjv5gל*ZU(̩S 3~�>|6m6F,B*)FF`ooY�bUu CJ06mp6,:Z�WlM=~ D-^*CUg͍xȒcbS 2G�UeuUp(Ŵe#Y$ْ <mgXr`,E 2 7{{oͷBis̅f6T={ d?y:vl=hx7immm ʢg�gU9Ud|,\V B9?A6$]yI:;@.̖Sr Hw$CSg`Zӭi d,,?qH RVA>&&5ߘl3@ tXR&kXb[ʷCv�yk3ʋ͋Ӟ {& ZΉjhmh#7ܜޏE n }7& TUUk֩u /} QFjw}O%: _-,󀁌g<hh-jBQLQP8<Ef d�I4KN�9x 'unWd׉ orNg|!_,k 35a?$R֗/gd~Z~^~Ah5ǰàɮ_vF bAp5׀~`Sߧ>Hc$H Mi Ƴ6}+H}ܰ`,,]-߅Z N (�q e }C;_p˜ݜAI+u^]RaobE>2x_h[H<i y2d׉IW3&ke-d25Úޢ (P G/_1ҤKp܌g< wou~͓6O MKck9PhQ*}5z3 dL%s66\w)< A|$DB@u(ll BA^K<@>6?j@7@a#2MMtB9ȗ0R6xA>Bf )+`<nn a� HV[|݀PrNTڠpH玞+_ 3&O)XA'N \ ha4f1 teUTYَzڑHˏ-rl )fw 2qn?рٷSH!˻e= ܔgYe# ,3e&CA&jl DVsI~AiiZh1P0!}vl}sAgv 8;i~08[m~&?D/OmW26Fm OݫXC!Y >Fee;ЂJzm[-lKŷ@t$?(Uq7jo4 L(^2#G s4|B"S@&faz}l+`f`(f8-'1'h)A Ozڎ'67ӬH%r$IvZ[m\;͎6 BP`�h h Tݪ5S_ٺ_( 5: n& H6&53BP5EH@B)қ~*S='q fp ˼7y o60{[g;+a~@kb C詆 #W?Gxj3Ԇ341b'HHsή.ЦIZ4mt- A̓@tII02@}%h @�()r wOI{OPTMC#CK>x>N3{k, M5!/ぃ^'-L3vM iD#x3?,:Hi$@n߯K )5,7.UO[Wۀ6" (sņk!m|KjC^Nw :PDzb U^"PT^QJy Zee6, nWG?р^yӝygA&zjDI$JLvdL]3  7JPrPy7l~ֆjn7ƃvZZ(9!zvPy:6z_BP8-�>HmSpk˾}EPf3/_�Uw >'/h^rV\y&\.;�Cx8mmF͚F{i!-*$A -H5a+c@f&Xo d?[ Js3d6_MS֧@Fɛ Ui rXˑp,l&.K8=.m) Ó#;)4wu!M7A'{TYYxBuXa |!YH5gTO}Lf `}JPL-oT$Oэn UNuPc;;- cMm'ed6̐AM~6ChX[0J(\>%} |TJffrV w'Nh+Y`lko-=<0q�|/ٱdG^C{ATA1b 铅 Ě7}Ba Ko^f6XSH h*n �le YӀ;^rLc{7nB8 .v A~_$p�d,u rRF0{ m@ JUWA[zAAeAq܋!Ep@Ka1⌻'`coY*HPxXml- \-f_+>4<]hY?-PDσ=kA-cKOLqt'^J[[ WUq柰Cz'&H07ZCzd〆^M`%cE-]y8'M0Û{f{4PIRCj@9Usm-PAqhKU`,=DZ׷.h ։:ԁ{< 6]:esb^wyQzM[#HuDP)SN!~UZۘNgȾqraxg:6@/2x{xK_�Y6צBozT¤.r#@"r8qa o,;�(|f3*i)iC.u<F })cܗ;`k]̈́s-q9r.%77zl@v; eUEiEQ`Iη.�{ +^[e';8)jo H&i59Io R[uU]A")KY^ SPj@-hRFJYPYꞺ|K�xMDfʉسZj 6(F' d {{Pm\WSH=5..,1Ç>9 }.[? Km2"^f`ǁBص[ǃOAEkV)x &e O'>x$~'2(ZX$Ju Jmvz;Iw~oPH- oy;f uyZO'ݥ;U9-$pTkV/e 0kO[J[J>ds7Tڀx4f0R !yI scI-~x1Xނク?Ʋˇ}no*(O; 7  qPUD;уn 6`)ƣkq`f8H&7zBizP0�Ra f<s@yI 0 DTpLBDud`Ct\\weĕ7 l{ӆMBfҙgoGhH~A;ܝ7@j״(Ӯ 6AͅC7m;)|!%.m}Uޖk6NiH#PX6iJ9µXj|a|n-[ֲic6qэs] H5%�@<A&暴6 H255؜l)M)wSYY�[{[{lpJ38Ғ%ᐦrp({kr\D*@@jT6-?Twjk?8 ]{ŷAMue@-�cA0Po&!`P_UTjbLtN}Dfloa&gW̮;.05$5$,<vl۱m|hXq ިA53g)#nð]uyd]2T&zF}9{ <nSރ[{$ϻFop靥wADZ~9aM;'G`\)zN YiU.}m6z8-U Q,5Z_3a1F=FS2KZ;o}٦iJuIzuo5[5[5o=VK[r&pF_9fS1/h=3M5Ƿ H'H|8%pӠxK:^{phư ;v *f8(}AK}HPo"TKfw=R7tzc17PG\}]e>ɮ(eH<o9Wx%i+/^._~B +t;ʺ+뮬s&} lC |$gւjy3YpT7^áVoj:z<M1(/Of|Sӧ X;<I08mFj&K'QɼC/PGE;M2,wXc#Έ3i4zBQ'" aZz.G,W2+xyjxZsjKw_Fn4nmZV&zbcLcN?"XHBzKg&ZE^< ؝v'[?Ԏp)m 4V+2֑H >ݶl>i~? GrvӠiv 7|P UYa 0g`8 Q1#8 ӰP[~=`ؗ{[1m*-wFƧaṕ߹w.^j٫euꍪ7fZ;o2~+_m9w|^ͬ2!5&Hj�/z/7\\~k=2L/QPl;̃gOȄou^d퀠:^+_kFj*TJ5\ŨP{!`c0zZGu-ڗז&`5D[-kQ֢!Y„= {>,1fR'zw32l|X|%MxNG?^� C$RTnLߠjN ;>[|@©I&Q_-ߪ|Kh==\ ipNxbkBOm}8/aS;*_@ozHݨj FoăzI^T*f_KPP;!#Bz)+x^`+iOj'ک;޹}⨒\222&]rwVY}fh^{y,&j:]-_)� xyoɀ:Ɗ 23{c uCB)}JM"D~Pjv5w,!(khۮ7sPS@HyC!ꢺ*J)1܆TT&yna\\heT1YFVZy|g3P[|rE'>dɐ%CLe*Szp@|vwYwg>khh ?y,.-7/R(f&`)1OzO8ς lp!ж;fQ edI'2qdLk{*ɲPjpo/nì!% ajnY./ʨPP1EOm.:źu=[7,k9svզ}4hԑSRJ-m2xVY鞻۫hu \ǥ%ݗt_p_լ~8RdEB,o $vhmm/8s}{[<W|ҽ~eEL DG 83mN9`rWՅT~&X3Y5K-W@I5 `jwLVnP+M'ukbqy=0`v@WcKSQ54sxϡcwfm #ǕTTԻ{JUTed̑(F8CI eg]D-Qu_ݧjNvS_/u__2U[vh,? u-D Q{ ξa"v5?ڿ_.[<=AUU6NK8>Hp*Ce Y :ըAR8e\1 yƾgO:3 iI-gMG#>Q¤rrr<<<2.O޿XYgݞuIqUB_=e!No87Uϫ^x[YWggWLLW)ӵTVٹgPӿVJhBhJ2$r+_cX5V)OMOMOMSwJVfOgl9H3\8 eXagSIVZKhWZO85i 륾ʿG{Q[$Tzԫ[KwVm}Nk1 kb+TUu-[[kSD'˟Dž2P|0g -K�ЗP~@D�>DT=UOPҔsjF5v#H4YGe*SYL)S[kNbqjk}bo[oEp_q7mz;zꗫOp'f Wf]/P[+3jg_<y�<G�fRg8Y[[߽Q޷oy߬Q7ͯr[zY -BJ%zq<?z^]{^nHG<J@�HSbw<[6j_i_z߰v( ,%v1x6z6uPnuC0òv-qЉNtU^WQ*VŪXzǩu /*8y,XhDAO<ӟ 75  x:iQFC"6 j jMiUsL5Jƫj4HCo7FNgٟAa۝nwɱXT-AE(-qS)P*^)m]ZEYEuuu:+9ؔV׵]nٖK/5eFܔ/FM�.S���"zTXtSoftware��x+//.NN,H/J�6XS\����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/application-x-executable.png��������������������������������������0000644�0000000�0000000�00000000074�15104461330�021216� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/application-x-executable.png�������������������������������������������������0000644�0001750�0000144�00000000762�15104461330�023207� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������7���sBITUF��� pHYs����:���tEXtSoftware�www.inkscape.org<��qIDATxMQJQ ^ A(z)A1Q( 4,qx+]0u`aYka*va),qӜ,ͪb_HcuTcGu%K-+2뢇tQ [kwL! ҄>qer+DE<&C}a,"DG$ O 1!íYL:{&$Pwz<Ud!B<'q{ 8z:ۢnk G(wܱM &y!y4ѡܑLOB@5?C "&0,E ^6'ę٠u3Dr</̶6Y3*:j NM0 \pYOsC ldOyj����IENDB`��������������cb2bib-2.0.3/src/icons/PaxHeaders/application-x-tex.png���������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017675� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/application-x-tex.png��������������������������������������������������������0000644�0001750�0000144�00000001266�15104461330�021666� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��3IDAT8J\QyA0h5 BA[g,- by�AB 1pu)\u8?@ a}k6Ǩ*Ƙ 0յr{|ߒ$0` u]< �Xky! tZ� a&I<CUɲOB(Ht�@!2@ޥp\w$ww4`yyq`ess�7EQ*fӳ3N}E} &''j5DADٙ*ﳾ!Jed#&&&}ZI# DDb||}2+++q}}=�KˋCj$AhQivqP.Rh4277+VRqIZEqv[/..h^�f�=a$fYEQheh^<�<<<ϵ( \(*wΟ{[~Rsq����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/viewbib.png�������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015756� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/viewbib.png������������������������������������������������������������������0000644�0001750�0000144�00000003643�15104461330�017750� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 5V��0IDATxڵYlT眻̽3oclL6b Ȕ%<Q@jEyH>*oU**}H#"A] @-F iIU؃>\Ƙ͘~ѝss˹#1T'nM~za׉;-l^M2880D\2LxxmFJeC&[ qRo> `f铧͍RFQ1H)R (54ai}ϟ߰ˁM)G ?#KRJR\6G!3cGPVke`CGl�ʏ~eDcx<D\ױqrĢLT.?J\Iuo tu^FJzj`[ A@z$˲p]B+475ŤF4#W~E$vHD \|/B4=bQ\Ga;6RhzΘ=^!_(Ȑ2i;?P^{ke||?E<׶dwRD}hB F]3~]^zCS ȯw碔¶Xeq"hq;!vlNM1fLaZs h5uRJ OT|T|2ZklF )oS]SMf8_] B r]F)u[L4|T*TƶqlrP69!ѐ  e��q,+L@ `[6:v,Q n0Ơ חJl%1 `p0 ORGPB2!$X.c1i :(cYN`d2MXpzx8RHV dyQl5.^yX@5q'5n\O*)K0͑[KKJ,B)%%Bs=h҄ueMfS'Q,A:c0B_R%9u-gzX*t�v.\{ D<{eXD*/RIm#�x{WU\1c ZΝĘ8HB@>&|e`S4' shL#A@z3XxtR<}WLs^9R c;c΍!y}߼řӃ],`_ÿ$}Wc['׭˫?s&W/fDA)1\|c#OlӞ,F.W }dcJYcd6twԩ$1+I$=VP[WCu`_75}`j"gxM?~s1Ą 5kY2ߟ"L0kvƀc@k=UYq k'@ qgl}�_4�NZ c+*p2zYT4Rߟ۹iW4s BqEpZ,9.MU#xan8O<Dk3V%gK9qP !ĴӖ#_֜I" {+c X^+_{P^vR:=Z31xL?Wlc*>S2N1y5d6k;Gqyy.d'|JD6jbѿo+{ұz]"}{#y˵?ꐴzU8kWpמ�_5-EuKdihhhd�^ ����IENDB`���������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/configure_network.png���������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020061� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/configure_network.png��������������������������������������������������������0000644�0001750�0000144�00000012144�15104461330�022047� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs��1��1(R���tEXtSoftware�www.inkscape.org<��IDATh{]uk}5rHq$+֫rlKv$u­մq(ESФJm" h-�6M 9Q;%YJDR$޹{;zZR$݃}{oo}{OAQY:27Hn=,y;A.9nx{~xMGdV6O{G+@Ɛfj6z\z[rgsnB2X@~,""wA:Õُ}OS.f%#ȰN�(css@<A$qhps܆Xyv&wK]O~1|׎-Z &'7c84+Ic{ރǃF( GUeza`sOK[*?;MwL@D/~?ȿv$:01q5 vwiI[Ҽdƀ,+3hNՉU=y=޻Qc{߽Jib?1N7e0tJ#dzTf<!/< X9HQ(%2J >y凼};lꝀ_Λ>;J%.(Y\dqe`nRY\it\b1H,(٦(nJQaȝ©g*ߩDD|;?urKw1J q'JO酭)ʲ vCDk8`VҊ 2t{ ϞvaN}t  yrG˟U6zD1L =6P<b QSǠ+|//۠t%"/s %&4ѣ^DQ1~4+n]^ûLoI{}f -Y(-S.јY8y&׮;j=nL|z5~--q=G9ڊV&rq S[w["ӛ?@ϜiVU,ya$ܼ6Gi=Dq@wSk!ˇvi86VRp(*ab"˱:Hsmg*.XZLS_ pXD""g_;N<07Isi8fZ:ַlSy> *م:jDSSU1"C=AЁbç/\c6Wc㳌68`Pf= lu2I "$Sx75S[;pn}P S\V+ 4$gtzyqMv!//8qߚZW~K""Ӌ͋0)c;Pv@cM8Cs"^ 0Nݲ2 ar4zz'^إ0٪wqJa1dJB4*$ͶPWpAHel:ÒFdw4$ED(j5ô?*p>x1"Jqz:*՘Fu^J+�NP1F3GM7F+S?Bٽs3,+QfT+!hS:^aZG᠟'xA)Og@•6 0 J7m- ŗ[ N,EZCSĵ*E6�2'4!"WB!"27o1Z+x.z<qJB5 13~Vj=3('F*JDkҠN *P\[zO5yK(?4E}7hIS~?u0)yl ;J'PXъZ% Z!IB0b7b[r#X^k2(cx)PZV(@b11(͹37=۟yv^Zzh΀'v {9p(! AiCZ%S/F(2 F#[QZZaEFP> a0Ck3DAƋPox>." |<wE8ubǟdc{i%=RB%(Ƞ(G6J%IzV1B25(D)N @L#w(ny%""/wOi[yMj#-,&۝Fko]|`cgwFnJk2Z5d~:&5*h5&%J ZqIZ"J!hWPA)KG<@c;Ո2ѬS.nt"tF9S5(X ZP!F'2]\ yJ9W5A6: cB)92*Z>&%<y>FTE8{dyD QE;16hBpDq�cQxz Scg=YVPc T8vV%+B 2>;/sF97-5dkCC#)'.Ap  (VT ISX_1QH@<9@)! 4~Fԛ1A`p}FĿ矸;D9O'2[lJQ2a8$#xuqTJKOe"$F<6̸ygCpv3x<{ wgxFnd3Fi߽ϑk-t@^^:(kWw+1˛]Dx<o`<g=9wǭNwTB.c J H=n9d{X_;߳-vnpJqTh GyhxpWj5Ϟݤլ1 w3|+ޣ߳^߉/y 2x\Aui2IJcnhT`BL+> h PƄ`3^@aEa+҆&/mqxڻ= gkyVyko"/~8̙IK^>W!j\M(_{֦{WnF~B/s\ sXqޣ h )_;(u];,9-7�tjC;CՐV=9CMZ/yM(=]|>hn_i2߈seMӋ,OְjuǹJ p$[ Q]|,|Bfz<??E*xliwFID5`;bXnY| V7cD%c#2KH'g廖 &0Wq k$#% (˒:m _v;xrg~~/)6luRf JXjUw. Z@k%(%(59Q`86Sca 4(5k uZUË]+1 הN$Ou5?d3ƍG(<9 g<~O:K4(E-zycxrO/3|ZP3mJ/^c݁HCxdsxʥ \Y~y7pg84j% p" SWyƐnZ ":0B-JXlhh*S:l&Nƻ-[Zli1JYd' ߻vv6#~{}L6F݄8ĵ�59\Y8";u< ֏':Nr1Zsz^byjwlݸGBxD*ҞOѯq/e&3UFy戫H .&4yB#LW U\-`Xiu6vK;((K=J >p!Yw?v|7"}S{ [> XBChﹰ5`wK B#ThE=Pk, y.o(c-ʕhA БI{j7-{wo۴?(Z82,w; 1Q(bU1WU&nfi„XtQՊ4(D:Ը~dN?v|3o;^c<*3r<&D!hMVzW6KUC#*X=[#u,WCB & QJ@')tG o\iv_LVr:*JΜZ4芢c\ijTչ,ԈP3°,g{Ql,Ѐ+LS Q6#!"κ?XZbmyYа;JkZ2b'%qm~%>)zan/\Co>v3o6}-g&_pi&jnZjrJD`:8r~RrqǷEIҾ'ۿX9Ϝk/=GUl QwW%0}i* f̱IN,7Gh-'FaN(ʒ;a0Mkߘl=O§-e3+'=%yr?JAdC@c"[v iAMϊ-eh+cL܍H/ɥ;�� 3WU.ִD&AS⒵^t OnbC|yer%Й`_ĕ+:$=TvQfGv%_ DХ3V<2=DqeλRWs2JL&&!AJwqt=lص]T>N <M5CQy,b\Yû,],E* ʉxqK1R*è?T+mjA~akP/??6W^񜚇uV%zY=i**u|a] J ou``<x�#g;$E����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/configure_files.png�����������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017472� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/configure_files.png����������������������������������������������������������0000644�0001750�0000144�00000002024�15104461330�021454� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs��1��1(R���tEXtSoftware�www.inkscape.org<��IDAThYkG7RtѩPr2O ]eb|5%/uNL.bpIVֲzDZ3ff͘ iI@x6G////DQdm8e=:3Ƽ> "[qf7�:Ԓ uĦ)91_nCuƦR 墭G^U^!Bwq 0ԺoGhd$s3(Mmk1(QMU]W�(~v ӈ4M_Qv4NʈUa(FGUzwww�zp8W՛ ?58p8U Oŏs[axU1[q6IJ.|(9 " ðXkP1u&�0tG__а� ߙ瓓_}%JA0#_WUqp΍(n�xpf'hn ֎3}/$�0ƌ}Jᜳm'r+"�i̺7 ëZ@QWU&AðZ`0X�n#v  Y[HLi dh�rq6Ƙ �x]T �`@H$A rdWD|&Z;"{B$#9CdϚĕަmzF^�I^__Ϝs/*,Twۜs=3yI$L$t唨jS\5kw9 A,&I9/^ n&}�X",oUe�H�,Vr- 2u�\lwVwY[]eSm (`߱;7I@x[O R����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/configure.png�����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016310� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/configure.png����������������������������������������������������������������0000644�0001750�0000144�00000004144�15104461330�020277� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���gAMA��ܲ��IDATx{TƟ7o qQ: LMѣǞhON\le)(-NQk,A2pI yIB?Lb<w{a$,�/�·@.-NJJ>8n׮]Ǚ9{ڵkee2٤Ç2%"N�S'NMM]RK�Hxxx&""㨯\.]tI/֭+uv@c>SQQ~2 p8̙3]aaa"o7Xb/JrX0UUUX8r/;V,5k\X,h/"@zFFF @SRQIII#�<C򚛛U,Ox8qz=t:2 444DyyyeZV890Q�%%%N<O�g 8j%VK===hv;xhh4 fڼy!Y`*((@6(##cd h4E===d6IՎ{5 Zym>x&¥޽+߶mOCBB^~�E1˖-{W*n7�aN'x<t:aQSSw�+��#*VcD2��H$Eqqh�xOXaTww7GP<ޮX,q[l˲+ӧO_NKKރVx,X ͆v矫`��@ԩRTqUnӣS:h4�B!F#;rE"```ʕ+5M1bvDݻOIՒZ׫�0G$ ( ;KVTnllZjmm%NG.Z�}?%%99y~aaQQQRI�N'f3aT9=vqDE<_-zٳAȵ̘t8=x)Ngkk/Xf_|}:J͊O/!rV Z;s�~K,YZRRrN$tCL0|n],C�|eLd\|kǞ/U ##cՉş0 ߣ"X> ~~Bx/zB^:<OX KQߜK_ʕ++,,,zH"D!˲ Fnnn__|΁.mW1gO$H(1 LTU_y GNh"t2L&L&áC�npcȽsFlOeYLKy5!K=M7T ++뗹GC38hBBb1BBBPQQ1\ll~;ի3 x`Z"F=7&,cǎw}ryaZ!$ 88#6l㸳,Ǝ^:U̞1j/@}Crbuønݚ{Y,VXG2 @aÆ ZOx08mfM$ǎ𓅂q;p8<3ti;[o=1b0L&T *11qV%Loߦ O،$+>+iRh_Դk+ y�}q*�MJJ+2 ^>Ё+Z.4Y87t;0׏A+_ԟ�#ɢ%IX,NRm)))oٳ]�j5\]&IH(@3 ges^W( aDGGx^<xNQQі q}@TJcp#xċ/N݁�i^^EAd2mV ~ 1w./(9b?"~E-{j9�b? ^.G~ b<@)xO5_�0m46�����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/add.png�����������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015057� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/add.png����������������������������������������������������������������������0000644�0001750�0000144�00000000302�15104461330�017036� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������RW��� pHYs�� �� ����tIME5;x���aIDATc P#جRpgA1Fc 7ԡ3.nb`e贄뻸 aB(1]ۏ) �F;#VN����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/viewZoomOut.png���������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016636� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/viewZoomOut.png��������������������������������������������������������������0000644�0001750�0000144�00000003077�15104461330�020631� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;��� pHYs�� �� ����gAMA��|Q��� cHRM��z%��������u0��`��:��o_F��IDATxb9s&xxx4 Ǐ?8HDDDׯ_ߟ>}zPXXxo0|� 9, sXYYݿ}6EFFVEVV(oGU>{lP}1� Xa/##:''Gv99y],V(--鳢_d`�bd񐖖-#((�t_EZ'߿g.!8  @>>H### 660&&F8edK2 X]80H  tXl@.#Zhp80>211a5 XT{ׯ`P  4�d)3?`d0l� @.G**B@#02@"`ׂ bgge+(Ea�IJcV ̬  ZFx9?s~:T@,?f-Uyjk] "P<~2`;L8 2�b07ax+,̽RR,p32?0W!޽;}}w[[[ _~oPR@�182| ߯Du'Lw>ܹϝ;o66VN`@.0#\@׉ 02ة1ۨ3hK02?tƷo={\`Dmݶm3gr<x'`a`j @@bW?_YN}oO_00Ǐ` ۼys,(>|+0>$�ZLf\uwkފ+k&bdxAիW W5YXX,vׯMutt�}#�+@� YMXeE8;Tq1p1K y&M7  J-^ 4PB@@ h&` @L̜Q,@?203r2 0\}/?s' *555?*ŷxA�' B$S*0;$R`pC\ 1pqq1�k87n�]kXī _ʞ񟉙o2nUgh,3ؕ2pp0(10g<- +_VP0`dd&??{ ߋ+ "?~e �HD1baa&''m mq mee=�XWo7YE: 0X2 Χ0A<Fhe߯_�;TY`�R>#I����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/cb2bib22.png������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015616� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/cb2bib22.png�����������������������������������������������������������������0000644�0001750�0000144�00000002166�15104461330�017607� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���bKGD������ pHYs�� �� B(x���tIME /1���IDAT8˅?lTGw;0'0$(d#0H(NA)R(DJR&i�tCC*2}"Q\D a;{vSlS-v5ͬ<yZ0AH.羾8;~ڵ/2J[\\pDcLavv]k'/_$IC;w|'uG}z޽KƘ8-qBa^vA{&4Ɛ9{,biqƙO222BEaEu`}W6;vcFGGie333iʩSHӔWb=׈Fk>|$ayyk:gZk0dii)�L7o>�D!c* j8q199P*(J=pԀQJ y P(hmQ(%qV _�i͛7[˶V8dY(%(ؾk24CE$ICZ+R(Qf㙛xdwfllb1Bk|$M!MSeh @6KoV>|%O.9G"mC)ZVR4mْEooocvf[twww&&YiG`ʚ/QJǎ*qT,<gӦ,s; Izp+Rkͷ}L`4|ȉ16]…(o�sx?c=E)G<]]�(�Xk1i6!kcϞm~9#MSimج7`%I("Ix[LZF{{;;n|ʕ9WS*VsԫY&qLEhqR?hg$񃃃bAk1f(޽V?L] �& l6d2[}$1WDkV)w 9ty:5[U6`.(/�?$‹����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/configure_clipboard.png�������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020327� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/configure_clipboard.png������������������������������������������������������0000644�0001750�0000144�00000003307�15104461330�022316� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs��1��1(R���tEXtSoftware�www.inkscape.org<��DIDAThKlGGMJhT% RQrPQRpB[ P*AqA*7ZUBIB(PIDm'ce=kOw;}3]s0zR+�ݻwxKseYJ)H)c�w:hm p 3\$!tK\8c 1PJ91ι)o.^X� <xpRz2˽dW !�ѣGG t7l6̇2 Cj5RT022A__ߥngp0R(johhh_:inJ)l6SǦ%X,ߺukiXۛHmۘad2nﮮ � �&)8�H)9O$@!!2�RlQ. XZZ@pomYV6 Wի^�tB=s.y3'@4. B^{[%!J)[F[y_D/!vj�$�6�"R]c N֏`&R[�BD[3%L6D}6s ,p| }yBIEHqg!%ZFs�Gi}>7k joK� u<tPQ72 !RPBXaQw (O T@ xG4ڢ z�#QWPY@(sn[FAZ'|j{#ӽc!C�qIPq60If"2*tW3K@} N(āZu%i 6 <,kQȚJ8^P:>T>~Dl%S1{]`?>:\\QL@ !G1ض JJ9�\(>JQg[X__,Bf BbOL�,@\7)mrccc+xCG|>P Y6R,/߰w^lAww7(+x_Ǐx@ NTO8,N謭Z"J{��(ȣN:\�lTóP@'mVWW~|_|QZ@M 'ePjX6߽wߝpٳg�,,9764sܺuO:5wj!(c`.,-U˯c8w[ض ^5$B0V%50L|ׯ_3YT4&9oBL;&ܜhB Z T^ `lg=sιDw�[76 QJJTJm۶1&(1cs![n+JZYYQ juzzzߟ/JqH(HWRw8R\7!%9Tݽ}kT*XIEbi"?2YEGmE����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/package_network.png�����������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017473� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/package_network.png����������������������������������������������������������0000644�0001750�0000144�00000005115�15104461330�021461� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���gAMA��7�� IDATxklucg7i-"UÖUñ�El#mmAO i"mC/ ȇARJrWmzТdo.].1;3sY2q6np0`9gFAmcg=ՙ9ґL伌'%a^_U6f͗)<W>ȱ>3~nfjWyh>8]ضֆr-rKyҵ~xL@NΓO%S(ՍcJii iEIٵV͏.}:p" >;{C|ά|1 6jh6(fub6)WCS[LJ545eHfWu~=/u۝>qC FD+Ak1iI$AJiDhD0?{7Ƕ�MGN1$\]US-:sRhmڮQ:$w#3]o,$`ė~ч?_;цfbPdi%ORR h4aD=h hgo!4JiaH74;? @<~c_gh0z% -aDibe%a,19> כ8eY()mPZ#-$ĉ&J=Y7Ëֈ o$=tg?KKA@@KgTV"hFzg~W6XX#$E~Hhz{Q*)/6d&ϯA __Da> 9"łV4#g"0tucl)%@o/}`H 2MQf`aU«ǟ>05 U abiVhE103ˇO BiY!p~</6f4m.@8.sŮ|ircyopWD4n wB%wh%wuhƐ$ !}NX#Z#6 x>Hrpс6׸4WPTIoR\N6R ±-l[ Eb6 +@UÞ{mMwvvr1ό>묮ut"xl[O=@_Of+xUsQo$?zJdh9>=fd[;2Ӕ*ey%tt bLϽpr%`zz}C<qvfrM:X/.Oϼ@?oؖ!0ber_1]xgTjO<PQ)C%"׿s6Aݧ륿7e[dZhJT8}']Y^ZT )B–Bl,2\DJ;q"1o}g{ > j&2J)lV#"DZ6񉢘oS 4-0mik~̵5&$(NwGƵYo.:z7涸pmrF/ͪ_Cf l&Q+}BN08ıBiApcWy ߯!'оarTXZ4(*J'..^'нnNnBlrcf3&6.sy.m;-L9M+5 ;/MutO7tM ;qm|o.!$5^H:H!˒R.4f%@~ jgϞca'A cR�ؖk[Ms-~-Fw__}z{a"`SA"I oԢ¢/&~ᡛ\NK&Tql\2MƵy|Yνz#- r^61z V7\z?`wj۬*I_ɱVj:8Qv4l& ,2(m\!1FPHip*mݴ6 $?nnTQNNϜ<dtL#8qȶAxqݶ;Vml["$Y}QDFU/_ XIs'̳SͦPF )L$}Y&D1r@W`zWw'6Z{NO{t`/G]ے!RD#Ƥڱa(M+V4[r횢^Y 73.oAŁwICsz ]9ΜKGΥs<g$$QME+[[sO}D/ pykճ-FGݢ#ӁcKr&a:maɴ2ZZ!$APcw.gQ#m7o|{c卹k3 s^''e=%5b,\?_� /O9M?C'➑;ǻ{z,˱1$ѵZ4⻗^/�s�c&,FUjx%,S����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/select.png��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015606� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/select.png�������������������������������������������������������������������0000644�0001750�0000144�00000012051�15104461330�017571� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���#ꦷ��� pHYs��7\��7\Ǥ��� vpAg��� ��� ����bKGD X��IDATx͙ pTնuNw'Q&2#"2PÂ2*A "sApA A$9d褻ow+U꭯Zw?k>!wmBZ; !w̻͟BUip[JUT]Tjë5^BgEgsn`5DV*P .1j (X?M9 @&GkK* @"\h"W&> D4I`ja;M|_Y+VXE)KRܪZ::�! 7<pWM#sbWݰa1Ne/M7$d$A]%Se*0י 2OF(`c5x/Q  x]뤁f<AT @5*j`7^8#`6fS[%7Gr>2* �!!0CZj4|RSF*,Uc1%Enqb9/a@6gd$XH҅;0GI_|rI,0%|�2[ސY"JA>J#l*#jOzF{=KcN,k5%i�RqVBi5̦ԗn<5<'}ZԪ U\iC[V%0Vb$/UJӺMr ,<Cj:i|j.T� e1-`+^W?Iki ,q&d3 �T#Bǟ\ iAKZiwS\Lc%^hג[܉SIn0> j%Vzp}L{c We*'31ʁb1qQ ?w/;"E,rwBcfGc JF?>]< Ìc ^yAZ~ ÅP8(oHi!P\˼7l>=7FP*"u cd=YN ^KoZGAzIV `zClN̹ؽ6XZ#pvw6uVH5iFwb{ D?*z1TͩY5@Y*/CXKӒy 2bt'c]w? ȣJZk-#r;BGg˰6'G5<69638!qY fKPߨj"2  +7{]`cBj l2ZF7kT{Fi'I >PgE.a8s-m@>!59h߳Ûݾj SGP0pl+`b#91\>mxEK`2g(:\( @!=L9h09vўM$Ȏ ?W2p�uz 8$d|ˡ֮25.*{./<z]0͟A"edό(D$:]5{?|/bfS eXZV,y/퍃 iǯӾNV|;6 \{/i40XV�[ mh-LHtqnG_G? oL{ FWS/~i(0nI WdWSH1:Q{@xk0ucT\aY $em/Wo[\Eo,Ig vA�#IdlZKO'\n%Qk"@7w<Db]CYٮ%"EPlI}?8;y |sDm7V5~4/,oz@PM8^^ 8 g M 8 /4S^iy gVZJ=>)lI_"0t*E(jB,soIVM>ZCK?ުnp%v8?QYptpc+̚!�5AU@X)Y+S=PIЙN$dHDI9:AXumz5u -q`|ZePpĩ{zBR 'U F|{Lޠ<HcS =rXf FAd0&568'VOlƶ.bTiovP|j* "FNTSI@SUQ5yUlֺظdll.p()9kqP}{WD*o% Y&2Ѝ^)Ce(! ;O'׺!/+pW5xKqu\Ia߆m^PTE0;V:>#̨a8^oCтiEro]'@׭@_e)TUa|Kw%:G,q0n 8^``n@] @ou.d!㰵2 -ޥގ98bub`D PBLG>dL(ʼ ej|+~Xed@mUsc*>ed#/�4wa@5pA<Ћ_Hs6Hm1b N̴Ӡw`s,�+LrG5 OCO*$D6dnv@L5j/nPtV%xhn@Dq(R#jPw #-5Ƚ)B΅`/4|b=Fg5c&XP0y QE6�Q@C4TeANj�$GY(<ꁞCASuM j1 uG|jZ#t+݀U5]M2Yۯoksr1 p`v1;7?3J[q1=1I MA@:Y$c>-Z/8Y΀D jjj@U;q$p#�(R#�inrKn@]zuoGL Or/!Unxp9]nWGꇹ@x:j| =5 tc7ZV\t"D4pg]�Nr3X? t/E8 R]I3*[Xk&ac1x^dPo�C| BC]HmZ>C5fmSQ|!匧rXo-k"me iy42Fkt~Q!-5p )2QwRvAsmځ]P$xΛ8s]Pd6ܷ~wuo+oomYF+� #%!W_~ ݻsITg#{#Jl.8%3F 5v6t` X 'vA)ƫ` �n,ۥr&AqIq] e5:xJt;}s~N:{ߛT k'\JXTSu.P!4T&�Pm28He $Sҡ{]>mA,AXe(R0` O jwA@#UV B(T0$8fHSZBdMwc kXET{Tw;"L8n'ZO7owc}ҼI*̫NO;mmfo=:뺨I,ҼOw,5WG|ʫ|p۾m÷b:2ʷ Z%+!9"4Bs3ό&`?clS[>۱EE g^SPip+v HoHLܷw`T6Rv{ 1Ng;;uקshJ)]LueI,/~6uP4TA_�N;ޓfvq9___grf^*^*+Tr\ۧ J•ʝ_E]Tޓ]Q*omz|Rս}Ms *"繼<<io(uqJ>K(upnR*-cպr1Rk^^3e͔CVXqWOş3;1;/Qs9(R~B|%K׭9@}ۥcެ<5UUza:j~~GFu1;HiY[(u6L/+9zf՛UnV 5|ȗi1&HXVhF\ �R7Az.*7钷JRjO=-g9\Ynغb s}\rv ;7h_;ךdͷ>shC [2df2;7ߓomfH})vWN:SJqZ|eӕwv04�s=?_>~}QXH;RӼd ;k{]_S34i.?.(GjZ9V.)*s$u)EF猡j'+^|^=S]B�xf? k(m-۶^J+ EtL%}iZi3jx Q34֟dTIDkB*fӃ U wk \[~ yeɉ:k׬=�@'B-G? J! #v+ݯ''W{Va9lkjV*C)RRP�'KR)H~DpPYH<_l-vmK-m>6ml5�,d*A@?iw*mCZoq %A3Qݾ x�ࡪ͂Prt.h)\p̅���"zTXtSoftware��x+//.NN,H/J�6XS\����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/PaxHeaders/application-x-pdf.png���������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017646� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/icons/application-x-pdf.png��������������������������������������������������������0000644�0001750�0000144�00000003701�15104461330�021633� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Oc#"���bKGD X��� pHYs��7\��7\Ǥ��� vpAg�������\ƭ��IDATH-STݳ{vYrKX "Q,HS/U86$U ֨H [&!Ъ"^bk**+||kf͛5{V`O@^0cI->P!-7d" j2set0׿Kce)7 yiԣYX62y<_ZVj,5aa5a5j!Nd�Xc7+f;WҟSR[wLQČ[J=EL&ߣRbN&yivWk†nkk|ehKEKEr_F atGD_1]ܯ'|-8b6>u 1TcMf>jJ1Jl%p.]~~~iإ__-7sbF!qleq, jQP &u.~APpl'5кRss;;~h=TVWC!0h vt)*bL BC�(�|"FaPH\)W.vINbN"Y|cu4V}AyP/1r yyE͔Ӱڐ"J7F1 EB�x`pvim(}}v�JR4ol�=wN n~WU@y<E)*B� X@pd>>@uU몀[KwU,,!&$mk+֞#AJ:]tg8N:^J&6u`A�>�e зl[0U47qgtqȝ *|L7*:uP/ʿ;p{wх;n9~�tP~J�)'��qĢY4v :Jt�f @xGo>V@̝ 3z2B{@Ty) |؂^y+sx6@q @3�żൃ�]ρ@xaB `l4{}aٯ�򗯛qlcĖ^PS*Vik'M 5 t�a=�)X�$i�wmwZ+-kݶ_<rsBQ(2(RSE\B%L7W7800! ZEh vY )jWe>F-5zIc[/gZVwtX;xՎWV2 jk4SY|A993]zyRWqYgaҀ(k繷ϝ|`a}i/vvԺumAg󒮒۱ba? jwwt~⿖g׺ÿM/boM�+l*Kx}D_jګj^r\|̘̔LӒ\1ñcDѮh@# YH}beeٔo6HL2fZ$6J) t#zBl{{vkCNË_JJɊ8}{2O͝DH55:j4 I''q?Xc}]Ifˮw\D!o炄baGXMNVS&M~auɺUU.s|!ƫƫh'''?h&Ϟ���"zTXtSoftware��x+//.NN,H/J�6XS\����IENDB`���������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/cb2Bib.ui���������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014130� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.190766041 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/cb2Bib.ui��������������������������������������������������������������������������0000644�0001750�0000144�00000067615�15104461330�016133� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <author>Pere Constans</author> <class>cb2Bib</class> <widget class="QMainWindow" name="cb2Bib"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>1432</width> <height>820</height> </rect> </property> <property name="windowTitle"> <string>cb2Bib</string> </property> <widget class="QWidget" name="centralwidget"> <layout class="QGridLayout"> <property name="margin"> <number>6</number> </property> <property name="spacing"> <number>6</number> </property> <item row="5" column="0" colspan="3"> <layout class="QHBoxLayout"> <property name="spacing"> <number>6</number> </property> <property name="margin"> <number>0</number> </property> <item> <widget class="QPushButton" name="ViewAboutB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/cb2bib.png</normaloff>:/icons/icons/cb2bib.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="ConfigureB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure.png</normaloff>:/icons/icons/configure.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="SearchInFilesB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/tex.png</normaloff>:/icons/icons/tex.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="PdfImportB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/pdf.png</normaloff>:/icons/icons/pdf.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeType"> <enum>QSizePolicy::Fixed</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="ExitB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/exit.png</normaloff>:/icons/icons/exit.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeType"> <enum>QSizePolicy::Expanding</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>205</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="ConnectB"> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/connect_established.png</normaloff>:/icons/icons/connect_established.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="MakeNetworkQueryB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/package_network.png</normaloff>:/icons/icons/package_network.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="ViewBibB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/viewbib.png</normaloff>:/icons/icons/viewbib.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="AddBibB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/filesaveas.png</normaloff>:/icons/icons/filesaveas.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="EditBibTeXB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/edit.png</normaloff>:/icons/icons/edit.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> </layout> </item> <item row="1" column="0" colspan="3"> <widget class="QStackedWidget" name="stackedWidget"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <widget class="QWidget" name="widget"/> </widget> </item> <item row="3" column="2"> <widget class="QToolButton" name="BibTeXDir"> <property name="toolTip"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> <item row="3" column="1"> <widget class="c2bComboBox" name="bibtexfile"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable"> <bool>true</bool> </property> <property name="frame"> <bool>true</bool> </property> </widget> </item> <item row="3" column="0"> <widget class="QLabel" name="TextLabel31"> <property name="text"> <string>Add to:</string> </property> </widget> </item> <item row="2" column="0" colspan="3"> <widget class="Line" name="line_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="4" column="0" colspan="3"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="0" column="0" colspan="3"> <widget class="QTabWidget" name="tabWidget"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Minimum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="tabPosition"> <enum>QTabWidget::South</enum> </property> <property name="tabShape"> <enum>QTabWidget::Rounded</enum> </property> <property name="currentIndex"> <number>0</number> </property> <widget class="QWidget" name="tab"> <attribute name="title"> <string>Main</string> </attribute> <layout class="QGridLayout"> <property name="margin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="6" column="0"> <widget class="QLabel" name="textLabel1"> <property name="text"> <string>Keywords</string> </property> </widget> </item> <item row="7" column="0"> <widget class="QLabel" name="textLabel2"> <property name="text"> <string>File</string> </property> </widget> </item> <item row="0" column="5" colspan="3"> <widget class="c2bComboBox" name="typecombo"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable"> <bool>true</bool> </property> <property name="duplicatesEnabled"> <bool>false</bool> </property> </widget> </item> <item row="0" column="4"> <widget class="QLabel" name="textLabel3"> <property name="text"> <string>Type</string> </property> </widget> </item> <item row="4" column="6"> <widget class="QLabel" name="textLabel4"> <property name="text"> <string>Year</string> </property> </widget> </item> <item row="4" column="4"> <widget class="QLabel" name="textLabel5"> <property name="text"> <string>Number</string> </property> </widget> </item> <item row="4" column="2"> <widget class="QLabel" name="textLabel6"> <property name="text"> <string>Volume</string> </property> </widget> </item> <item row="5" column="0"> <widget class="QLabel" name="textLabel7"> <property name="text"> <string>Abstract</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="textLabel8"> <property name="text"> <string>Pages</string> </property> </widget> </item> <item row="3" column="0"> <widget class="QLabel" name="textLabel9"> <property name="text"> <string>Journal</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="textLabel10"> <property name="text"> <string>Author</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel11"> <property name="text"> <string>Title</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QLabel" name="textLabel12"> <property name="text"> <string>CITEID</string> </property> </widget> </item> <item row="0" column="1" colspan="3"> <widget class="c2bLineEdit" name="id"> <property name="sizePolicy"> <sizepolicy hsizetype="Ignored" vsizetype="Ignored"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="1" column="1" colspan="7"> <widget class="c2bLineEdit" name="title"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="2" column="1" colspan="7"> <widget class="c2bLineEdit" name="author"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="3" column="1" colspan="7"> <widget class="c2bLineEdit" name="journal"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="1"> <widget class="c2bLineEdit" name="pages"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="3"> <widget class="c2bLineEdit" name="volume"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="5"> <widget class="c2bLineEdit" name="number"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="7"> <widget class="c2bLineEdit" name="year"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="5" column="1" colspan="7"> <widget class="c2bLineEdit" name="abstract"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="6" column="1" colspan="7"> <widget class="c2bLineEdit" name="keywords"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="7" column="1" colspan="7"> <widget class="c2bLineEdit" name="file"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> </layout> </widget> <widget class="QWidget" name="tab_2"> <attribute name="title"> <string>Other Fields</string> </attribute> <layout class="QGridLayout"> <property name="margin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="QLabel" name="textLabel13"> <property name="text"> <string>Book Title</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel14"> <property name="text"> <string>Annote</string> </property> </widget> </item> <item row="2" column="4"> <widget class="QLabel" name="textLabel15"> <property name="text"> <string>DOI</string> </property> </widget> </item> <item row="2" column="2"> <widget class="QLabel" name="textLabel16"> <property name="text"> <string>Chapter</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="textLabel17"> <property name="text"> <string>Address</string> </property> </widget> </item> <item row="3" column="4"> <widget class="QLabel" name="textLabel18"> <property name="text"> <string>Eprint</string> </property> </widget> </item> <item row="3" column="2"> <widget class="QLabel" name="textLabel19"> <property name="text"> <string>Editor</string> </property> </widget> </item> <item row="3" column="0"> <widget class="QLabel" name="textLabel20"> <property name="text"> <string>Edition</string> </property> </widget> </item> <item row="4" column="4"> <widget class="QLabel" name="textLabel21"> <property name="text"> <string>ISSN</string> </property> </widget> </item> <item row="4" column="2"> <widget class="QLabel" name="textLabel22"> <property name="text"> <string>ISBN</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="textLabel23"> <property name="text"> <string>Institution</string> </property> </widget> </item> <item row="5" column="4"> <widget class="QLabel" name="textLabel24"> <property name="text"> <string>Organization</string> </property> </widget> </item> <item row="5" column="2"> <widget class="QLabel" name="textLabel25"> <property name="text"> <string>Note</string> </property> </widget> </item> <item row="5" column="0"> <widget class="QLabel" name="textLabel26"> <property name="text"> <string>Month</string> </property> </widget> </item> <item row="6" column="4"> <widget class="QLabel" name="textLabel27"> <property name="text"> <string>Series</string> </property> </widget> </item> <item row="6" column="2"> <widget class="QLabel" name="textLabel28"> <property name="text"> <string>School</string> </property> </widget> </item> <item row="6" column="0"> <widget class="QLabel" name="textLabel29"> <property name="text"> <string>Publisher</string> </property> </widget> </item> <item row="7" column="0"> <widget class="QLabel" name="textLabel30"> <property name="text"> <string>URL</string> </property> </widget> </item> <item row="0" column="1" colspan="5"> <widget class="c2bLineEdit" name="booktitle"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="1" column="1" colspan="5"> <widget class="c2bLineEdit" name="annote"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="2" column="1"> <widget class="c2bLineEdit" name="address"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="3" column="1"> <widget class="c2bLineEdit" name="edition"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="1"> <widget class="c2bLineEdit" name="institution"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="5" column="1"> <widget class="c2bLineEdit" name="month"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="6" column="1"> <widget class="c2bLineEdit" name="publisher"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="2" column="3"> <widget class="c2bLineEdit" name="chapter"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="3" column="3"> <widget class="c2bLineEdit" name="editor"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="3"> <widget class="c2bLineEdit" name="isbn"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="5" column="3"> <widget class="c2bLineEdit" name="note"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="6" column="3"> <widget class="c2bLineEdit" name="school"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="2" column="5"> <widget class="c2bLineEdit" name="doi"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="3" column="5"> <widget class="c2bLineEdit" name="eprint"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="5"> <widget class="c2bLineEdit" name="issn"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="5" column="5"> <widget class="c2bLineEdit" name="organization"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="6" column="5"> <widget class="c2bLineEdit" name="series"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="7" column="1" colspan="5"> <widget class="c2bLineEdit" name="url"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> </layout> </widget> </widget> </item> </layout> </widget> <widget class="QStatusBar" name="statusbar"/> <action name="clearFieldsAction"> <property name="text"> <string>Clear All Fields</string> </property> </action> <action name="insertRegExpAction"> <property name="text"> <string>Insert Regular Expression</string> </property> <property name="toolTip"> <string>Insert regular expression</string> </property> </action> <action name="editBookmarksAction"> <property name="text"> <string>Edit Bookmarks</string> </property> <property name="toolTip"> <string>Edit bookmarks</string> </property> </action> <action name="editRegExpsAction"> <property name="text"> <string>Edit Regular Expressions</string> </property> <property name="toolTip"> <string>Edit regular expressions</string> </property> </action> <action name="guessFieldsAction"> <property name="text"> <string>Guess Bibliographic Fields</string> </property> <property name="toolTip"> <string>Guess bibliographic fields</string> </property> </action> <action name="postprocessBibTeXAction"> <property name="text"> <string>Postprocess BibTeX</string> </property> </action> <action name="preparseClipboardAction"> <property name="text"> <string>Preparse Clipboard</string> </property> <property name="toolTip"> <string>Preparse clipboard</string> </property> </action> <action name="startEngineAction"> <property name="text"> <string>Restart Recognition</string> </property> </action> <action name="viewTaggedClipEditAction"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>View Tagged Clipboard Data</string> </property> <property name="iconText"> <string>View Tagged Clipboard Data</string> </property> <property name="toolTip"> <string>View tagged clipboard data</string> </property> </action> <action name="openFileDocumentAction"> <property name="text"> <string>Open Document</string> </property> <property name="toolTip"> <string>Open document</string> </property> </action> <action name="editAbbreviationsAction"> <property name="text"> <string>Edit Journal Abbreviations</string> </property> <property name="toolTip"> <string>Edit journal abbreviations</string> </property> </action> <action name="selectFileAction"> <property name="text"> <string>Select Document File</string> </property> <property name="toolTip"> <string>Select document file</string> </property> </action> <action name="openAnnoteAction"> <property name="text"> <string>Annote Editor</string> </property> <property name="toolTip"> <string>Annote Editor</string> </property> </action> <action name="checkRepeatedAction"> <property name="text"> <string>Check Repeated</string> </property> <property name="toolTip"> <string>Check repeated</string> </property> </action> </widget> <customwidgets> <customwidget> <class>c2bLineEdit</class> <extends>QLineEdit</extends> <header>c2bLineEdit.h</header> </customwidget> <customwidget> <class>c2bComboBox</class> <extends>QComboBox</extends> <header>c2bComboBox.h</header> </customwidget> </customwidgets> <tabstops> <tabstop>tabWidget</tabstop> <tabstop>id</tabstop> <tabstop>typecombo</tabstop> <tabstop>title</tabstop> <tabstop>author</tabstop> <tabstop>journal</tabstop> <tabstop>pages</tabstop> <tabstop>volume</tabstop> <tabstop>number</tabstop> <tabstop>year</tabstop> <tabstop>abstract</tabstop> <tabstop>keywords</tabstop> <tabstop>file</tabstop> <tabstop>bibtexfile</tabstop> <tabstop>BibTeXDir</tabstop> <tabstop>ViewAboutB</tabstop> <tabstop>ConfigureB</tabstop> <tabstop>SearchInFilesB</tabstop> <tabstop>PdfImportB</tabstop> <tabstop>ExitB</tabstop> <tabstop>ConnectB</tabstop> <tabstop>MakeNetworkQueryB</tabstop> <tabstop>ViewBibB</tabstop> <tabstop>AddBibB</tabstop> <tabstop>EditBibTeXB</tabstop> <tabstop>booktitle</tabstop> <tabstop>annote</tabstop> <tabstop>address</tabstop> <tabstop>edition</tabstop> <tabstop>institution</tabstop> <tabstop>month</tabstop> <tabstop>publisher</tabstop> <tabstop>url</tabstop> <tabstop>chapter</tabstop> <tabstop>editor</tabstop> <tabstop>isbn</tabstop> <tabstop>note</tabstop> <tabstop>school</tabstop> <tabstop>doi</tabstop> <tabstop>eprint</tabstop> <tabstop>issn</tabstop> <tabstop>organization</tabstop> <tabstop>series</tabstop> </tabstops> <resources> <include location="cb2bib.qrc"/> </resources> <connections/> </ui> �������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2b���������������������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�013077� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.858760774 29 atime=1762812827.99875967 30 ctime=1762812827.858760774 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461633�015146� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/approximatePattern.h������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�017215� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.750761626 30 atime=1762812828.042759324 30 ctime=1762812827.750761626 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/approximatePattern.h�����������������������������������������������������������0000644�0001750�0000144�00000005732�15104461633�021215� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Class implementation of the approximate search algorithm * P. Constans. Approximate textual retrieval. arXiv:0705.0751, 2007. ***************************************************************************/ #ifndef APPROXIMATEPATTERN_H #define APPROXIMATEPATTERN_H #include "compositePattern.h" #include "substringMatcher.h" #define C2B_DEBUG_APPROXIMATEPATTERN 0 class approximatePattern : public compositePattern { public: approximatePattern(); approximatePattern(const QString& pattern, const Qt::CaseSensitivity cs); inline ~approximatePattern() {} void setPattern(const QString& pattern, const Qt::CaseSensitivity cs = Qt::CaseSensitive); inline bool matches(const QString& str) const override { _matched_length = -1; if (str.length() == 0) return false; if (_is_multipattern) { for (int i = 0; i < _subpattern_count; ++i) if (_submatchers.at(i).indexIn(str) != -1) return true; return false; } else return _regexp.match(str).hasMatch(); } inline int indexIn(const QString& str, const int from = 0) const override { _matched_length = -1; if (str.length() == 0) return -1; int index; if (_is_multipattern) { for (int i = 0; i < _subpattern_count; ++i) { _p0[i] = _submatchers.at(i).indexIn(str, from); _pn[i] = _p0.at(i) + _submatchers.at(i).matchedLength(); } mergeIndices(&index, str); } else { _regexp_match = _regexp.match(str, from); _matched_length = _regexp_match.capturedLength(); index = _regexp_match.capturedStart(); } return index; } inline const QVector<substringMatcher>& submatchers() const { return _submatchers; } inline const QStringList& subpatternStrings() const { return _subpatterns; } private: const QStringList splitWord(const QString& word) const; int stretch(int piece_i, int piece_j) const; static QString wordPattern(const QString& word, Qt::CaseSensitivity cs); static int wordCount(const QString& str); static void splitPattern(const QString& p, QStringList* w, QList<int>* ws, QList<int>* we); void mergeIndices(int* index_in, const QString& str) const; void splitPattern(); QList<int> _piece_ends; QList<int> _piece_starts; QStringList _prefixes; QStringList _string_pieces; QStringList _subpatterns; QStringList _suffixes; QVector<substringMatcher> _submatchers; mutable QRegularExpressionMatch _regexp_match; }; #endif ��������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/stemMatcher.h�������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015602� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.838760932 30 atime=1762812828.038759355 30 ctime=1762812827.838760932 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/stemMatcher.h������������������������������������������������������������������0000644�0001750�0000144�00000011137�15104461633�017576� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef STEMMATCHER_H #define STEMMATCHER_H #include "txtmatcher.h" #include <QRegularExpression> #include <QStringRef> #include <QVector> class stemMatcher { public: stemMatcher(); explicit stemMatcher(const QString& pattern, const Qt::CaseSensitivity cs = Qt::CaseSensitive); inline ~stemMatcher() {} int indexIn(const QString& text, const int from = 0) const; void setPattern(const QString& pattern, const Qt::CaseSensitivity cs); inline int matchedLength() const { return _matched_length; } inline int stemmedLength() const { return _stemmed_length; } inline const QVector<int>& patternLengths() const { return _patternlengths; } inline const QStringList& subpatternStrings() const { return _subpatterns; } inline QString signatureString() const { return _signature_string; } private: inline int _index_in(const int s, const QString& text, const int p0) const { if (s < _substring_txt_count) { const int i(_substrings_txt.at(s).indexIn(text, p0)); _matched_lengths[s] = i == -1 ? 0 : _substrings_txt.at(s).pattern().length(); return i; } else { _match = _substrings_rex.at(s - _substring_txt_count).match(text, p0); _matched_lengths[s] = _match.capturedLength(); return _match.capturedStart(); } } inline int _index_in(const int s, const QString& text, const int p0, const int pn) const { if (s < _substring_txt_count) { const int i(_substrings_txt.at(s).indexIn(text.unicode(), std::min(_pn, pn), p0)); _matched_lengths[s] = i == -1 ? 0 : _substrings_txt.at(s).pattern().length(); return i; } else { const int npn(std::min(_pn, pn)); if (p0 >= npn) { _matched_lengths[s] = 0; return -1; } const QStringRef context(&text, p0, npn - p0); #if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) _match = _substrings_rex.at(s - _substring_txt_count).matchView(context); #else _match = _substrings_rex.at(s - _substring_txt_count).match(context); #endif _matched_lengths[s] = _match.capturedLength(); #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) return _match.hasMatch() ? _match.capturedStart() + p0 : -1; #else #warning[cb2Bib] Linking against older than Qt 5.6 might affect some Context searches return _match.hasMatch() ? _match.capturedStart() : -1; #endif } } inline int _index_around(const QString& text, const int phook) const { for (int i = 0; i < _substring_count; ++i) _sp0[i] = -1; _sp0[_hook] = phook; const int bp0 = std::max(_p0, phook - _stretch); const int bpn = std::min(_pn, phook + _stretch); for (int i = 0; i < _substring_count; ++i) if (_sp0.at(i) == -1) { const int p0(_index_in(i, text, bp0, bpn)); if (p0 == -1) return -1; _sp0[i] = p0; } int bp(_pn); int fp(_p0); for (int i = 0; i < _substring_count; ++i) { const int p0(_sp0.at(i)); if (bp > p0) bp = p0; const int pn(p0 + _matched_lengths.at(i)); if (fp < pn) fp = pn; } // Beautify match by including word endings _stemmed_length = fp - bp; for (int l = fp; l < _pn; ++l) if (text.at(l).isLetter()) ++fp; else break; _matched_length = fp - bp; return bp; } QString _signature_string; QStringList _subpatterns; QVector<QRegularExpression> _substrings_rex; QVector<txtmatcher> _substrings_txt; QVector<int> _patternlengths; int _hook; int _stretch; int _substring_count; int _substring_rex_count; int _substring_txt_count; mutable QRegularExpressionMatch _match; mutable QVector<int> _matched_lengths; mutable QVector<int> _sp0; mutable int _matched_length, _stemmed_length; mutable int _p0; mutable int _pn; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/coreBibParser.cpp���������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016402� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.674762225 29 atime=1762812827.99875967 30 ctime=1762812827.678762193 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/coreBibParser.cpp��������������������������������������������������������������0000644�0001750�0000144�00000037444�15104461633�020410� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "coreBibParser.h" coreBibParser::coreBibParser(QObject* parento) : QObject(parento), _at(QLatin1Char('@')), _close(QLatin1Char('}')), _colon(QLatin1Char(':')), _comma(QLatin1Char(',')), _cr(13), _hyphen(QLatin1Char('-')), _lca(QLatin1Char('a')), _lcz(QLatin1Char('z')), _nl(10), _open(QLatin1Char('{')), _period(QLatin1Char('.')), _pound(QLatin1Char('#')), _quote(QLatin1Char('"')), _space(QLatin1Char(' ')), _tilde(QLatin1Char('~')), _uca(QLatin1Char('A')), _ucz(QLatin1Char('Z')) { _settingsP = settings::instance(); // Setting bibliographic types setTypes(); // Setting bibliographic fields setFields(); // Setting regular expressions setRegularExpressions(); } bool coreBibParser::referencesIn(const QString& str, bibReference* ref) { // File parsing for given fields in ref ref->clearReference(); const int pos(referenceStarts(str, ref->pos)); if (pos < 0) return false; referenceContents(str, ref, pos); return true; } bool coreBibParser::referenceAtKey(const QString& key, const QString& str, bibReference* ref) { // File parsing for given fields in ref ref->clearReference(); const int pos(referenceStarts(key, str)); if (pos < 0) return false; referenceContents(str, ref, pos); return true; } QString coreBibParser::referenceToFomattedBibTeX(const bibReference& ref) const { // Writes a BibTeX string from struct bibReference QString BibString(QLatin1Char('@') + ref.typeName + QLatin1Char('{') + ref.citeidName); const bool ConvertReferenceToLaTeX(_settingsP->value("cb2Bib/ConvertReferenceToLaTeX").toBool()); const bool PostprocessMonth(_settingsP->value("cb2Bib/PostprocessMonth").toBool()); const bool UseDoubleBraces(_settingsP->value("cb2Bib/UseDoubleBraces").toBool()); QStringList::const_iterator it = _bibliographic_fields.begin(); while (it != _bibliographic_fields.end()) { QString fvalue(ref.value(*it)); if (!fvalue.isEmpty()) { if (ConvertReferenceToLaTeX) c2bUtils::c2bToBib(fvalue); const QString fd(*it); const QString padding(QString().fill(' ', 12 - fd.length())); if (fd == QLatin1String("title") || fd == QLatin1String("booktitle")) { if (UseDoubleBraces) if (QRegExp("^\\{.+\\}$").indexIn(fvalue) == -1) fvalue = '{' + fvalue + '}'; fvalue = QLatin1Char('{') + fvalue + QLatin1Char('}'); } else if (fd == QLatin1String("month")) { if (!PostprocessMonth) fvalue = QLatin1Char('{') + fvalue + QLatin1Char('}'); } else fvalue = QLatin1Char('{') + fvalue + QLatin1Char('}'); BibString += QLatin1String(",\n") + fd + padding + QLatin1String(" = ") + fvalue; } ++it; } BibString += QLatin1String("\n}\n"); return BibString; } QString coreBibParser::referenceToBibTeX(const bibReference& ref) const { // Writes a BibTeX string from struct bibReference // No special formatting is done here QString BibString(QLatin1Char('@') + ref.typeName + QLatin1Char('{')); QStringList::const_iterator it(_bibliographic_fields.begin()); while (it != _bibliographic_fields.end()) { const QString fvalue(ref.value(*it)); if (!fvalue.isEmpty()) { const QString fd(*it); const QString padding(QString().fill(QLatin1Char(' '), 12 - fd.length())); BibString += QLatin1String(",\n") + fd + padding + QLatin1String(" = {") + fvalue + QLatin1Char('}'); } ++it; } BibString += QLatin1String("\n}\n"); return BibString; } QString coreBibParser::adjacentNumbers(const QString& numbers) const { // Originally for pages, used also for multiple volume, number and year QString anums(numbers); c2bUtils::replace(anums, c2bUtils::nonLetter, QLatin1String(" ")); anums = c2bUtils::simplifyString(anums); if (anums.isEmpty() || anums == QLatin1String("0")) return QString(); anums.replace(' ', '-'); QRegExp rx1("^(\\d+)-(\\d+)-*pp$"); QRegExp rx2("^(\\d+)-(\\d+)$"); if (rx1.indexIn(anums) > -1) { anums = rx1.cap(1); int ilp(rx1.cap(2).toInt() - 1); if (ilp > 0) anums += QLatin1Char('-') + QString().setNum(rx1.cap(1).toInt() + ilp); // eg, 123-7pp -> 123 - 129 } else if (rx2.indexIn(anums) > -1) { QString fp(rx2.cap(1)); anums = fp + '-'; QString lp(rx2.cap(2)); uint lfp(fp.length()); uint llp(lp.length()); if (lfp > llp) lp = fp.remove(lfp - llp, llp) + lp; // eg, 123-7 -> 123 - 127 anums += lp; } const QString separator(_settingsP->value("cb2Bib/PageNumberSeparator").toString()); if (separator.isEmpty()) anums.replace('-', " - "); else anums.replace('-', separator); return anums; } void coreBibParser::setFields() { _bibliographic_fields << QLatin1String("title") << QLatin1String("author") << QLatin1String("journal") << QLatin1String("booktitle") << QLatin1String("series") << QLatin1String("chapter") << QLatin1String("pages") << QLatin1String("volume") << QLatin1String("number") << QLatin1String("edition") << QLatin1String("institution") << QLatin1String("organization") << QLatin1String("school") << QLatin1String("address") << QLatin1String("month") << QLatin1String("year") << QLatin1String("editor") << QLatin1String("publisher") << QLatin1String("abstract") << QLatin1String("keywords") << QLatin1String("isbn") << QLatin1String("issn") << QLatin1String("doi") << QLatin1String("eprint") << QLatin1String("file") << QLatin1String("url") << QLatin1String("note") << QLatin1String("annote"); _sorted_bibliographic_fields = _bibliographic_fields; std::sort(_sorted_bibliographic_fields.begin(), _sorted_bibliographic_fields.end()); } void coreBibParser::setTypes() { _bibliographic_types << QLatin1String("") << QLatin1String("article") << QLatin1String("book") << QLatin1String("booklet") << QLatin1String("conference") << QLatin1String("inbook") << QLatin1String("incollection") << QLatin1String("inproceedings") << QLatin1String("manual") << QLatin1String("mastersthesis") << QLatin1String("misc") << QLatin1String("periodical") << QLatin1String("phdthesis") << QLatin1String("proceedings") << QLatin1String("techreport") << QLatin1String("unpublished"); } void coreBibParser::setRegularExpressions() { _bib_begin0_re = QRegExp("^\\s*@\\w+\\s*\\{"); _bib_begin1_re = QRegExp("[\\r\\n]\\s*@\\w+\\s*\\{"); _bib_begin_at = txtmatcher("@", Qt::CaseSensitive, 0); _bib_begin_re = QRegExp("^@\\w+\\s*\\{"); _bib_field_delimiter = txtmatcher("=", Qt::CaseSensitive, 0); _field_re = QRegExp("\\b(" + _bibliographic_fields.join("|") + ")\\b"); } void coreBibParser::initReferenceParsing(const QString& dir, const QStringList& fields, bibReference* ref) { setReferenceParsingDir(dir); // Init file parsing for given fields ref->clearFields(); ref->clearReference(); _current_bibliographic_fields = fields; } bibReference coreBibParser::wholeReference(const QString& str) const { // Skip positionValue as it is not needed here bibReference ref; int pos(referenceStarts(str)); if (pos < 0) return ref; QString str_ref(referenceAt(str, &pos)); c2bUtils::fullBibToC2b(str_ref); c2bUtils::simplifyString(str_ref); setReferenceEnd(&str_ref); _parse_reference_fields(str_ref, _bibliographic_fields, &ref); return ref; } void coreBibParser::referenceContents(const QString& str, bibReference* ref, int pos) const { // File parsing for_current_bibliographic_fields in ref ref->positionValue = pos; QString str_ref(referenceAt(str, &pos)); ref->pos = pos; ref->rawReference = str_ref; c2bUtils::bibToC2b(str_ref); c2bUtils::simplifyString(str_ref); setReferenceEnd(&str_ref); ref->unicodeReference = str_ref; _parse_reference_fields(str_ref, _current_bibliographic_fields, ref); if (ref->contains(QLatin1String("file"))) if (!QDir::isAbsolutePath(ref->value(QLatin1String("file")))) (*ref)[QLatin1String("file")] = _bib_file_dir + ref->value(QLatin1String("file")); } QString coreBibParser::singleReferenceField(const QString& field, const bibReference& ref) const { // Simplified _parse_reference_fields function, excludes month and keywords peculiarities const QChar* const b(ref.unicodeReference.constData()); const int length(ref.unicodeReference.length()); if (length == 0 || b[0] != _at || field.isEmpty()) return QString(); const QChar lclc(field.at(field.length() - 1).toLower()), lcuc(field.at(field.length() - 1).toUpper()); int cursor(1); while (true) { const int cd(_bib_field_delimiter.indexIn(b, length, cursor)); if (cd < 1) break; const int fends(b[cd - 1] == _space ? cd - 2 : cd - 1); if (b[fends] != lclc && b[fends] != lcuc) { cursor = cd + 2; continue; } for (cursor = fends; cursor > 1; --cursor) if ((b[cursor] >= _lca && b[cursor] <= _lcz) || (b[cursor] >= _uca && b[cursor] <= _ucz)) continue; else break; if (field.compare(ref.unicodeReference.mid(cursor + 1, fends - cursor), Qt::CaseInsensitive) != 0) { cursor = cd + 2; continue; } const int vstarts(b[cd + 1] == _space ? cd + 2 : cd + 1); const int vends(_in_braces_ends(b, vstarts, length)); if (vends > 0) { const int vs(b[vstarts + 1] == _space ? vstarts + 2 : vstarts + 1); return ref.unicodeReference.mid(vs, std::max(0, vends - vs + 1)); } for (cursor = vstarts; cursor < length; ++cursor) if (!b[cursor].isLetterOrNumber()) break; const int vnbends(cursor); if (b[cursor] == _space) ++cursor; if (b[cursor] == _comma) return ref.unicodeReference.mid(vstarts, std::max(0, vnbends - vstarts)); cursor = cd + 2; } return QString(); } static inline const QString* _ci_fields_index_of(const QStringList& fields, const ushort* const b, const int length) { for (QStringList::const_iterator i = fields.constBegin(); i != fields.constEnd(); ++i) { if (length != i->length() || (b[0] | 0x20) != i->at(0).unicode()) continue; for (int l = 1; l < length; ++l) if ((b[l] | 0x20) != i->at(l).unicode()) goto next; return &(*i); next: continue; } return nullptr; } void coreBibParser::_parse_reference_fields(const QString& bibstr, const QStringList& fields, bibReference* ref) const { const QChar* const b(bibstr.constData()); const int length(bibstr.length()); if (length == 0 || b[0] != _at) return; int cursor; for (cursor = 1; cursor < length; ++cursor) if (!b[cursor].isLetterOrNumber()) break; const int tends(cursor); if (b[cursor] == _space) ++cursor; if (b[cursor] == _open) { ref->typeName = bibstr.mid(1, tends - 1).toLower(); ++cursor; if (b[cursor] == _space) ++cursor; const int kstarts(cursor); for (; cursor < length; ++cursor) if (b[cursor].isLetterOrNumber() || b[cursor] == _colon || b[cursor] == _hyphen || b[cursor] == _period) continue; else break; const int kends(cursor); if (b[cursor] == _space) ++cursor; if (b[cursor] == _comma) ref->citeidName = bibstr.mid(kstarts, kends - kstarts); } if (fields.isEmpty()) return; while (true) { const int cd(_bib_field_delimiter.indexIn(b, length, cursor)); if (cd < 1) break; const int fends(b[cd - 1] == _space ? cd - 2 : cd - 1); for (cursor = fends; cursor > 1; --cursor) if ((b[cursor] >= _lca && b[cursor] <= _lcz) || (b[cursor] >= _uca && b[cursor] <= _ucz)) continue; else break; const QString* const fp( _ci_fields_index_of(fields, reinterpret_cast<const ushort*>(b + cursor + 1), fends - cursor)); if (fp == nullptr) { cursor = cd + 2; continue; } const QString& field(*fp); const int vstarts(b[cd + 1] == _space ? cd + 2 : cd + 1); if (b[vstarts] != _open && field == QLatin1String("month")) { // Month macro for (cursor = vstarts; cursor < length; ++cursor) if (b[cursor].isLetterOrNumber() || b[cursor] == _space || b[cursor] == _tilde || b[cursor] == _pound || b[cursor] == _quote) continue; else break; if (b[cursor] == _comma && !ref->contains(field)) ref->insert(field, bibstr.mid(vstarts, cursor - vstarts).trimmed()); cursor = cd + 2; continue; } const int vends(_in_braces_ends(b, vstarts, length)); if (vends > 0) { const int vs(b[vstarts + 1] == _space ? vstarts + 2 : vstarts + 1); const int vl(vends - vs + 1); if (vl > 0) { if (!ref->contains(field)) ref->insert(field, bibstr.mid(vs, vl)); else if (field == QLatin1String("keywords")) ref->insert(field, ref->value(field) + QLatin1Char(';') + bibstr.mid(vs, vl)); } cursor = cd + 2; continue; } for (cursor = vstarts; cursor < length; ++cursor) if (!b[cursor].isLetterOrNumber()) break; const int vnbends(cursor); if (b[cursor] == _space) ++cursor; if (b[cursor] == _comma) { const int vl(vnbends - vstarts); if (vl > 0) { if (!ref->contains(field)) ref->insert(field, bibstr.mid(vstarts, vl)); else if (field == QLatin1String("keywords")) ref->insert(field, ref->value(field) + QLatin1Char(';') + bibstr.mid(vstarts, vl)); } } cursor = cd + 2; } } int coreBibParser::_in_braces_ends(const QChar* const b, const int p, const int length) const { if (b[p] == _open) for (int i = p + 1, open_braces = 1; i < length; ++i) { if (b[i] < _open) continue; if (b[i] == _open) ++open_braces; else if (b[i] == _close) --open_braces; if (open_braces == 0) return (b[i - 1] == _space) ? i - 2 : i - 1; } else if (b[p] == _quote) for (int i = p + 1; i < length; ++i) if (b[i] == _quote && b[i + 1] == _comma) return (b[i - 1] == _space) ? i - 2 : i - 1; return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/c2blib.qrc����������������������������������������������������������0000644�0000000�0000000�00000000073�15104461330�015017� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 atime=1762812827.99875967 30 ctime=1762812827.178766136 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/c2blib.qrc���������������������������������������������������������������������0000644�0001750�0000144�00000000742�15104461330�017007� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<RCC> <qresource prefix="/htm" > <file>htm/reference_item.html</file> <file>htm/reference_list.html</file> <file>htm/tex2html.css</file> <file>htm/tex2html.html</file> <file>htm/tex2html_index.html</file> </qresource> <qresource prefix="/txt" > <file>txt/prefixes.txt</file> <file>txt/suffixes.txt</file> <file>txt/triads.txt</file> <file>txt/word_prefix_lexicon.txt</file> </qresource> </RCC> ������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/bibPreparser.cpp����������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016300� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.658762351 29 atime=1762812827.99875967 30 ctime=1762812827.662762319 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/bibPreparser.cpp���������������������������������������������������������������0000644�0001750�0000144�00000004506�15104461633�020277� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bibPreparser.h" #include "cb2bib_utilities.h" #include "settings.h" #include <QProcess> bibPreparser::bibPreparser(QObject* parento) : QObject(parento) { settings* settingsP = settings::instance(); m_inp_file = settingsP->tempPath() + "/cb2bib_clipborad_inp.tmp_" + settingsP->applicationPid(); m_out_file = settingsP->tempPath() + "/cb2bib_clipborad_out.tmp_" + settingsP->applicationPid(); } void bibPreparser::preparse(const QString& text, QString* out_text) { out_text->clear(); if (!c2bUtils::stringToFile(text + '\n', m_inp_file)) { emit statusMessage(tr("Unable to open the file %1 for writing.").arg(m_inp_file)); return; } // External preparsing QStringList arguments; arguments.append(m_inp_file); arguments.append(m_out_file); QProcess preparser; preparser.start(settings::instance()->fileName("cb2Bib/PreparserBin"), arguments); if (!preparser.waitForFinished(2000)) { preparser.kill(); QFile ifile(m_inp_file); ifile.remove(); QFile ofile(m_out_file); ofile.remove(); emit statusMessage(tr("Failed to call %1.").arg(settings::instance()->fileName("cb2Bib/PreparserBin"))); return; } QFile ifile(m_inp_file); ifile.remove(); (*out_text) = c2bUtils::fileToString(m_out_file, true); if (out_text->isEmpty()) { emit statusMessage(tr("External Parsing ended. Input string remains unchanged.")); (*out_text) = text; } else emit statusMessage(tr("External Parsing ended.")); if (settings::instance()->value("cb2Bib/PreparserShowLog").toBool()) { QString log_string(QString::fromUtf8(preparser.readAllStandardOutput()) + '\n'); log_string += QString::fromUtf8(preparser.readAllStandardError()) + '\n'; log_string += QString("Input[\n%1\n]\n").arg(text); log_string += QString("Output[\n%1\n]\n").arg(*out_text); emit preparserLogAvailable(log_string); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/authorString.cpp����������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016351� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.650762414 29 atime=1762812827.99875967 30 ctime=1762812827.654762382 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/authorString.cpp���������������������������������������������������������������0000644�0001750�0000144�00000064122�15104461633�020350� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "authorString.h" namespace author { unifier::unifier() : name("(?:\\w[-'\\w]{1,})"), initials("(?:\\s*-{0,1}\\b\\w\\b\\.{0,1}){1,3}"), double_initials("(Al|Ch|Kh|Md|Th|Xh|Ya|Yu|Zs)"), prefixes("(da|de|dal|del|der|di|do|du|dos|el|la|le|lo|van|vande|von|zur)"), reversed_romance_name("(?:\\w[-'\\w]{1,})\\s+(?:\\w[-'\\w]{1,}),\\s*(?:\\w[-'\\w]{1,}|" + initials + ')'), reversed_name_rx('^' + name + ','), // Cases 'n1 n2, n3', 'n1 n2, n3 and n4 n5, n6', 'n1 n2, n3 and n4, n5 n6' are necessarily reverse order reversed_romance_name_rx("^(?:" + reversed_romance_name + '|' + reversed_romance_name + " and " + reversed_romance_name + '|' + reversed_romance_name + " and (?:\\w[-'\\w]{1,}),\\s*(?:\\w[-'\\w]{1,}|\\w[-'\\w]{1,} \\w[-'\\w]{1,}|" + initials + "))$"), unifier_rx1("(\\w\\w)\\si\\s(\\w\\w)(?!d\\b)", Qt::CaseSensitive), unifier_rx2("\\b" + prefixes + "\\s(?!(?:,|and\\b))", Qt::CaseInsensitive), unifier_rx3("\\b" + double_initials + "\\.", Qt::CaseInsensitive), unifier_rx4("\\b(\\w[-'\\w]{2,})\\W+Jr\\.", Qt::CaseInsensitive), unifier_rx5("\\b(\\w[-'\\w]{2,})\\W+Jr\\b", Qt::CaseInsensitive), unifier_rx6("(\\w),{0,1}\\s(II|III|IV)\\b", Qt::CaseSensitive), unifier_rx7("([^\\w-])[a-z](?=[^\\w'])"), simplify_string_rx1(QString("%1(?=\\w)").arg(QChar(8217))), simplify_string_rx2("\'(?!\\w)"), simplify_string_rx3("\\d\\d+"), simplify_string_rx4("\\d(?=\\s\\w\\w)"), simplify_string_rx5("\\d[\\*,;][a-z]\\b"), simplify_string_rx6("\\d"), simplify_string_rx7("[^-',;:\\|/&\\.\\s\\w]") {} QString& unifier::unifyNames(QString& author) const { // Composite Names temporary unified c2bUtils::replace(author, unifier_rx1, "\\1+i+\\2"); c2bUtils::replace(author, unifier_rx2, "\\1+"); author.replace("Da+", "Da ", Qt::CaseSensitive); c2bUtils::replace(author, unifier_rx3, "\\1+ "); if (author.contains("Jr", Qt::CaseInsensitive)) { // Remove period and first comma if there c2bUtils::replace(author, unifier_rx4, "\\1+JR"); c2bUtils::replace(author, unifier_rx5, "\\1+JR"); } if (author.contains('I', Qt::CaseSensitive)) c2bUtils::replace(author, unifier_rx6, "\\1+\\2"); author.replace('+', '_'); c2bUtils::replace(author, unifier_rx7, "\\1 "); // Cleaning affiliation 'superscripts'. Avoid cleaning 'M.-m. Lin' return author; } QString& unifier::simplifyString(QString& author, const bool full) const { if (full) // Characters | and : are used for the encoder { author.replace('|', ' '); author.replace(':', ' '); } c2bUtils::replace(author, simplify_string_rx1, "\'"); // Normalize apostrophe c2bUtils::remove(author, simplify_string_rx2); // Remove spurious apostrophes c2bUtils::replace(author, simplify_string_rx3, "/"); // Break dates, addresses, etc, but remove from author's foot notes. c2bUtils::replace(author, simplify_string_rx4, ","); // Help no-separator designs, and also break zip codes. c2bUtils::replace(author, simplify_string_rx5, " "); c2bUtils::remove(author, simplify_string_rx6); // Better remove if no conflict. It will help to not confuse with chemical formula. c2bUtils::replace(author, simplify_string_rx7, " "); author = c2bUtils::simplifyString(author); return author; } QString unifier::fromMedline(const QString& author) const { // Preprocess Author from Medline 'AAAAAAA BB' to Aaaaaaa, BB' // which can be unambiguously translated to 'B. B. Aaaaaaa' // Takes care of cb2Bib included prefixes and suffixes // FAU - Foa, Edna B // AU - Foa EB // FAU - Steketee, Gail S // AU - Steketee GS QString FullN(author.simplified()); c2bUtils::replace(FullN, QRegExp("\\b" + prefixes + "\\s", Qt::CaseInsensitive), "\\1+"); FullN.replace('+', '_'); QStringList parts; QString LastN; if (FullN.contains(',')) // Some FAU are 'Last1 Last2, First' { parts = FullN.split(',', _QT_6_SkipEmptyParts); if (parts.count() > 1) LastN = parts.takeFirst(); } else { parts = FullN.split(' ', _QT_6_SkipEmptyParts); if (parts.count() > 1) LastN = parts.takeFirst(); } FullN = parts.join(" "); parts = FullN.split(' ', _QT_6_SkipEmptyParts); if (!LastN.isEmpty()) if (c2bUtils::isUpperCaseString(LastN)) { LastN = LastN.toLower(); LastN[0] = LastN.at(0).toUpper(); int ii(QRegExp("[-']").indexIn(LastN)); if (ii++ > 0) LastN[ii] = LastN.at(ii).toUpper(); } QString FirstN; for (int i = 0; i < parts.count(); ++i) FirstN += ' ' + parts.at(i); QString isSuffix; if (parts.count() > 0) isSuffix = parts.last(); if (QRegExp("\\b(?:2nd|3rd|Jr|II|III)\\b").indexIn(isSuffix) >= 0) { c2bUtils::replace(isSuffix, QRegExp("\\b2nd\\b"), "II"); c2bUtils::replace(isSuffix, QRegExp("\\b3rd\\b"), "III"); LastN += ' ' + isSuffix; c2bUtils::remove(FirstN, QRegExp("\\b(?:2nd|3rd|Jr|II|III)\\b")); } c2bUtils::replace(LastN, QRegExp(prefixes + '_', Qt::CaseInsensitive), "\\1 "); FullN = LastN + ',' + FirstN; return FullN; } /** Implementation of author field extraction P. Constans. A Simple Extraction Procedure for Bibliographical Author Field. arXiv:0902.0755, 2009. */ void encoder::encode(const QString& raw) { clear(); QString str(raw); aunifier.unifyNames(str); int position(0); int length(0); for (int i = 0; i < str.length(); ++i) { const QChar& si = str[i]; if (si.isLetter()) ++length; else if (si == '_') ++length; else if (si == '-') ++length; else if (si == '\'') ++length; else { if (length > 0) fragments.append(str.mid(position, length)); position = i + 1; length = 0; if (si != ' ') fragments.append(str.at(i)); } } if (length > 0) fragments.append(str.mid(position, length)); for (int i = 0; i < fragments.count(); ++i) { const QString& w = fragments.at(i); if (isSeparator(w)) code += '&'; else if (isAdparticle(w)) code += 'a'; else if (isInitial(w)) code += 'I'; else if (isPlainWord(w)) code += 'w'; else if (isName(w)) { if (isCapitalName(w)) code += 'N'; else code += 'n'; } else if (w.at(0) == '.') code += 'p'; else if (w.at(0) == ',') code += ','; else if (w.at(0) == ';') code += ';'; else if (w.at(0) == ':') code += ':'; else if (w.at(0) == '|') code += 'L'; else code += 'o'; } scapePattern("aL+[nN]{1,2}"); scapePattern("a[nNw]&L+[nN]{1,2}"); // in Linear and / Sublinear Time scapePattern(":L+[InN]{1,2}"); // ... Structure Classification: / A Survey scapePattern("[nN]*&L[nN]L"); // Not an & for author } QString encoder::decoded(const int position, const int length) const { if (position < 0) return QString(); if (length < 1 || position + length > fragments.count()) return QString(); QString d(fragments.at(position)); for (int i = 1; i < length; ++i) d += ' ' + fragments.at(position + i); // Above extra spaces are fine, except in these cases d.replace(" . -", ".-"); d.replace(" ,", ","); return d; } bool encoder::isPlainWord(const QString& w) { if (w.length() > 1) { if (w.contains('_') || w.contains('-')) return c2bUtils::isLowerCaseString(w); if (w.at(0).isLetter()) if (w.at(0).category() == QChar::Letter_Lowercase) return true; } return false; } bool encoder::isInitial(const QString& w) { if (w.length() == 1) if (w.at(0).isLetter()) return w.at(0).isUpper(); if (w.length() == 2) if (w.at(0) == '-') if (w.at(1).isLetter()) return true; // Chinese composite might(?) be lower return false; } bool encoder::isName(const QString& w) { if (w.length() < 2) return false; if (w.at(0).isUpper()) return true; if (w.contains('_')) return hasUpper(w); return false; } bool encoder::isAdparticle(const QString& w) { const int ws(w.size()); if (ws < 2) return false; if (ws > 6) return false; const QByteArray ba(w.toLatin1()); const char* s = ba.data(); const int ss(ws * int(sizeof(char))); if (ws == 2) { if (memcmp("of", s, ss) == 0) return true; if (memcmp("on", s, ss) == 0) return true; if (memcmp("to", s, ss) == 0) return true; if (memcmp("in", s, ss) == 0) return true; if (memcmp("as", s, ss) == 0) return true; if (memcmp("vs", s, ss) == 0) return true; if (memcmp("at", s, ss) == 0) return true; if (memcmp("is", s, ss) == 0) return true; if (memcmp("an", s, ss) == 0) return true; } if (ws == 3) { if (memcmp("for", s, ss) == 0) return true; if (memcmp("but", s, ss) == 0) return true; if (memcmp("are", s, ss) == 0) return true; if (memcmp("its", s, ss) == 0) return true; if (memcmp("the", s, ss) == 0) return true; } if (ws == 4) { if (memcmp("from", s, ss) == 0) return true; if (memcmp("with", s, ss) == 0) return true; if (memcmp("into", s, ss) == 0) return true; } if (ws == 6) { if (memcmp("within", s, ss) == 0) return true; } return false; } } // namespace author /** \page authorproc Processing of Author Names cb2Bib automatically processes the author names string. It uses a set of heuristic rules. First, the authors separator is identified. And second, it is decided whether or not author names are in natural or reverse order, or in the 'Abcd, E., F. Ghij, ...' mixed order. */ authorString::authorString() : _full_form(false) {} /** \page authorproc Cleanup author string: - Escape BibTeX to Unicode - Remove digits from authors string - Remove any character except <tt>-',;&\\.\\s\\w</tt> - Simplify white spaces - Consider composing prefixes <tt>(da|de|dal|del|der|di|do|du|dos|el|la|le|lo|van|vande|von|zur)</tt> - Consider composing suffixes <tt>(II|III|IV|Jr)</tt> - Some publishers use superscripts to refer to multiple author affiliations. Text clipboard copying loses superscript formatting. Author strings are clean from 'orphan' lowcase, single letters in a preprocessing step. Everything following the pattern <b>[a-z]</b> is removed. Fortunately, abbreviated initials are most normally input as uppercase letters, thus permitting a correct superscript clean up. \n <em>Caution:</em> Lowcase, single, a to z letters are removed from author's string.\n <em>Caution:</em> Supperscripts <b>will be added to author Last Name</b> if no separation is provided. Users should care about it and correct these cases. Rules to identify separators: - Contains comma and semicolon -> ';' - Contains pattern <tt>'^Abcd, E.-F.,'</tt> -> ',' - Contains pattern <tt>'^Abcd,'</tt> -> 'and' - Contains comma -> ',' - Contains semicolon -> ';' - Any other -> 'and' */ QString authorString::toBibTeX(const QString& author, bool full_form) { _full_form = full_form; _author_string = author; // BibTeX braces interfere with authorString, remove them even though some BibTeX meaning might be lost _author_string.remove('{'); _author_string.remove('}'); au.simplifyString(_author_string, true); au.unifyNames(_author_string); const bool has_comma(_author_string.contains(',')); const bool has_semicolon(_author_string.contains(';')); const bool has_ands(_author_string.count(" and ") > 1); const bool is_first_reversed(au.reversed_name_rx.indexIn(_author_string) >= 0); const bool is_special_case(au.reversed_romance_name_rx.indexIn(_author_string) >= 0); bool is_string_reversed((has_comma && has_semicolon) || (has_comma && has_ands) || is_special_case); QString separator; if (is_special_case) separator = " and "; else if (has_comma && has_semicolon) separator = ';'; // Multiple Authors, separated by semicolon, reversed naming else if (has_comma) { if (is_first_reversed) { if (QRegExp('^' + au.name + ",(?:\\s*-{0,1}\\b\\w\\b\\.){1,3},\\s*" + au.name).indexIn(_author_string) >= 0) { c2bUtils::replace(_author_string, QRegExp("\\bJr.", Qt::CaseSensitive), "Jr"); _author_string.replace(".,", ".;"); // Reversed, comma separated 'Abrahamsson, A.-L., Springett, J., Karlsson, L., Ottosson, T.' separator = ';'; is_string_reversed = true; } else if (QRegExp('^' + au.name + ',' + au.initials + ',').indexIn(_author_string) >= 0) { c2bUtils::replace(_author_string, QRegExp("^([-'\\w]+),"), "\\1 "); separator = ','; // Mixed naming 'Smith, J.-L., R. Jones, and K. Gibbons' } else separator = " and "; // Reversed naming } else if (has_ands) separator = " and "; else // Natural naming separator = ','; } else if (has_semicolon) separator = ';'; // Multiple Authors, separated by semicolon else separator = " and "; c2bUtils::debug(QObject::tr("Separator: |%1|").arg(separator)); c2bUtils::debug("1--|" + _author_string + '|'); c2bUtils::replace(_author_string, QRegExp("\\band\\b", Qt::CaseInsensitive), separator); c2bUtils::replace(_author_string, QRegExp("\\s&\\s", Qt::CaseInsensitive), separator); c2bUtils::debug("2--|" + _author_string + '|'); c2bUtils::remove(_author_string, QRegExp("[^\\w\\.]+$")); // Removing of duplicate commas and semicolons c2bUtils::replace(_author_string, QRegExp(",\\s*"), ","); c2bUtils::debug("3--|" + _author_string + '|'); c2bUtils::replace(_author_string, QRegExp(",+"), ","); c2bUtils::replace(_author_string, QRegExp(";\\s*"), ";"); c2bUtils::replace(_author_string, QRegExp(";+"), ";"); c2bUtils::debug("4--|" + _author_string + '|'); const bool are_authors_in_uppercase(containUpperCaseLetter(_author_string) && !containLowerCaseLetter(_author_string)); if (are_authors_in_uppercase) c2bUtils::debug("Input Authors in Uppercase"); QStringList authors; if (separator == " and ") authors = c2bUtils::split(_author_string, QRegExp("\\band\\b"), _QT_6_KeepEmptyParts); else authors = _author_string.split(separator, _QT_6_KeepEmptyParts); // Setting author ordering const QString first_author(authors.first().trimmed()); bool is_current_reversed(is_string_reversed || is_first_reversed || isReverseOrder(first_author)); const QString last_author(authors.last().trimmed()); const bool is_last_reversed(is_string_reversed || au.reversed_name_rx.indexIn(last_author) >= 0 || isReverseOrder(last_author)); const bool is_string_mixed(is_current_reversed && !is_last_reversed); if (is_string_mixed) // Mixed naming 'Smith, J., R. Jones' c2bUtils::debug("Mixed order"); // Process each author name for (int ai = 0; ai < authors.count(); ++ai) { QString author_i(authors.at(ai)); c2bUtils::debug(author_i); c2bUtils::replace(author_i, QRegExp("\\.{0,1}\\s{0,1}-"), "-"); // Abbreviated cases, eg M.-H. Something c2bUtils::replace(author_i, QRegExp("[^-'\\w,]"), " "); // Only these characters compose a name; keep commas author_i = c2bUtils::simplifyString(author_i); // Split author name QStringList fore_name_parts; QString last_name; if (is_current_reversed) { const QStringList parts(author_i.split(',', _QT_6_SkipEmptyParts)); const int nparts(parts.count()); if (nparts == 2) { QStringList p(parts.first().split(' ', _QT_6_SkipEmptyParts)); if (p.count() > 0) last_name = p.takeLast(); fore_name_parts = parts.last().split(' ', _QT_6_SkipEmptyParts) + p; } else if (nparts == 3) { QStringList p(parts.first().split(' ', _QT_6_SkipEmptyParts)); if (p.count() > 0) last_name = p.takeLast(); fore_name_parts = parts.at(1).split(' ', _QT_6_SkipEmptyParts) + p; if (QRegExp("^(?:Jr|II|III|IV)$").indexIn(parts.last()) >= 0) // If otherwise, ignore it last_name += '_' + parts.last(); } else { fore_name_parts = author_i.split(' ', _QT_6_SkipEmptyParts); if (fore_name_parts.count() > 0) last_name = fore_name_parts.takeFirst(); } c2bUtils::debug("Reversed order"); } else { fore_name_parts = author_i.split(' ', _QT_6_SkipEmptyParts); if (fore_name_parts.count() > 0) last_name = fore_name_parts.takeLast(); c2bUtils::debug("Natural order"); } // Process first and middle names QString author_name; for (int i = 0; i < fore_name_parts.count(); ++i) { c2bUtils::debug("First and Midle: " + fore_name_parts.at(i)); if (fore_name_parts.at(i).contains('-')) // Composite names { const QStringList fnpi(fore_name_parts.at(i).split('-')); if (fnpi.count() > 1) { author_name += processFirstMiddle(fnpi.at(0)) + '-'; author_name += processFirstMiddle(fnpi.at(1)) + ' '; // Shouldn't be more than 2 parts... } } else // Regular names { QString fore_name(fore_name_parts.at(i)); const int fore_length(fore_name.length()); const bool is_uppercase(!containLowerCaseLetter(fore_name)); if (fore_name_parts.count() == 1 && fore_length > 1 && QRegExp("\\b" + au.double_initials + '_', Qt::CaseInsensitive).indexIn(fore_name) == -1 && !are_authors_in_uppercase && is_uppercase) { // Cases 'Last, FST': Always abbreviated, no call to processFirstMiddle for (int l = 0; l < fore_length; ++l) author_name += fore_name.at(l) + QLatin1String(". "); } else if (fore_name_parts.count() == 2 && fore_length > 1 && fore_length < 3 && is_current_reversed && !are_authors_in_uppercase && is_uppercase) { // Cases 'Last1 Last2, FST': Always abbreviated, no call to processFirstMiddle for (int l = 0; l < fore_length; ++l) author_name += fore_name.at(l) + QLatin1String(". "); } else if (i == 1 && fore_name_parts.count() == 2 && fore_length > 1 && fore_length < 3 && !is_current_reversed && !are_authors_in_uppercase && is_uppercase) { // Cases 'Fore IJ Last': Process initials for (int l = 0; l < fore_length; ++l) author_name += fore_name.at(l) + QLatin1String(". "); } else author_name += processFirstMiddle(fore_name) + ' '; } } // Add last name author_name += capitalize(last_name); authors[ai] = author_name; c2bUtils::debug(author_name); if (is_string_mixed) // Mixed naming 'Smith, J., R. Jones' is_current_reversed = false; } authors.removeAll(QString()); _author_string = authors.join(" and "); // Restore Composite Names white spaces _author_string.replace("_i_", " i "); c2bUtils::replace(_author_string, QRegExp("_II\\b", Qt::CaseInsensitive), " II"); // Suffix can be lower case here c2bUtils::replace(_author_string, QRegExp("_III\\b", Qt::CaseInsensitive), " III"); c2bUtils::replace(_author_string, QRegExp("_IV\\b", Qt::CaseInsensitive), " IV"); c2bUtils::replace(_author_string, QRegExp("_JR\\b", Qt::CaseInsensitive), " Jr"); c2bUtils::replace(_author_string, QRegExp(au.prefixes + '_', Qt::CaseInsensitive), "\\1 "); c2bUtils::replace(_author_string, QRegExp("\\b" + au.double_initials + '_', Qt::CaseInsensitive), "\\1."); _author_string = c2bUtils::simplifyString(_author_string); return _author_string; } QString authorString::processFirstMiddle(const QString& first_middle) const { // Process First and Middle parts // Abbreviates if required // Takes care of abbreviation periods QString proc_fm; if (_full_form) { if (first_middle.length() > 1) proc_fm = capitalize(first_middle); else proc_fm = first_middle + '.'; } else { if (first_middle.contains('_')) // Composite names should not be abbreviated { proc_fm = capitalize(first_middle); if (first_middle.length() - first_middle.indexOf('_') == 2) proc_fm += '.'; } else if (first_middle.length() > 0) proc_fm = first_middle.at(0) + '.'; } return proc_fm; } QString authorString::capitalize(const QString& name) const { // Capitalizes author's name if (name.isEmpty()) return QString(); QString proc_name(name); int ii(0); const int prefixes(c2bUtils::count(proc_name, QRegExp(au.prefixes + "_(?!(?:Jr|II|III|IV)\\b)", Qt::CaseInsensitive))); for (int p = 0; p < prefixes; ++p) { const int iin(proc_name.indexOf('_', ii)); if (c2bUtils::isUpperCaseString(proc_name, ii, iin)) for (int i = 0; i < iin; ++i) proc_name[i] = proc_name.at(i).toLower(); ii = std::min(iin + 1, int(proc_name.length()) - 1); } if (c2bUtils::isUpperCaseString(proc_name, ii)) { proc_name[ii] = proc_name.at(ii).toUpper(); for (int i = ++ii; i < proc_name.length(); ++i) proc_name[i] = proc_name.at(i).toLower(); ii = QRegExp("[\\s-']").indexIn(proc_name); // As before, assume just one part if (ii++ > 0) if (ii < proc_name.length()) proc_name[ii] = proc_name.at(ii).toUpper(); if (proc_name.startsWith("Mc")) if (proc_name.length() > 4) proc_name[2] = proc_name.at(2).toUpper(); } return proc_name; } /** \page authorproc Rules to identify ordering: - Contains comma and semicolon -> Reverse - Pattern <tt>'^Abcd,'</tt> -> Reverse - Pattern <tt>'^Abcd EF Ghi'</tt> -> Natural - Pattern <tt>'^Abcd EF'</tt> -> Reverse - Pattern <tt>'^Abcd E.F.'</tt> -> Reverse - Any other pattern -> Natural */ bool authorString::isReverseOrder(const QString& author) const { // Returns true if Author Name is in reversed order as "Him DF, Her SR, " // ISI doesn't contain point - return for safety // Consider "Him DF Last" const QString author_line(author.simplified()); QRegExp rRevNISI("^([-'\\w]+) ((\\w\\.\\s*)+)$"); rRevNISI.setMinimal(false); if (rRevNISI.indexIn(author_line) > -1) { const QString Last(rRevNISI.cap(3)); if (Last != "and") return true; } if (author_line.contains('.')) return false; rRevNISI = QRegExp("^([-'\\w]+) ([-'\\w]+) ([-'\\w]+)"); rRevNISI.setMinimal(false); if (rRevNISI.indexIn(author_line) > -1) { const QString Last(rRevNISI.cap(3)); if (Last != "and") return false; } rRevNISI = QRegExp("^([-'\\w]+) ([-\\w]{1,3})$"); // Consider only 1 to 3 initials rRevNISI.setMinimal(false); if (rRevNISI.indexIn(author_line) > -1) { const QString Last(rRevNISI.cap(1)); const QString First(rRevNISI.cap(2)); c2bUtils::debug(QObject::tr("ISI: |%1| |%2|").arg(Last, First)); if (containLowerCaseLetter(First)) return false; if (!containLowerCaseLetter(Last)) return false; return true; } return false; } bool authorString::containLowerCaseLetter(const QString& author) const { QString author_line(author); c2bUtils::remove(author_line, QRegExp("\\band\\b")); // Remove possible 'and' separator c2bUtils::remove(author_line, QRegExp(au.prefixes + '_', Qt::CaseInsensitive)); // Remove possible prefixes c2bUtils::remove(author_line, QRegExp(au.double_initials + '_', Qt::CaseSensitive)); // Remove possible two-letter initials for (int i = 0; i < author_line.length(); i++) { if (author_line.at(i).isLetter()) if (author_line.at(i).category() == QChar::Letter_Lowercase) return true; } return false; } bool authorString::containUpperCaseLetter(const QString& author) { for (int i = 0; i < author.length(); i++) { if (author.at(i).isLetter()) if (author.at(i).category() == QChar::Letter_Uppercase) return true; } return false; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/network.h�����������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015017� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.814761121 30 atime=1762812828.038759355 30 ctime=1762812827.814761121 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/network.h����������������������������������������������������������������������0000644�0001750�0000144�00000006703�15104461633�017016� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef NETWORK_H #define NETWORK_H #include <QFile> #include <QNetworkAccessManager> #include <QObject> #include <QProcess> #include <QUrl> /** cb2Bib Network file copy/move @author Pere Constans */ class network : public QObject { Q_OBJECT public: explicit network(QObject* parento = 0); inline ~network() {} enum Action { Copy, Move }; void getFile(const QString& source, const QString& destination, const Action action = Copy, QObject* receiver = 0, const char* callback = 0, const bool overwrite = false); void headFile(const QString& source, QObject* receiver = 0, const char* callback = 0); inline const QString destinationFilename() const { return _destination_filename; } inline const QString sourceFilename() const { return _source_filename; } inline const QString errorString() const { return _request_error_string; } inline const QString mimetypeString() const { return _file_mimetype_string; } inline const QStringList supportedSchemes() const { return _fetcher->supportedSchemes(); } static inline Action actionType(const QString& action) { return action == "move" ? Move : Copy; } signals: void downloadProgress(qint64 bytesReceived, qint64 bytesTotal); void proxyAuthenticationRequired(const QNetworkProxy& proxy, QAuthenticator* auth); void requestFinished(bool succeeded); public slots: void cancelDownload(); private: QByteArray _fetch_url_query; QFile _destination_file; QNetworkAccessManager* _fetcher; QNetworkAccessManager::Operation _fetch_operation; QNetworkReply* _current_reply; QProcess* _fetcher_client; QString FmClientCopyArg; QString FmClientCopyBin; QString FmClientMoveArg; QString FmClientMoveBin; QString _destination_filename; QString _file_mimetype_string; QString _request_error_string; QString _source_filename; bool FmClient; bool _is_fetching; bool _request_succeeded; bool checkDestination(); const int _max_redirections; int _redirection_count; void _emit_request_finished(bool succeeded); void _fetch(const QUrl& url); void _fetch_c2b(const Action action, const QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation); void _fetch_client(const Action action); void _head(const QUrl& url); void getFilePrivate(const Action action); void headFilePrivate(); inline void setup(const QString& source, const QString& destination = QString()) { _destination_filename = destination; _source_filename = source; _file_mimetype_string.clear(); _request_error_string.clear(); _is_fetching = true; _redirection_count = 0; } private slots: void _client_finished(int exitCode, QProcess::ExitStatus exitStatus); void _emit_request_finished(); void _fetch_finished(); void _fetch_ready_read(); void _head_finished(); void loadSettings(); void logError(); }; #endif �������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/searchPattern.h�����������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016131� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.834760963 30 atime=1762812828.038759355 30 ctime=1762812827.834760963 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/searchPattern.h����������������������������������������������������������������0000644�0001750�0000144�00000014465�15104461633�020134� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef SEARCHPATTERN_H #define SEARCHPATTERN_H #include "approximatePattern.h" #include "documentContents.h" #include "scorer.h" #include "stemMatcher.h" #include "wordMatcher.h" #include "wordPattern.h" #include <QRegularExpression> class searchPattern { public: searchPattern(const QString& pattern, const QString& patternType); searchPattern(const bool NOT, const bool caseSensitive, const QString& patternType, const QString& scope, const QChar& yearScope, const QString& pattern); inline ~searchPattern() {} enum Type { ApproximateString = 1, Context = 2, FixedStringAllWords = 3, FixedStringAnyWord = 4, FixedStringContext = 5, FixedString = 6, RegularExpression = 7, Wildcard = 8 }; static const QString type(const Type t); static const QStringList types(); struct modifiers { QChar yearScope; QString scope; QString string; bool NOT; }; inline const modifiers& modifier() const { return _modifier; } inline bool matches(const QString& contents) const { return _matcher.match(contents); } inline bool matches(const documentContents& contents) const { return _matcher.match(contents); } inline int indexIn(const QString& contents, const int from) const { return _matcher.index(contents, from); } inline int indexIn(const documentContents& contents, const int from) const { return _matcher.index(contents.text(), from); } inline int advanceLength() const { return _matcher.alength; } inline int matchedLength() const { return _matcher.mlength; } inline void initializeScores() const { _matcher.mscorer.initialize(); } inline void updateScore(const int pos) const { _matcher.mscorer.update(pos, _matcher.slength); } inline int matchedCounter() const { return _matcher.mscorer.nscores; } inline double matchedScore() const { return _matcher.mscorer.score(); } inline const QString toString() const { return _formatted_string; } inline bool operator<(const searchPattern& p) const { return (_rank < p._rank); } private: struct matcher { matcher(const QString& pattern, const Type t, const Qt::CaseSensitivity cs); QRegularExpression regexp; QString signature; QString typedpattern; QStringMatcher strexp; QVector<QString> subsignatures; Qt::CaseSensitivity csensitivity; Type type; approximatePattern appexp; mutable QRegularExpressionMatch regexp_match; mutable int alength; mutable int mlength; mutable int slength; mutable scorer mscorer; stemMatcher cstemexp; wordMatcher cwordexp; wordPattern wordexp; bool match(const QString& contents) const; bool match(const documentContents& contents) const; int index(const QString& contents, const int from) const; static QString _wildcard_escaped(const QString& pattern); int _set_typed_pattern(const QString& pattern); static inline bool _match_signature(const QString& ps, const QString& cs) { const int pl(ps.length()); // Always pl > 0 const int cl(cs.length()); const ushort* ups(reinterpret_cast<const ushort*>(ps.unicode())); const ushort* p(ups); const ushort* pn(ups + pl); const ushort* ucs(reinterpret_cast<const ushort*>(cs.unicode())); const ushort* c(ucs - 1); const ushort* cn(ucs + cl); while (++c != cn) if (*c == *p) if (++p == pn) return true; return false; } static inline bool _match(const QRegularExpression& submatcher, const QString& psignature, const documentContents& contents) { #ifdef C2B_DEBUG_SEARCHING_SKIP_SIGNATURE return submatcher.match(contents.text()).hasMatch(); #else // Skip signature check for patterns that do not define it if (psignature.length() == 0 || _match_signature(psignature, contents.signature())) return submatcher.match(contents.text()).hasMatch(); else return false; #endif } template <typename T> static inline bool _match(const T& submatcher, const QString& psignature, const documentContents& contents) { #ifdef C2B_DEBUG_SEARCHING_SKIP_SIGNATURE return submatcher.indexIn(contents.text()) != -1; #else // Skip signature check for patterns that do not define it if (psignature.length() == 0 || _match_signature(psignature, contents.signature())) return submatcher.indexIn(contents.text()) != -1; else return false; #endif } template <typename T> inline bool _match_all(const int n, const T& submatchers, const documentContents& contents) const { for (int i = n - 1; i >= 0; --i) if (!_match(submatchers.at(i), subsignatures.at(i), contents)) return false; return true; } template <typename T> inline bool _match_any(const int n, const T& submatchers, const documentContents& contents) const { for (int i = 0; i < n; ++i) if (_match(submatchers.at(i), subsignatures.at(i), contents)) return true; return false; } }; static const QMap<QString, searchPattern::Type> typemap(); static inline Qt::CaseSensitivity qtcase(bool caseSensitive) { return caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive; } QString _formatted_string; int _rank; matcher _matcher; modifiers _modifier; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/preprocess.cpp������������������������������������������������������0000644�0000000�0000000�00000000130�15104461633�016044� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1762812827.71476191 30 atime=1762812828.038759355 29 ctime=1762812827.71476191 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/preprocess.cpp�����������������������������������������������������������������0000644�0001750�0000144�00000002213�15104461633�020035� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "preprocess.h" #include "settings.h" preprocess::preprocess(QObject* parento) : QObject(parento) { loadSettings(); connect(settings::instance(), SIGNAL(newSettings()), this, SLOT(loadSettings())); } void preprocess::loadSettings() { FindReplaceInput = settings::instance()->value("cb2Bib/FindReplaceInput").toBool(); FindReplaceInputList = settings::instance()->value("cb2Bib/FindReplaceInputList").toStringList(); } void preprocess::preprocessText(QString* text) { if (!FindReplaceInput) return; QStringList::Iterator i = FindReplaceInputList.begin(); while (i != FindReplaceInputList.end()) { const QStringList spLine((*i).split('|')); if (spLine.count() > 1) text->replace(spLine.at(0), spLine.at(1)); ++i; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/journalDB.h���������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015206� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.802761216 30 atime=1762812828.038759355 30 ctime=1762812827.806761184 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/journalDB.h��������������������������������������������������������������������0000644�0001750�0000144�00000003207�15104461633�017201� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef JOURNALDB_H #define JOURNALDB_H #include <QString> #include <QStringList> #include <QVarLengthArray> /** Database of Journal Names @author Pere Constans */ class journalDB { public: explicit journalDB(const QString& dbfile); inline ~journalDB() {} QString retrieve(const QString& JQuery) const; QString retrieveAlternate(const QString& JQuery) const; QString retrieveAlternateFull(const QString& JQuery) const; QString retrieveFull(const QString& JQuery) const; inline int count() const { return _nitems; } inline const QString& retrieve(const int index) const { return JAbbrev.at(index); } inline const QString& retrieveFull(const int index) const { return JExtended.at(index); } inline const QString& fullsimplified(const int index) const { return JAbbrev_simp.at(index); } inline const QString& fullsimplifiedFull(const int index) const { return JExtended_simp.at(index); } inline const QStringList& abbreviatedList() const { return JAbbrev; } private: QStringList JAbbrev; QStringList JCode; QStringList JExtended; QVarLengthArray<QString> JAbbrev_simp; QVarLengthArray<QString> JExtended_simp; int _nitems; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/bibSearcher.h�������������������������������������������������������0000644�0000000�0000000�00000000125�15104461633�015541� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������28 mtime=1762812827.7667615 29 atime=1762812827.99875967 28 ctime=1762812827.7667615 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/bibSearcher.h������������������������������������������������������������������0000644�0001750�0000144�00000014751�15104461633�017540� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBSEARCHER_H #define BIBSEARCHER_H #include "documentCache.h" #include "searchPattern.h" #include <QObject> #include <QStringList> class bibParser; class bibReference; class bibSearcher : public QObject { Q_OBJECT public: explicit bibSearcher(bibParser* bp, QObject* parento = 0); bibSearcher(bibParser* bp, const QString& bib_dir, QObject* parento = 0); inline ~bibSearcher() {} static QString searchDocumentKeyword(const QString& bibtexfn, const QString& documentfn, const QString& keyword); void addPattern(bool Not, bool caseSensitive, const QString& patternType, const QString& scope, const QChar& yearScope, const QString& pattern); void clear(); void exec(); inline void setBoolean(bool AND) { _boolean_and = AND; } inline void setSearchScope(const QString& file, const QString& dir, bool all, bool documents) { _bibtex_file = file; _bibtex_dir = dir; _all_bibtex_files = all; _include_documents = documents; } inline void setSimplifySource(bool simplify) { _simplify_source = simplify; } inline int errorsCount() const { return _error_counter; } inline int hitsCount() const { return _result_references.count(); } inline QString hitsString() const { return _result_string; } inline QString hitHtmlDatum(const int index) const { return index < _result_html_data.count() ? _result_html_data.at(index) : QString(); } inline QString hitHtmlAbstract(const int index) const { return index < _result_html_abstracts.count() ? _result_html_abstracts.at(index) : QString(); } inline int patternsCount() const { return _patterns.count(); } inline int referencesCount() const { return _reference_counter; } inline QString logString() const { return _log_string; } inline bool isSearchSimilar() const { return _do_search_similar; } public slots: void abort(); private: bibSearcher(); QString excerpts(const QString& contents); QString highlight(const QString& abstract); QString location(const QString& fn, const bibReference& ref) const; void search(const QString& bib_file); void searchReference(const QString& bib_file, const bibReference& ref); void searchSimilarReferences(const QString& bib_file, const bibReference& ref); void setTitleRank(const QString& title); template <typename T1, typename T2, typename T3, typename T4> void quadrupleSortDescending(int start, int end, T1* v1, T2* v2, T3* v3, T4* v4) { // Template quadrupleSortDescending was adapted from qSortHelper by Pere Constans. // qSortHelper is copyrighted by // (C) 2011 Nokia Corporation and/or its subsidiary(-ies), // and released under GLP/LGPL license. top: int span = end - start; if (span < 2) return; --end; int low = start; int high = end - 1; int pivot = start + span / 2; if (v1->at(end) > v1->at(start)) { std::swap((*v1)[end], (*v1)[start]); std::swap((*v2)[end], (*v2)[start]); std::swap((*v3)[end], (*v3)[start]); std::swap((*v4)[end], (*v4)[start]); } if (span == 2) return; if (v1->at(pivot) > v1->at(start)) { std::swap((*v1)[pivot], (*v1)[start]); std::swap((*v2)[pivot], (*v2)[start]); std::swap((*v3)[pivot], (*v3)[start]); std::swap((*v4)[pivot], (*v4)[start]); } if (v1->at(end) > v1->at(pivot)) { std::swap((*v1)[end], (*v1)[pivot]); std::swap((*v2)[end], (*v2)[pivot]); std::swap((*v3)[end], (*v3)[pivot]); std::swap((*v4)[end], (*v4)[pivot]); } if (span == 3) return; std::swap((*v1)[pivot], (*v1)[end]); std::swap((*v2)[pivot], (*v2)[end]); std::swap((*v3)[pivot], (*v3)[end]); std::swap((*v4)[pivot], (*v4)[end]); while (low < high) { while (low < high && v1->at(low) > v1->at(end)) ++low; while (high > low && v1->at(end) > v1->at(high)) --high; if (low < high) { std::swap((*v1)[low], (*v1)[high]); std::swap((*v2)[low], (*v2)[high]); std::swap((*v3)[low], (*v3)[high]); std::swap((*v4)[low], (*v4)[high]); ++low; --high; } else break; } if (v1->at(low) > v1->at(end)) ++low; std::swap((*v1)[end], (*v1)[low]); std::swap((*v2)[end], (*v2)[low]); std::swap((*v3)[end], (*v3)[low]); std::swap((*v4)[end], (*v4)[low]); quadrupleSortDescending(start, low, v1, v2, v3, v4); start = low + 1; ++end; goto top; } template <typename T1, typename T2, typename T3, typename T4> void quadrupleSortDescending(T1* v1, T2* v2, T3* v3, T4* v4) { const int n(v1->size()); if (n != v2->size() && n != v3->size() && n != v4->size()) c2bUtils::warn(tr("Invalid array dimensions at quadrupleSortDescending")); else quadrupleSortDescending(0, n, v1, v2, v3, v4); } QList<double> _result_scores; QString _result_string; QStringList _result_html_abstracts; QStringList _result_html_data; QStringList _result_references; QList<searchPattern> _patterns; QString _bibtex_dir; QString _bibtex_file; QString _do_search_similar_citeid; QString _log_string; QStringList _scopes; bibParser* _bpP; bool _aborted; bool _all_bibtex_files; bool _boolean_and; bool _include_documents; bool _simplify_source; documentCache _documents; double _reference_score; int _bibtex_counter; int _document_counter; int _error_counter; int _reference_counter; int _reference_match_counter; const bool _do_rank_results; const bool _do_search_similar; }; #endif �����������������������cb2bib-2.0.3/src/c2b/PaxHeaders/txtmatcher.h��������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015511� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.850760837 30 atime=1762812828.042759324 30 ctime=1762812827.854760806 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/txtmatcher.h�������������������������������������������������������������������0000644�0001750�0000144�00000004245�15104461633�017507� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef TXTMATCHER_H #define TXTMATCHER_H #if defined(__AVX2__) #define C2B_USE_TXTMATCHER_AVX2 1 #elif defined(__SSE2__) #define C2B_USE_TXTMATCHER_SSE2 1 #else #define C2B_USE_TXTMATCHER_SCALAR 1 #endif #include <QString> class txtmatcher { public: txtmatcher(); explicit txtmatcher(const QString& spattern, const Qt::CaseSensitivity cs = Qt::CaseSensitive, const int chook = -1); inline ~txtmatcher() {} void setPattern(const QString& spattern, const Qt::CaseSensitivity cs = Qt::CaseSensitive, const int chook = -1); inline const QString& pattern() const { return _pattern; } inline int frequency() const { return _frequency; } inline int indexIn(const QString& text, const int from = 0) const { return indexIn(text.unicode(), text.size(), from); } int indexIn(const QChar* const text, const int length, const int from) const; private: int _find_case_insensitive(const ushort* const t, const int length, const int from) const; int _find_case_sensitive(const ushort* const t, const int length, const int from) const; #ifdef C2B_USE_TXTMATCHER_SSE2 int _find_case_insensitive_sse2(const ushort* const t, const int length, const int from) const; int _find_case_sensitive_sse2(const ushort* const t, const int length, const int from) const; #endif #ifdef C2B_USE_TXTMATCHER_AVX2 int _find_case_insensitive_avx2(const ushort* const t, const int length, const int from) const; int _find_case_sensitive_avx2(const ushort* const t, const int length, const int from) const; #endif void _set_lowest_frequency_character(const QString& spattern, const bool cs); QString _padded_pattern; QString _pattern; QString _lcp; QString _ucp; bool _case_sensitive; int _chook; int _frequency; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/lzsse4��������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014323� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.038759355 30 ctime=1762812827.182766104 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/lzsse4/������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�016364� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/lzsse4/PaxHeaders/README.txt���������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016076� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.038759355 30 ctime=1762812827.182766104 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/lzsse4/README.txt��������������������������������������������������������������0000644�0001750�0000144�00000000305�15104461330�020060� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ To use lzsse4 compressor download LZSSE/lzsse4 folder from https://github.com/ConorStokes/LZSSE/ and copy the the files LICENSE lzsse4_platform.h lzsse4.cpp lzsse4.h README.md in this folder. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/collectionIndex.cpp�������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�017003� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.670762256 29 atime=1762812827.99875967 30 ctime=1762812827.670762256 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/collectionIndex.cpp������������������������������������������������������������0000644�0001750�0000144�00000160704�15104461633�021005� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "collectionIndex.h" #include "bibParser.h" #include "cb2bib_utilities.h" #include "documentCache.h" #include "documentParser.h" #include "posTagger.h" #include "settings.h" #include <QDataStream> #include <QRegularExpression> #include <time.h> #define C2B_DEBUG_COLLECTIONINDEX 0 namespace { // Tunable parameters static const int _document_length_threshold(100000); static const int _in_long_document_sentence_repetition(3); static const int _in_short_document_sentence_repetition(2); static const int _inter_document_sentence_repetition(3); #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) & QT_VERSION < QT_VERSION_CHECK(6, 0, 0) static const QRegularExpression::PatternOptions _qre_pattern_options(QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::OptimizeOnFirstUsageOption); #else static const QRegularExpression::PatternOptions _qre_pattern_options(QRegularExpression::UseUnicodePropertiesOption); #endif class reversedsorting { public: inline reversedsorting() {} inline bool operator()(const QString& si, const QString& sj) const { const int li(si.length()); const int lj(sj.length()); const QChar* a = si.unicode() + li - 1; const QChar* b = sj.unicode() + lj - 1; int cl(std::min(li, lj)); while (cl-- > 0) { if (*a == *b) { --a; --b; } else return *a < *b; } return li < lj; } }; class ussorting { public: inline ussorting() : ss(' '), us('_') {} inline bool operator()(const QString& si, const QString& sj) { QString ssi(si); QString ssj(sj); return ssi.replace(us, ss) < ssj.replace(us, ss); } const QChar ss; const QChar us; }; } // namespace collectionIndex::collectionIndex(bibParser* bp) : _out(*(new QTextStream(stdout))), _bpP(bp), _space_char(QChar(' ')), _nerrors(0), _settingsP(settings::instance()) {} collectionIndex::~collectionIndex() { delete &_out; } int collectionIndex::index(const QString& dir) { const unsigned long start_time(clock()); _nerrors = 0; _keysentences.clear(); const QString bibtexdir(dir.isEmpty() ? QDir::toNativeSeparators(QFileInfo(_settingsP->fileName("cb2Bib/BibTeXFile")).path()) : QDir::toNativeSeparators(dir)); _out << QObject::tr("Indexing references from directory %1...").arg(bibtexdir) << _QT_6_endl; bibReference reference; documentCache dc; int documentid(0); QStringList documents; QStringList documentfns; const QStringList bibtexfns(c2bUtils::filesInDir(bibtexdir, QStringList() << "*.bib")); if (bibtexfns.count() == 0) { ++_nerrors; _out << QObject::tr("Error: No BibTeX files at %1").arg(bibtexdir) << _QT_6_endl; return _nerrors; } const QStringList fields(QStringList() << "file" << "journal" << "title" << "booktitle"); int nfailures(0); for (int i = 0; i < bibtexfns.count(); ++i) { const QString bibtexfn(bibtexfns.at(i)); _out << QObject::tr("Indexing %1...").arg(bibtexfn) << _QT_6_endl; const QString bibtex(c2bUtils::fileToString(bibtexfn)); dc.load(bibtexfn, documentContents::Complete); _bpP->initReferenceParsing(bibtexfn, fields, &reference); while (_bpP->referencesIn(bibtex, &reference)) { QString docfn(reference.value("file")); if (docfn.isEmpty()) continue; docfn = QDir::cleanPath(docfn); const QString journal(reference.value("journal")); QString title(reference.anyTitle()); c2bUtils::cleanTitle(title, true); if (dc.setCurrent(docfn)) setKeySentences(documentid, preprocessedText(journal, dc.current().text())); else ++nfailures; ++documentid; documents.append(title); documentfns.append(docfn); } dc.unload(); } if (nfailures > 0) { _out << QObject::tr("Warning: %1 documents could not be converted to text. Check search converter is set.") .arg(nfailures) << _QT_6_endl; _out << QObject::tr(" Refresh cache by running a prove search including document contents.") << _QT_6_endl; } _out << QObject::tr("done") << _QT_6_endl; digestKeySentences(); cleanupKeySentences(); analyzeKeySentences(); #if C2B_DEBUG_COLLECTIONINDEX for (int i = 0; i < documents.count(); ++i) { QStringList sentences(_document_sentences.values(i)); std::sort(sentences.begin(), sentences.end()); _out << i << " " << documents.at(i) << ':' << _QT_6_endl; for (int j = 0; j < sentences.count(); ++j) _out << " " << sentences.at(j) << _QT_6_endl; } #endif const QString cache_dir(_settingsP->fileName("cb2Bib/CacheDirectory")); const QString documentslfn(QDir::toNativeSeparators(cache_dir + "/documents.lc2b")); QFile documentslf(QDir::cleanPath(documentslfn)); if (documentslf.open(QIODevice::WriteOnly)) { _out << QObject::tr("Writing %1...").arg(documentslfn) << _QT_6_endl; QDataStream stream(&documentslf); stream << documentfns.count(); for (int i = 0; i < documentfns.count(); ++i) stream << documentfns.at(i); documentslf.close(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be written").arg(documentslfn) << _QT_6_endl; } const QString documentsifn(QDir::toNativeSeparators(cache_dir + "/documents.ic2b")); QFile documentsif(documentsifn); if (documentsif.open(QIODevice::WriteOnly)) { _out << QObject::tr("Writing %1...").arg(documentsifn) << _QT_6_endl; QDataStream stream(&documentsif); for (int i = 0; i < documents.count(); ++i) { QList<int> sentenceids(_document_sentenceids.values(i)); std::sort(sentenceids.begin(), sentenceids.end()); stream << sentenceids.count(); for (int j = 0; j < sentenceids.count(); ++j) stream << sentenceids.at(j); } documentsif.close(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be written").arg(documentsifn) << _QT_6_endl; } _out << QObject::tr("done") << _QT_6_endl; const double time = double(clock() - start_time) / double(CLOCKS_PER_SEC); _out << QObject::tr("Indexing CPU time: %1s").arg(time) << _QT_6_endl; return _nerrors; } void collectionIndex::setKeySentences(const int documentid, const QString& text) { QHash<QStringRef, int> docsentences; documentParser dp(text, 7); while (dp.parses()) { if (dp.nlength() < 4 * dp.nwords()) continue; const QStringRef s(dp.subsentence()); docsentences.insert(s, 1 + docsentences.value(s)); } const int dsr(text.length() < _document_length_threshold ? _in_short_document_sentence_repetition : _in_long_document_sentence_repetition); for (QHash<QStringRef, int>::const_iterator si = docsentences.constBegin(); si != docsentences.constEnd(); ++si) { if (si.value() < dsr) continue; const QString ss(si.key().toString()); if (!isValidKeySentence(ss)) continue; if (_keysentences.contains(ss)) _keysentences[ss].update(documentid); else _keysentences.insert(ss, KeysentenceData(documentid)); } } void collectionIndex::analyzeKeySentences() { _out << QObject::tr("Analysing keyword sentences...") << _QT_6_endl; posTagger pt; if (!pt.loadLexicon()) { ++_nerrors; _out << QObject::tr("Error: cb2Bib POS lexicon could not be loaded; check Configure Files") << _QT_6_endl; return; } QStringList validlist; #if C2B_DEBUG_COLLECTIONINDEX QStringList taggedvalidlist; #endif for (QMap<QString, KeysentenceData>::const_iterator si = _keysentences.constBegin(); si != _keysentences.constEnd(); ++si) { const QString& s(si.key()); const KeysentenceData& sdata(si.value()); if (sdata.ndocuments < _inter_document_sentence_repetition) continue; const QString pts(pt.tagged(s)); if (pt.contains(pts)) { validlist.append(s); #if C2B_DEBUG_COLLECTIONINDEX taggedvalidlist.append(pts + " " + s); for (int j = 0; j < sdata.documents.count(); ++j) _document_sentences.insert(sdata.documents.at(j), s); #endif } } ussorting uss; std::sort(validlist.begin(), validlist.end(), uss); const QString cache_dir(_settingsP->fileName("cb2Bib/CacheDirectory")); const QString sentenceslfn(QDir::toNativeSeparators(QDir::cleanPath(cache_dir + "/sentences.lc2b"))); QFile sentenceslf(sentenceslfn); if (sentenceslf.open(QIODevice::WriteOnly)) { _out << QObject::tr("Writing %1...").arg(sentenceslfn) << _QT_6_endl; QDataStream stream(&sentenceslf); stream << validlist.count(); const QChar hs('-'); const QChar us('_'); const QString ss("\\1 "); QRegularExpression aprx(_bpP->authorPrefixes() + '_', _qre_pattern_options); for (int i = 0; i < validlist.count(); ++i) { QString v(validlist.at(i)); v.replace(aprx, ss); stream << v.replace(us, hs); } sentenceslf.close(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be written").arg(sentenceslfn) << _QT_6_endl; } const QString sentencesifn(QDir::toNativeSeparators(QDir::cleanPath(cache_dir + "/sentences.ic2b"))); QFile sentencesif(sentencesifn); if (sentencesif.open(QIODevice::WriteOnly)) { _out << QObject::tr("Writing %1...").arg(sentencesifn) << _QT_6_endl; QDataStream stream(&sentencesif); for (int i = 0; i < validlist.count(); ++i) { const QString& s(validlist.at(i)); const KeysentenceData& sdata(_keysentences.value(s)); QList<int> dl(sdata.documents); std::sort(dl.begin(), dl.end()); stream << dl.count(); for (int j = 0; j < dl.count(); ++j) stream << dl.at(j); } sentencesif.close(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be written").arg(sentencesifn) << _QT_6_endl; } #ifdef C2B_TRACE_MEMORY qDebug() << "After writing sentencesifn:"; c2bUtils::print_maximum_resident_set_size(); #endif const QString documentsifn(QDir::toNativeSeparators(cache_dir + "/documents.ic2b.tmp")); QFile documentsif(documentsifn); int document_sentenceids_count(0); if (documentsif.open(QIODevice::WriteOnly)) { QDataStream stream(&documentsif); for (int i = 0; i < validlist.count(); ++i) { const QString& s(validlist.at(i)); const KeysentenceData& sdata(_keysentences.value(s)); document_sentenceids_count += sdata.documents.count(); for (int j = 0; j < sdata.documents.count(); ++j) stream << sdata.documents.at(j) << i; } documentsif.close(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be written").arg(documentsifn) << _QT_6_endl; } _out << QObject::tr("Raw keyword sentences: ") << _keysentences.size() << _QT_6_endl; _out << QObject::tr("Keyword sentences: ") << validlist.count() << _QT_6_endl; _out << QObject::tr("done") << _QT_6_endl; #if !C2B_DEBUG_COLLECTIONINDEX _out << QObject::tr("Clearing arrays...") << _QT_6_endl; _keysentences.clear(); _document_sentences.clear(); _out << QObject::tr("done") << _QT_6_endl; #endif #ifdef C2B_TRACE_MEMORY qDebug() << "After clearing arrays:"; c2bUtils::print_maximum_resident_set_size(); #endif if (documentsif.open(QIODevice::ReadOnly)) { QDataStream stream(&documentsif); for (int l = 0, d, i; l < document_sentenceids_count; ++l) { stream >> d >> i; _document_sentenceids.insert(d, i); } documentsif.close(); documentsif.remove(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be read").arg(documentsifn) << _QT_6_endl; } #ifdef C2B_TRACE_MEMORY qDebug() << "After inserting _document_sentenceids:"; c2bUtils::print_maximum_resident_set_size(); #endif #if C2B_DEBUG_COLLECTIONINDEX std::sort(taggedvalidlist.begin(), taggedvalidlist.end()); for (int i = 0; i < taggedvalidlist.count(); ++i) _out << taggedvalidlist.at(i) << _QT_6_endl; #endif } void collectionIndex::cleanupKeySentences() { _out << QObject::tr("Cleaning keyword sentences...") << _QT_6_endl; QStringList keysentenceskeys; for (QMap<QString, KeysentenceData>::const_iterator si = _keysentences.constBegin(); si != _keysentences.constEnd(); ++si) { if (si.value().ndocuments < _inter_document_sentence_repetition) continue; keysentenceskeys.append(si.key()); } const int nkeysentenceskeys(keysentenceskeys.count()); std::sort(keysentenceskeys.begin(), keysentenceskeys.end()); for (int i = 0; i < nkeysentenceskeys - 1; ++i) { const QString& si(keysentenceskeys.at(i)); const QString& sj(keysentenceskeys.at(i + 1)); if (sj.startsWith(si) && _keysentences.value(si).ndocuments == _keysentences.value(sj).ndocuments) _keysentences[si].ndocuments = 0; } reversedsorting rs; std::sort(keysentenceskeys.begin(), keysentenceskeys.end(), rs); for (int i = 0; i < nkeysentenceskeys - 1; ++i) { const QString& si(keysentenceskeys.at(i)); const QString& sj(keysentenceskeys.at(i + 1)); if (sj.endsWith(si) && _keysentences.value(si).ndocuments == _keysentences.value(sj).ndocuments) _keysentences[si].ndocuments = 0; } _out << QObject::tr("done") << _QT_6_endl; } void collectionIndex::digestKeySentences() { _out << QObject::tr("Digesting keyword sentences...") << _QT_6_endl; const QChar hyphen('_'); const QString coordination_and(" and "); const QString coordination_in(" in "); const QString coordination_of(" of "); const QString coordination_on(" on "); const QString coordination_or(" or "); const QRegularExpression trailing_ae("ae\\b", _qre_pattern_options); const QRegularExpression trailing_ches("ches\\b", _qre_pattern_options); const QRegularExpression trailing_dices("dices\\b", _qre_pattern_options); const QRegularExpression trailing_ices("ices\\b", _qre_pattern_options); const QRegularExpression trailing_ies("ies\\b", _qre_pattern_options); const QRegularExpression trailing_is("is\\b", _qre_pattern_options); const QRegularExpression trailing_us("us\\b", _qre_pattern_options); const QRegularExpression trailing_s("s\\b", _qre_pattern_options); const QRegularExpression trailing_ss("ss\\b", _qre_pattern_options); const QRegularExpression trailing_sses("sses\\b", _qre_pattern_options); const QRegularExpression trailing_ap("'\\b", _qre_pattern_options); const QRegularExpression trailing_aps("'s\\b", _qre_pattern_options); for (QMap<QString, KeysentenceData>::iterator si = _keysentences.begin(); si != _keysentences.end(); ++si) { if (si.value().ndocuments == 0) continue; const QString& s(si.key()); KeysentenceData* ksdndmax(&si.value()); int ndmax(ksdndmax->ndocuments); // Unify hyphenation if (s.contains(hyphen)) { QString sp(s); sp.remove(hyphen); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); sp = s; sp.replace(hyphen, _space_char); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } // Unify simple coordinations if (s.count(coordination_and) == 1) { const QStringList p(s.split(coordination_and, _QT_6_SkipEmptyParts)); const QString sp(p.at(1) + coordination_and + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } else if (s.count(coordination_or) == 1) { const QStringList p(s.split(coordination_or, _QT_6_SkipEmptyParts)); const QString sp(p.at(1) + coordination_or + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } else if (s.count(coordination_of) == 1) { const QStringList p(s.split(coordination_of, _QT_6_SkipEmptyParts)); const QString sp(p.at(1) + _space_char + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } else if (s.count(coordination_on) == 1) { const QStringList p(s.split(coordination_on, _QT_6_SkipEmptyParts)); const QString sp(p.at(1) + _space_char + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } else if (s.count(coordination_in) == 1) { const QStringList p(s.split(coordination_in, _QT_6_SkipEmptyParts)); const QString sp(p.at(1) + _space_char + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } // Unify genitives if (s.contains(trailing_aps) || s.contains(trailing_ap)) { QString sp(s); sp.remove(trailing_aps); sp.remove(trailing_ap); if (s.length() != sp.length() && _keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } // Unify number if (s.contains(trailing_s) || s.contains(trailing_ae)) { QString sp(s); sp.replace(trailing_dices, "dex"); sp.replace(trailing_ices, "ix"); sp.replace(trailing_ae, "a"); sp.replace(trailing_ies, "y"); sp.replace(trailing_ches, "ch"); sp.replace(trailing_ss, "sss"); sp.replace(trailing_us, "uss"); sp.replace(trailing_aps, "'ss"); sp.replace(trailing_sses, "sss"); sp.replace(trailing_is, "iss"); sp.remove(trailing_s); if (s.length() != sp.length() && _keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } ksdndmax->ndocuments = ksdndmax->documents.count(); } _out << QObject::tr("done") << _QT_6_endl; } collectionIndex::KeysentenceData* collectionIndex::_digest_sentence(KeysentenceData* ksd, KeysentenceData* ksdndmax, int* ndmax) const { if (ksd->ndocuments > *ndmax) { // Transfer from ksdndmax *ndmax = ksd->ndocuments; const int nd(ksdndmax->documents.count()); for (int i = 0; i < nd; ++i) { const int did(ksdndmax->documents.at(i)); if (!ksd->documents.contains(did)) ksd->documents.append(did); } ksdndmax->ndocuments = 0; return ksd; } else { // Transfer to ksdndmax const int nd(ksd->documents.count()); for (int i = 0; i < nd; ++i) { const int did(ksd->documents.at(i)); if (!ksdndmax->documents.contains(did)) ksdndmax->documents.append(did); } ksd->ndocuments = 0; return ksdndmax; } } bool collectionIndex::isValidKeySentence(const QString& text) const { const ushort fc(text.at(0).unicode()); if (fc == 39) return false; if (fc == 95) return false; if (fc == 97) { if (text.startsWith(QLatin1String("a "))) return false; if (text.startsWith(QLatin1String("ability "))) return false; if (text.startsWith(QLatin1String("able "))) return false; if (text.startsWith(QLatin1String("about "))) return false; if (text.startsWith(QLatin1String("above "))) return false; if (text.startsWith(QLatin1String("academy of "))) return false; if (text.startsWith(QLatin1String("according "))) return false; if (text.startsWith(QLatin1String("acknowledgment "))) return false; if (text.startsWith(QLatin1String("across "))) return false; if (text.startsWith(QLatin1String("added "))) return false; if (text.startsWith(QLatin1String("advances in "))) return false; if (text.startsWith(QLatin1String("after "))) return false; if (text.startsWith(QLatin1String("agreement "))) return false; if (text.startsWith(QLatin1String("all ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("along "))) return false; if (text.startsWith(QLatin1String("also "))) return false; if (text.startsWith(QLatin1String("although "))) return false; if (text.startsWith(QLatin1String("among "))) return false; if (text.startsWith(QLatin1String("an "))) return false; if (text.startsWith(QLatin1String("and "))) return false; if (text.startsWith(QLatin1String("annals of "))) return false; if (text.startsWith(QLatin1String("any ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("are "))) return false; if (text.startsWith(QLatin1String("as "))) return false; if (text.startsWith(QLatin1String("at "))) return false; if (text.startsWith(QLatin1String("author "))) return false; if (text.startsWith(QLatin1String("author's "))) return false; if (text.startsWith(QLatin1String("authors "))) return false; } else if (fc == 98) { if (text.startsWith(QLatin1String("based on "))) return false; if (text.startsWith(QLatin1String("be "))) return false; if (text.startsWith(QLatin1String("been "))) return false; if (text.startsWith(QLatin1String("before "))) return false; if (text.startsWith(QLatin1String("between "))) return false; if (text.startsWith(QLatin1String("both "))) return false; if (text.startsWith(QLatin1String("but "))) return false; if (text.startsWith(QLatin1String("by "))) return false; } else if (fc == 99) { if (text.startsWith(QLatin1String("calculated ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("calculations "))) return false; if (text.startsWith(QLatin1String("can "))) return false; if (text.startsWith(QLatin1String("cannot "))) return false; if (text.startsWith(QLatin1String("capable "))) return false; if (text.startsWith(QLatin1String("carried "))) return false; if (text.startsWith(QLatin1String("case "))) return false; if (text.startsWith(QLatin1String("chapter "))) return false; if (text.startsWith(QLatin1String("chapters "))) return false; if (text.startsWith(QLatin1String("college of "))) return false; if (text.startsWith(QLatin1String("come "))) return false; if (text.startsWith(QLatin1String("conference on "))) return false; if (text.startsWith(QLatin1String("contribution from "))) return false; if (text.startsWith(QLatin1String("corresponding "))) return false; if (text.startsWith(QLatin1String("could "))) return false; if (text.startsWith(QLatin1String("current "))) return false; if (text.startsWith(QLatin1String("currently "))) return false; } else if (fc == 100) { if (text.startsWith(QLatin1String("data "))) return false; if (text.startsWith(QLatin1String("de "))) return false; if (text.startsWith(QLatin1String("department "))) return false; if (text.startsWith(QLatin1String("depicted "))) return false; if (text.startsWith(QLatin1String("depicts "))) return false; if (text.startsWith(QLatin1String("der "))) return false; if (text.startsWith(QLatin1String("described "))) return false; if (text.startsWith(QLatin1String("detailed "))) return false; if (text.startsWith(QLatin1String("details "))) return false; if (text.startsWith(QLatin1String("determined "))) return false; if (text.startsWith(QLatin1String("did not "))) return false; if (text.startsWith(QLatin1String("different ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("difficult "))) return false; if (text.startsWith(QLatin1String("discussed "))) return false; if (text.startsWith(QLatin1String("dissolved "))) return false; if (text.startsWith(QLatin1String("do "))) return false; if (text.startsWith(QLatin1String("does "))) return false; if (text.startsWith(QLatin1String("due ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("during "))) return false; } else if (fc == 101) { if (text.startsWith(QLatin1String("each "))) return false; if (text.startsWith(QLatin1String("easily "))) return false; if (text.startsWith(QLatin1String("easy "))) return false; if (text.startsWith(QLatin1String("edited "))) return false; if (text.startsWith(QLatin1String("effect ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("effects ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("either "))) return false; if (text.startsWith(QLatin1String("elsevier "))) return false; } else if (fc == 102) { if (text.startsWith(QLatin1String("faculty of "))) return false; if (text.startsWith(QLatin1String("figure "))) return false; if (text.startsWith(QLatin1String("figures "))) return false; if (text.startsWith(QLatin1String("find "))) return false; if (text.startsWith(QLatin1String("finding "))) return false; if (text.startsWith(QLatin1String("findings "))) return false; if (text.startsWith(QLatin1String("first ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("followed "))) return false; if (text.startsWith(QLatin1String("following "))) return false; if (text.startsWith(QLatin1String("footnote "))) return false; if (text.startsWith(QLatin1String("for "))) return false; if (text.startsWith(QLatin1String("form "))) return false; if (text.startsWith(QLatin1String("found "))) return false; if (text.startsWith(QLatin1String("foundation "))) return false; if (text.startsWith(QLatin1String("free of charge "))) return false; if (text.startsWith(QLatin1String("from "))) return false; if (text.startsWith(QLatin1String("fur "))) return false; if (text.startsWith(QLatin1String("further "))) return false; } else if (fc == 103) { if (text.startsWith(QLatin1String("gave "))) return false; if (text.startsWith(QLatin1String("give "))) return false; if (text.startsWith(QLatin1String("given "))) return false; if (text.startsWith(QLatin1String("gives "))) return false; if (text.startsWith(QLatin1String("go "))) return false; if (text.startsWith(QLatin1String("goes "))) return false; if (text.startsWith(QLatin1String("going "))) return false; if (text.startsWith(QLatin1String("groups "))) return false; } else if (fc == 104) { if (text.startsWith(QLatin1String("has "))) return false; if (text.startsWith(QLatin1String("have "))) return false; if (text.startsWith(QLatin1String("he "))) return false; if (text.startsWith(QLatin1String("highlighted "))) return false; if (text.startsWith(QLatin1String("his "))) return false; if (text.startsWith(QLatin1String("how "))) return false; } else if (fc == 105) { if (text.startsWith(QLatin1String("i "))) return false; if (text.startsWith(QLatin1String("if "))) return false; if (text.startsWith(QLatin1String("ii "))) return false; if (text.startsWith(QLatin1String("iii "))) return false; if (text.startsWith(QLatin1String("in "))) return false; if (text.startsWith(QLatin1String("initially "))) return false; if (text.startsWith(QLatin1String("int j "))) return false; if (text.startsWith(QLatin1String("international conference on "))) return false; if (text.startsWith(QLatin1String("international journal "))) return false; if (text.startsWith(QLatin1String("into "))) return false; if (text.startsWith(QLatin1String("is "))) return false; if (text.startsWith(QLatin1String("it "))) return false; if (text.startsWith(QLatin1String("its "))) return false; } else if (fc == 106) { if (text.startsWith(QLatin1String("j "))) return false; if (text.startsWith(QLatin1String("journal of "))) return false; if (text.startsWith(QLatin1String("journal on "))) return false; if (text.startsWith(QLatin1String("just "))) return false; } else if (fc == 107) { if (text.startsWith(QLatin1String("kept "))) return false; } else if (fc == 108) { if (text.startsWith(QLatin1String("laboratory for "))) return false; if (text.startsWith(QLatin1String("laboratory of "))) return false; if (text.startsWith(QLatin1String("larger "))) return false; if (text.startsWith(QLatin1String("less "))) return false; if (text.startsWith(QLatin1String("let "))) return false; if (text.startsWith(QLatin1String("lower "))) return false; } else if (fc == 109) { if (text.startsWith(QLatin1String("may "))) return false; if (text.startsWith(QLatin1String("mol "))) return false; if (text.startsWith(QLatin1String("more "))) return false; if (text.startsWith(QLatin1String("most ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("much ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("my "))) return false; } else if (fc == 110) { if (text.startsWith(QLatin1String("national academy of "))) return false; if (text.startsWith(QLatin1String("need "))) return false; if (text.startsWith(QLatin1String("new "))) return false; if (text.startsWith(QLatin1String("not ")) && text.count(_space_char) < 3) return false; } else if (fc == 111) { if (text.startsWith(QLatin1String("observed "))) return false; if (text.startsWith(QLatin1String("obtained "))) return false; if (text.startsWith(QLatin1String("occur "))) return false; if (text.startsWith(QLatin1String("occurs "))) return false; if (text.startsWith(QLatin1String("of "))) return false; if (text.startsWith(QLatin1String("office "))) return false; if (text.startsWith(QLatin1String("on "))) return false; if (text.startsWith(QLatin1String("only "))) return false; if (text.startsWith(QLatin1String("onto "))) return false; if (text.startsWith(QLatin1String("or "))) return false; if (text.startsWith(QLatin1String("other "))) return false; if (text.startsWith(QLatin1String("otherwise "))) return false; if (text.startsWith(QLatin1String("our "))) return false; if (text.startsWith(QLatin1String("over "))) return false; } else if (fc == 112) { if (text.startsWith(QLatin1String("per "))) return false; if (text.startsWith(QLatin1String("permission of "))) return false; if (text.startsWith(QLatin1String("play "))) return false; if (text.startsWith(QLatin1String("played "))) return false; if (text.startsWith(QLatin1String("please "))) return false; if (text.startsWith(QLatin1String("possible "))) return false; if (text.startsWith(QLatin1String("present"))) return false; if (text.startsWith(QLatin1String("previous "))) return false; if (text.startsWith(QLatin1String("proceedings "))) return false; if (text.startsWith(QLatin1String("proof "))) return false; } else if (fc == 113) { if (text.startsWith(QLatin1String("quite "))) return false; } else if (fc == 114) { if (text.startsWith(QLatin1String("rather "))) return false; if (text.startsWith(QLatin1String("rest of "))) return false; if (text.startsWith(QLatin1String("result of "))) return false; if (text.startsWith(QLatin1String("reviews in "))) return false; if (text.startsWith(QLatin1String("run "))) return false; } else if (fc == 115) { if (text.startsWith(QLatin1String("same "))) return false; if (text.startsWith(QLatin1String("see "))) return false; if (text.startsWith(QLatin1String("several "))) return false; if (text.startsWith(QLatin1String("shall "))) return false; if (text.startsWith(QLatin1String("show "))) return false; if (text.startsWith(QLatin1String("shown "))) return false; if (text.startsWith(QLatin1String("since "))) return false; if (text.startsWith(QLatin1String("so "))) return false; if (text.startsWith(QLatin1String("some "))) return false; if (text.startsWith(QLatin1String("strongly "))) return false; if (text.startsWith(QLatin1String("studied "))) return false; if (text.startsWith(QLatin1String("studies "))) return false; if (text.startsWith(QLatin1String("study "))) return false; if (text.startsWith(QLatin1String("such "))) return false; if (text.startsWith(QLatin1String("supporting "))) return false; if (text.startsWith(QLatin1String("suppose "))) return false; if (text.startsWith(QLatin1String("symposium on "))) return false; } else if (fc == 116) { if (text.startsWith(QLatin1String("than "))) return false; if (text.startsWith(QLatin1String("thank "))) return false; if (text.startsWith(QLatin1String("that "))) return false; if (text.startsWith(QLatin1String("the "))) return false; if (text.startsWith(QLatin1String("their "))) return false; if (text.startsWith(QLatin1String("then "))) return false; if (text.startsWith(QLatin1String("there "))) return false; if (text.startsWith(QLatin1String("these "))) return false; if (text.startsWith(QLatin1String("they "))) return false; if (text.startsWith(QLatin1String("this "))) return false; if (text.startsWith(QLatin1String("those "))) return false; if (text.startsWith(QLatin1String("thus "))) return false; if (text.startsWith(QLatin1String("title "))) return false; if (text.startsWith(QLatin1String("to "))) return false; if (text.startsWith(QLatin1String("too "))) return false; if (text.startsWith(QLatin1String("top "))) return false; if (text.startsWith(QLatin1String("transactions on "))) return false; } else if (fc == 117) { if (text.startsWith(QLatin1String("under "))) return false; if (text.startsWith(QLatin1String("us "))) return false; if (text.startsWith(QLatin1String("use "))) return false; if (text.startsWith(QLatin1String("used "))) return false; if (text.startsWith(QLatin1String("uses "))) return false; if (text.startsWith(QLatin1String("using "))) return false; } else if (fc == 118) { if (text.startsWith(QLatin1String("very ")) && text.count(_space_char) < 3) return false; } else if (fc == 119) { if (text.startsWith(QLatin1String("was "))) return false; if (text.startsWith(QLatin1String("we "))) return false; if (text.startsWith(QLatin1String("were "))) return false; if (text.startsWith(QLatin1String("were "))) return false; if (text.startsWith(QLatin1String("what "))) return false; if (text.startsWith(QLatin1String("when "))) return false; if (text.startsWith(QLatin1String("whenever "))) return false; if (text.startsWith(QLatin1String("where "))) return false; if (text.startsWith(QLatin1String("whether "))) return false; if (text.startsWith(QLatin1String("which "))) return false; if (text.startsWith(QLatin1String("while "))) return false; if (text.startsWith(QLatin1String("whose "))) return false; if (text.startsWith(QLatin1String("wiley "))) return false; if (text.startsWith(QLatin1String("will "))) return false; if (text.startsWith(QLatin1String("with "))) return false; if (text.startsWith(QLatin1String("within "))) return false; if (text.startsWith(QLatin1String("without "))) return false; if (text.startsWith(QLatin1String("work "))) return false; if (text.startsWith(QLatin1String("workshop on "))) return false; if (text.startsWith(QLatin1String("worth "))) return false; if (text.startsWith(QLatin1String("would "))) return false; } else if (fc == 120) { if (text.startsWith(QLatin1String("x "))) return false; } else if (fc == 121) { if (text.startsWith(QLatin1String("yes "))) return false; if (text.startsWith(QLatin1String("you "))) return false; if (text.startsWith(QLatin1String("your "))) return false; } const ushort lc(text.at(text.length() - 1).unicode()); if (lc == 95) return false; if (lc == 97) { if (text.endsWith(QLatin1String(" a"))) return false; if (text.endsWith(QLatin1String(" via"))) return false; } else if (lc == 100) { if (text.endsWith(QLatin1String(" and"))) return false; if (text.endsWith(QLatin1String(" applied"))) return false; if (text.endsWith(QLatin1String(" carried"))) return false; if (text.endsWith(QLatin1String(" could"))) return false; if (text.endsWith(QLatin1String(" performed"))) return false; if (text.endsWith(QLatin1String(" second"))) return false; if (text.endsWith(QLatin1String(" should"))) return false; if (text.endsWith(QLatin1String(" showed"))) return false; if (text.endsWith(QLatin1String(" third"))) return false; if (text.endsWith(QLatin1String(" used"))) return false; if (text.endsWith(QLatin1String(" would"))) return false; } else if (lc == 101) { if (text.endsWith(QLatin1String(" above"))) return false; if (text.endsWith(QLatin1String(" are"))) return false; if (text.endsWith(QLatin1String(" available"))) return false; if (text.endsWith(QLatin1String(" be"))) return false; if (text.endsWith(QLatin1String(" because"))) return false; if (text.endsWith(QLatin1String(" due"))) return false; if (text.endsWith(QLatin1String(" gave"))) return false; if (text.endsWith(QLatin1String(" have"))) return false; if (text.endsWith(QLatin1String(" he"))) return false; if (text.endsWith(QLatin1String(" here"))) return false; if (text.endsWith(QLatin1String(" importance"))) return false; if (text.endsWith(QLatin1String(" indicate"))) return false; if (text.endsWith(QLatin1String(" like"))) return false; if (text.endsWith(QLatin1String(" made"))) return false; if (text.endsWith(QLatin1String(" more"))) return false; if (text.endsWith(QLatin1String(" same"))) return false; if (text.endsWith(QLatin1String(" since"))) return false; if (text.endsWith(QLatin1String(" the"))) return false; if (text.endsWith(QLatin1String(" there"))) return false; if (text.endsWith(QLatin1String(" these"))) return false; if (text.endsWith(QLatin1String(" we"))) return false; if (text.endsWith(QLatin1String(" were"))) return false; if (text.endsWith(QLatin1String(" where"))) return false; if (text.endsWith(QLatin1String(" where"))) return false; if (text.endsWith(QLatin1String(" while"))) return false; if (text.endsWith(QLatin1String(" whose"))) return false; } else if (lc == 102) { if (text.endsWith(QLatin1String(" if"))) return false; if (text.endsWith(QLatin1String(" of"))) return false; } else if (lc == 103) { if (text.endsWith(QLatin1String(" according"))) return false; if (text.endsWith(QLatin1String(" along"))) return false; if (text.endsWith(QLatin1String(" belonging"))) return false; if (text.endsWith(QLatin1String(" containing"))) return false; if (text.endsWith(QLatin1String(" corresponding"))) return false; if (text.endsWith(QLatin1String(" during"))) return false; if (text.endsWith(QLatin1String(" fig"))) return false; if (text.endsWith(QLatin1String(" having"))) return false; if (text.endsWith(QLatin1String(" involving"))) return false; if (text.endsWith(QLatin1String(" using"))) return false; } else if (lc == 104) { if (text.endsWith(QLatin1String(" although"))) return false; if (text.endsWith(QLatin1String(" both"))) return false; if (text.endsWith(QLatin1String(" much"))) return false; if (text.endsWith(QLatin1String(" such"))) return false; if (text.endsWith(QLatin1String(" through"))) return false; if (text.endsWith(QLatin1String(" which"))) return false; if (text.endsWith(QLatin1String(" with"))) return false; } else if (lc == 105) { if (text.endsWith(QLatin1String(" i"))) return false; } else if (lc == 108) { if (text.endsWith(QLatin1String(" all"))) return false; if (text.endsWith(QLatin1String(" several"))) return false; if (text.endsWith(QLatin1String(" will"))) return false; } else if (lc == 109) { if (text.endsWith(QLatin1String(" from"))) return false; if (text.endsWith(QLatin1String(" them"))) return false; } else if (lc == 110) { if (text.endsWith(QLatin1String(" an"))) return false; if (text.endsWith(QLatin1String(" been"))) return false; if (text.endsWith(QLatin1String(" between"))) return false; if (text.endsWith(QLatin1String(" can"))) return false; if (text.endsWith(QLatin1String(" in"))) return false; if (text.endsWith(QLatin1String(" known"))) return false; if (text.endsWith(QLatin1String(" on"))) return false; if (text.endsWith(QLatin1String(" shown"))) return false; if (text.endsWith(QLatin1String(" shown"))) return false; if (text.endsWith(QLatin1String(" supporting information"))) return false; if (text.endsWith(QLatin1String(" taken"))) return false; if (text.endsWith(QLatin1String(" than"))) return false; if (text.endsWith(QLatin1String(" then"))) return false; if (text.endsWith(QLatin1String(" upon"))) return false; if (text.endsWith(QLatin1String(" when"))) return false; if (text.endsWith(QLatin1String(" within"))) return false; } else if (lc == 111) { if (text.endsWith(QLatin1String(" also"))) return false; if (text.endsWith(QLatin1String(" do"))) return false; if (text.endsWith(QLatin1String(" into"))) return false; if (text.endsWith(QLatin1String(" to"))) return false; if (text.endsWith(QLatin1String(" two"))) return false; if (text.endsWith(QLatin1String(" who"))) return false; } else if (lc == 114) { if (text.endsWith(QLatin1String(" after"))) return false; if (text.endsWith(QLatin1String(" chapter"))) return false; if (text.endsWith(QLatin1String(" elsevier"))) return false; if (text.endsWith(QLatin1String(" for"))) return false; if (text.endsWith(QLatin1String(" or"))) return false; if (text.endsWith(QLatin1String(" our"))) return false; if (text.endsWith(QLatin1String(" over"))) return false; if (text.endsWith(QLatin1String(" per"))) return false; if (text.endsWith(QLatin1String(" their"))) return false; if (text.endsWith(QLatin1String(" under"))) return false; if (text.endsWith(QLatin1String(" whether"))) return false; if (text.endsWith(QLatin1String(" your"))) return false; } else if (lc == 115) { if (text.endsWith(QLatin1String(" across"))) return false; if (text.endsWith(QLatin1String(" as"))) return false; if (text.endsWith(QLatin1String(" does"))) return false; if (text.endsWith(QLatin1String(" does"))) return false; if (text.endsWith(QLatin1String(" figs"))) return false; if (text.endsWith(QLatin1String(" follows"))) return false; if (text.endsWith(QLatin1String(" gives"))) return false; if (text.endsWith(QLatin1String(" has"))) return false; if (text.endsWith(QLatin1String(" his"))) return false; if (text.endsWith(QLatin1String(" is"))) return false; if (text.endsWith(QLatin1String(" its"))) return false; if (text.endsWith(QLatin1String(" ones"))) return false; if (text.endsWith(QLatin1String(" shows"))) return false; if (text.endsWith(QLatin1String(" this"))) return false; if (text.endsWith(QLatin1String(" us"))) return false; if (text.endsWith(QLatin1String(" was"))) return false; if (text.endsWith(QLatin1String(" yes"))) return false; if (text.endsWith(QLatin1String("acids res"))) return false; } else if (lc == 116) { if (text.endsWith(QLatin1String(" about"))) return false; if (text.endsWith(QLatin1String(" at"))) return false; if (text.endsWith(QLatin1String(" department"))) return false; if (text.endsWith(QLatin1String(" et"))) return false; if (text.endsWith(QLatin1String(" first"))) return false; if (text.endsWith(QLatin1String(" important"))) return false; if (text.endsWith(QLatin1String(" it"))) return false; if (text.endsWith(QLatin1String(" let"))) return false; if (text.endsWith(QLatin1String(" most"))) return false; if (text.endsWith(QLatin1String(" must"))) return false; if (text.endsWith(QLatin1String(" not"))) return false; if (text.endsWith(QLatin1String(" out"))) return false; if (text.endsWith(QLatin1String(" suggest"))) return false; if (text.endsWith(QLatin1String(" that"))) return false; if (text.endsWith(QLatin1String(" without"))) return false; } else if (lc == 117) { if (text.endsWith(QLatin1String(" you"))) return false; } else if (lc == 119) { if (text.endsWith(QLatin1String(" how"))) return false; if (text.endsWith(QLatin1String(" new"))) return false; if (text.endsWith(QLatin1String(" show"))) return false; } else if (lc == 121) { if (text.endsWith(QLatin1String(" any"))) return false; if (text.endsWith(QLatin1String(" by"))) return false; if (text.endsWith(QLatin1String(" may"))) return false; if (text.endsWith(QLatin1String(" my"))) return false; if (text.endsWith(QLatin1String(" only"))) return false; if (text.endsWith(QLatin1String(" society"))) return false; if (text.endsWith(QLatin1String(" they"))) return false; if (text.endsWith(QLatin1String(" wiley"))) return false; } if (text.contains(QLatin1String("_ "))) return false; if (text.contains(QLatin1String(" _"))) return false; if (_last_equals_first(text)) return false; return true; } QString collectionIndex::preprocessedText(const QString& journal, const QString& text) const { QString pt(text.toLower()); if (journal.contains(_space_char)) { QStringList jns; jns.append(journal.toLower()); jns.append(_bpP->fullJournal(journal).toLower()); jns.append(_bpP->abbreviatedJournal(journal).toLower()); jns.append(QString(jns.at(0)).remove('.')); jns.append(QString(jns.at(1)).remove('.')); jns.append(QString(jns.at(2)).remove('.')); jns.removeDuplicates(); for (int i = 0; i < jns.count(); ++i) c2bUtils::fillString(pt, QStringMatcher(jns.at(i), Qt::CaseSensitive), '.'); } c2bUtils::fillString(pt, txtmatcher("\"", Qt::CaseSensitive, 0), ' '); c2bUtils::fillString(pt, txtmatcher("-", Qt::CaseSensitive, 0), '_'); pt.replace(QRegularExpression("_{2,}", _qre_pattern_options), "_"); pt.replace(QRegularExpression("\\bin *situ\\b", _qre_pattern_options), " in_situ "); pt.replace(QRegularExpression("\\bin *vivo\\b", _qre_pattern_options), " in_vivo "); pt.replace(QRegularExpression("\\bin *vitro\\b", _qre_pattern_options), " in_vitro "); pt.replace(QRegularExpression("\\bex *situ\\b", _qre_pattern_options), " ex_situ "); pt.replace(QRegularExpression("\\bex *vivo\\b", _qre_pattern_options), " ex_vivo "); pt.replace(QRegularExpression("\\bex *vitro\\b", _qre_pattern_options), " ex_vitro "); // Clear some strings c2bUtils::fillString(pt, QRegularExpression("\\bbased (?=on\\b)", _qre_pattern_options), ' '); c2bUtils::fillString(pt, QRegularExpression("\\bin order (?=to\\b)", _qre_pattern_options), ' '); c2bUtils::fillString(pt, txtmatcher(" a ", Qt::CaseSensitive, 0), ' '); c2bUtils::fillString(pt, txtmatcher(" an ", Qt::CaseSensitive, 2), ' '); c2bUtils::fillString(pt, txtmatcher(" its ", Qt::CaseSensitive, 3), ' '); c2bUtils::fillString(pt, txtmatcher(" the ", Qt::CaseSensitive, 2), ' '); c2bUtils::fillString(pt, txtmatcher(" their ", Qt::CaseSensitive, 2), ' '); c2bUtils::fillString(pt, txtmatcher(" '", Qt::CaseSensitive, 1), ' '); c2bUtils::fillString(pt, txtmatcher("' ", Qt::CaseSensitive, 0), ' '); // Set additional breakpoints c2bUtils::fillString(pt, txtmatcher(" are ", Qt::CaseSensitive, 2), '.'); c2bUtils::fillString(pt, txtmatcher(" be ", Qt::CaseSensitive, 1), '.'); c2bUtils::fillString(pt, txtmatcher(" is ", Qt::CaseSensitive, 2), '.'); c2bUtils::fillString(pt, txtmatcher(" was ", Qt::CaseSensitive, 1), '.'); c2bUtils::fillString(pt, txtmatcher(" were ", Qt::CaseSensitive, 1), '.'); c2bUtils::fillString(pt, QRegularExpression("\\binstitut\\w*", _qre_pattern_options), '.'); c2bUtils::fillString(pt, QRegularExpression("\\buniversi\\w*", _qre_pattern_options), '.'); c2bUtils::fillString(pt, QRegularExpression("\\bdoi\\w*", _qre_pattern_options), '.'); c2bUtils::fillString(pt, QRegularExpression("\\bet al\\w*", _qre_pattern_options), '.'); // Normalize proper names c2bUtils::fillString(pt, QRegularExpression("\\bdo not\\b", _qre_pattern_options), '.'); pt.replace(QRegularExpression("\\b" + _bpP->authorPrefixes() + "\\s", _qre_pattern_options), QString("\\1%1").arg(QChar(127))); replace(pt, QChar(127), '_'); // Remove noisy elements from PDF articles c2bUtils::fillString(pt, QStringMatcher("page intentionally left", Qt::CaseSensitive), '.'); c2bUtils::fillString(pt, QStringMatcher("journal article", Qt::CaseSensitive), '.'); c2bUtils::fillString(pt, QRegularExpression(" \\w \\w \\w ", _qre_pattern_options), '.'); c2bUtils::stripDiacritics(pt); c2bUtils::simplifyString(pt); return pt; } QString& collectionIndex::replace(QString& str, const QChar& a, const QChar& b) const { const int length(str.length()); QChar* const s(str.data()); int i(0); while (i < length) { QChar& c(s[i]); if (c == a) c = b; ++i; } return str; } ������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/collectionAnalyzer.cpp����������������������������������������������0000644�0000000�0000000�00000000131�15104461633�017521� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.666762288 29 atime=1762812827.99875967 30 ctime=1762812827.670762256 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/collectionAnalyzer.cpp���������������������������������������������������������0000644�0001750�0000144�00000022107�15104461633�021515� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "collectionAnalyzer.h" #include "settings.h" #include <QDataStream> #include <QVector> #include <cmath> namespace { template <typename T> class lengthsorting { public: explicit lengthsorting(const T& data) : _data(data) {} inline bool operator()(const int i, const int j) { const int ni(_data[i].length()); const int nj(_data[j].length()); if (ni == nj) return _data[i] < _data[j]; else return ni < nj; } private: const T& _data; }; // Template double_sort was adapted from qSortHelper by Pere Constans. // qSortHelper is copyrighted by // (C) 2011 Nokia Corporation and/or its subsidiary(-ies), // and released under GLP/LGPL license. template <typename T1, typename T2> void double_sort(int start, int end, T1* v1, T2* v2) { top: int span = end - start; if (span < 2) return; --end; int low = start; int high = end - 1; int pivot = start + span / 2; if ((*v1)[end] > (*v1)[start]) { std::swap((*v1)[end], (*v1)[start]); std::swap((*v2)[end], (*v2)[start]); } if (span == 2) return; if ((*v1)[pivot] > (*v1)[start]) { std::swap((*v1)[pivot], (*v1)[start]); std::swap((*v2)[pivot], (*v2)[start]); } if ((*v1)[end] > (*v1)[pivot]) { std::swap((*v1)[end], (*v1)[pivot]); std::swap((*v2)[end], (*v2)[pivot]); } if (span == 3) return; std::swap((*v1)[pivot], (*v1)[end]); std::swap((*v2)[pivot], (*v2)[end]); while (low < high) { while (low < high && (*v1)[low] > (*v1)[end]) ++low; while (high > low && (*v1)[end] > (*v1)[high]) --high; if (low < high) { std::swap((*v1)[low], (*v1)[high]); std::swap((*v2)[low], (*v2)[high]); ++low; --high; } else break; } if ((*v1)[low] > (*v1)[end]) ++low; std::swap((*v1)[end], (*v1)[low]); std::swap((*v2)[end], (*v2)[low]); double_sort(start, low, v1, v2); start = low + 1; ++end; goto top; } } // namespace collectionAnalyzer::collectionAnalyzer() : _ndocuments(0), _nsentences(0), _nsimilar(0), _settingsP(settings::instance()) {} void collectionAnalyzer::reload() { _ndocuments = 0; _nsentences = 0; _nsimilar = 0; _document_keyword.clear(); _keyword_document_fn.clear(); _similar_document_fn.clear(); const QString cache_dir(_settingsP->fileName("cb2Bib/CacheDirectory")); _documentslf_fn = QDir::cleanPath(cache_dir + "/documents.lc2b"); QFile documentslf(_documentslf_fn); if (documentslf.open(QIODevice::ReadOnly)) { QDataStream stream(&documentslf); stream >> _ndocuments; _documents.resize(_ndocuments); for (int i = 0; i < _ndocuments; ++i) stream >> _documents[i]; documentslf.close(); } _similar.resize(_ndocuments); _similarity.resize(_ndocuments); _sentenceslf_fn = QDir::cleanPath(cache_dir + "/sentences.lc2b"); QFile sentenceslf(_sentenceslf_fn); if (sentenceslf.open(QIODevice::ReadOnly)) { QDataStream stream(&sentenceslf); stream >> _nsentences; _sentences.resize(_nsentences); for (int i = 0; i < _nsentences; ++i) stream >> _sentences[i]; sentenceslf.close(); } _documentsif_fn = QDir::cleanPath(cache_dir + "/documents.ic2b"); QFile documentsif(_documentsif_fn); if (documentsif.open(QIODevice::ReadOnly)) { QDataStream stream(&documentsif); _document_norms.resize(_ndocuments); int ns; int ss; for (int d = 0; d < _ndocuments; ++d) { stream >> ns; _document_norms[d] = ns; for (int s = 0; s < ns; ++s) stream >> ss; } documentsif.close(); } _sentencesif_fn = QDir::cleanPath(cache_dir + "/sentences.ic2b"); } void collectionAnalyzer::setDocumentKeywords(const QString& documentfn) { if (documentfn == _keyword_document_fn) return; _keyword_document_fn = documentfn; _document_keyword_ids.clear(); QVector<int> dsentences; grepDocuments(documentfn, &dsentences); const int ndsentences(dsentences.size()); if (ndsentences == 0) return; lengthsorting<QVarLengthArray<QString>> ls(_sentences); std::sort(dsentences.begin(), dsentences.end(), ls); for (int i = 0; i < ndsentences; ++i) { const QString& si(_sentences[dsentences.at(i)]); bool redundant(false); for (int j = i + 1; j < ndsentences; ++j) if (_sentences[dsentences.at(j)].contains(si)) { redundant = true; break; } if (!redundant) _document_keyword_ids.append(dsentences.at(i)); } std::sort(_document_keyword_ids.begin(), _document_keyword_ids.end()); } void collectionAnalyzer::setKeywordDocuments(const QString& keyword) { if (keyword == _document_keyword) return; _document_keyword = keyword; grepSentences(keyword, &_sdocuments); } void collectionAnalyzer::setSimilarDocuments(const QString& documentfn) { if (documentfn == _similar_document_fn) return; _similar_document_fn = documentfn; _nsimilar = 0; QVector<int> dsentences; grepDocuments(documentfn, &dsentences); const int ndsentences(dsentences.size()); if (ndsentences == 0) return; QVarLengthArray<int> overlaps(_ndocuments); for (int i = 0; i < _ndocuments; ++i) overlaps[i] = 0; QFile sentencesif(_sentencesif_fn); if (sentencesif.open(QIODevice::ReadOnly)) { QDataStream stream(&sentencesif); int nd; int dd; int s0(0); for (int i = 0; i < ndsentences; ++i) { const int sentenceid(dsentences[i]); for (int s = s0; s < sentenceid; ++s) { stream >> nd; for (int d = 0; d < nd; ++d) stream >> dd; } stream >> nd; for (int d = 0; d < nd; ++d) { stream >> dd; overlaps[dd] += 1; } s0 = sentenceid + 1; } sentencesif.close(); } const int documentid(_document_id(documentfn)); for (int i = 0; i < _ndocuments; ++i) { const int o(overlaps[i]); if (o == 0) continue; const double s(double(o) / sqrt(double(_document_norms[documentid] * _document_norms[i]))); if (s < 0.051) continue; _similarity[_nsimilar] = s; _similar[_nsimilar++] = i; } double_sort(0, _nsimilar, &_similarity, &_similar); } void collectionAnalyzer::skipSimilarDocument(const int i) { --_nsimilar; for (int j = i; j < _nsimilar; ++j) _similarity[j] = _similarity[j + 1]; for (int j = i; j < _nsimilar; ++j) _similarity[j] = _similarity[j + 1]; } void collectionAnalyzer::grepDocuments(const QString& documentfn, QVector<int>* dsentences) const { dsentences->clear(); const int documentid(_document_id(documentfn)); if (documentid == -1) return; QFile documentsif(_documentsif_fn); if (documentsif.open(QIODevice::ReadOnly)) { QDataStream stream(&documentsif); int ns; int ss; for (int d = 0; d < documentid; ++d) { stream >> ns; for (int s = 0; s < ns; ++s) stream >> ss; } stream >> ns; dsentences->resize(ns); for (int s = 0; s < ns; ++s) stream >> (*dsentences)[s]; documentsif.close(); } } void collectionAnalyzer::grepSentences(const QString& keyword, QVarLengthArray<int>* sdocuments) const { sdocuments->clear(); const int sentenceid(_sentence_id(keyword)); if (sentenceid == -1) return; QFile sentencesif(_sentencesif_fn); if (sentencesif.open(QIODevice::ReadOnly)) { QDataStream stream(&sentencesif); int nd; int dd; for (int s = 0; s < sentenceid; ++s) { stream >> nd; for (int d = 0; d < nd; ++d) stream >> dd; } stream >> nd; sdocuments->resize(nd); for (int d = 0; d < nd; ++d) stream >> (*sdocuments)[d]; sentencesif.close(); } } int collectionAnalyzer::_document_id(const QString& documentfn) const { for (int i = 0; i < _ndocuments; ++i) if (_documents[i] == documentfn) return i; return -1; } int collectionAnalyzer::_sentence_id(const QString& keyword) const { for (int i = 0; i < _nsentences; ++i) if (_sentences[i] == keyword) return i; return -1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/arxivXml.h����������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015137� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.750761626 29 atime=1762812827.99875967 30 ctime=1762812827.754761594 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/arxivXml.h���������������������������������������������������������������������0000644�0001750�0000144�00000001617�15104461633�017136� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef ARXIVXML_H #define ARXIVXML_H #include "bibReference.h" #include <QXmlStreamReader> class arxivXml : public QXmlStreamReader { public: explicit arxivXml(const QString& xml); inline ~arxivXml() {} inline const bibReference& reference() const { return _reference; } private: void readReference(); bool reading(const QString& tag); void appendAuthor(QStringList* authors); void processDate(); void processId(); void readField(const QString& field); bibReference _reference; }; #endif �����������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/htm�����������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013667� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.038759355 30 ctime=1762812827.182766104 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/htm/���������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�015730� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/htm/PaxHeaders/tex2html_index.html���������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017570� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.038759355 30 ctime=1762812827.182766104 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/htm/tex2html_index.html��������������������������������������������������������0000644�0001750�0000144�00000000057�15104461330�021556� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<div id="index" class="index"> %1 </div> <br />���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/htm/PaxHeaders/reference_item.html���������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017606� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.038759355 30 ctime=1762812827.182766104 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/htm/reference_item.html��������������������������������������������������������0000644�0001750�0000144�00000000373�15104461330�021575� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<li> GET_REFERENCE_AUTHOR <a name="GET_REFERENCE_ANCHOR_NAME" id="GET_REFERENCE_ANCHOR_ID" href="GET_REFERENCE_LINK" target="_blank">GET_REFERENCE_TITLE</a>. <i>GET_REFERENCE_SOURCE</i> GET_REFERENCE_VOLUMEGET_REFERENCE_PAGES GET_REFERENCE_YEAR </li> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/htm/PaxHeaders/tex2html.html���������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016401� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.038759355 30 ctime=1762812827.182766104 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/htm/tex2html.html��������������������������������������������������������������0000644�0001750�0000144�00000002136�15104461330�020367� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> GET_CSS GET_MATHJAX_HEAD <title>GET_TITLE

GET_TITLE



GET_INDEX GET_HTML GET_REFERENCES
cb2bib-2.0.3/src/c2b/htm/PaxHeaders/reference_list.html0000644000000000000000000000007415104461330017623 xustar0030 atime=1762812828.038759355 30 ctime=1762812827.182766104 cb2bib-2.0.3/src/c2b/htm/reference_list.html0000644000175000001440000000011015104461330021577 0ustar00constansusers00000000000000

    GET_REFERENCES
cb2bib-2.0.3/src/c2b/htm/PaxHeaders/tex2html.css0000644000000000000000000000007415104461330016225 xustar0030 atime=1762812827.338764874 30 ctime=1762812827.182766104 cb2bib-2.0.3/src/c2b/htm/tex2html.css0000644000175000001440000000553415104461330020220 0ustar00constansusers00000000000000/* cb2Bib Annote CSS */ /* general */ body { background-color: #E7E7E7; border-color: #72726A; border-style: solid; border-width: 1px; color: black; margin: 1px; padding-left: 25px; padding-right: 25px; padding-top: 25px; } h1 { background-color: #010141; border-color: black; border-style: solid; border-width: 1px; color: #E3E3E3; font-family: sans-serif; font-size: 120%; padding-left: 10px; } h2 { color: #010141; font-family: sans-serif; font-size: 110%; padding-left: 10px; } h3 { color: #010141; font-family: sans-serif; font-size: 100%; font-style: italic; padding-left: 10px; } a { color: #293747; font-size: 100%; text-decoration: underline; } p { padding-right: 20px; text-indent: 20px; } pre { background-color: #DBDBDB; border-color: #72726A; border-style: solid; border-width: 1px; font-family: monospace; font-size: 80%; padding: 10px; } ul li { list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAJCAYAAADkZNYtAAAABGdBTUEAANbY1E9YMgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9gMCBQ5B7ky4rkAAAFHSURBVBjTTcoxasJQAIDhPy8JlfCKGpe+LIUuQhAnN0FEikcodOvSnqCLV+lYEA/QCi4GnERyhE5FsGoCDgZ9oMnr0pZ+8G+/xQ+lVLXVaj31+/378/lsOY5jJpPJaDabvWRZtuMfv9PpjKIoMkmSmDRNzXa7NdPp1LTb7RHgA9iACILgcTAYPFerVbTWaK3Z7XbkeU69Xm/M5/OvLMtiAbjNZvPO8zy01uz3+7+01nieR6PRuANcB3CVUje1Wg0pJa7rYts2eZ5zOp0olUoEQXDzO4skSVa+719JKXPLsizbtjHGACCEEJvNZgUIARSLxWK8Xq+RUtrlcllIKUWlUhFSSrFcLonjeAwUABdA2O12J3Ecm8PhYLTW5ng8miiKTBiGb0AIXFiAAC6VUqHv+w+9Xu/WcZzroig+h8Phe5qmr8AHkH0DzH6Pqv7Vyi4AAAAASUVORK5CYII=); padding-right: 100px; text-indent: 15px; } /* header */ .header { vertical-align: middle; } /* footer */ .footer { color: black; font-family: arial, sans-serif; font-size: 50%; } .footer td { padding: 10px; padding-left: 5px; padding-right: 5px; } .footer a { color: #293747; font-weight: bold; text-decoration: underline; } /* index */ .index { background-color: #DBDBDB; border-color: #72726A; border-style: solid; border-width: 1px; font-family: sans-serif; font-size: 80%; } .index a { color: #293747; font-weight: bold; text-decoration: none; } .index a:hover { color: #010141; font-weight: bold; text-decoration: none; } .index ul li { list-style-image: none; } /* abstract */ #abstract { background-color: #DBDBDB; border-color: #72726A; border-style: solid; border-width: 1px; font-size: 95%; font-style: italic; padding-bottom: 10px; padding-left: 50px; padding-right: 70px; padding-top: 10px; text-indent: 20px; } /* citations */ .citations { font-size: 80%; } .citations a { text-decoration: none; } .citations a:active { color: #010141; text-decoration: none; } /* references */ .references { font-size: 80%; font-family: sans-serif; padding-right: 50px; } .references a { color: black; text-decoration: none; } .references a:link { color: #293747; font-weight: bold; text-decoration: none; } .references a:visited { color: #293747; font-weight: bold; text-decoration: none; }cb2bib-2.0.3/src/c2b/PaxHeaders/compositePattern.h0000644000000000000000000000013115104461633016665 xustar0030 mtime=1762812827.778761405 29 atime=1762812827.99875967 30 ctime=1762812827.778761405 cb2bib-2.0.3/src/c2b/compositePattern.h0000644000175000001440000000371415104461633020664 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef COMPOSITEPATTERN_H #define COMPOSITEPATTERN_H #include #include #include class compositePattern { public: compositePattern(); compositePattern(const QString& pattern, const Qt::CaseSensitivity cs); inline virtual ~compositePattern() {} inline const QString strings() const { return _string; } inline const QStringList substrings() const { return _substrings; } inline const QRegularExpression& regexp() const { return _regexp; } inline const QVector& subregexps() const { return _subregexps; } inline Qt::CaseSensitivity caseSensitivity() const { return _case_sensitivity; } inline int subpatternCount() const { return _subpattern_count; } inline int matchedLength() const { return _matched_length; } inline bool isMultipattern() const { return _is_multipattern; } virtual bool matches(const QString& str) const = 0; virtual int indexIn(const QString& str, const int from) const = 0; protected: static QString escape(const QString& str, const Qt::CaseSensitivity cs); void set_sort_index(); QList _ranks; QRegularExpression _regexp; QString _string; QStringList _substrings; QVector _subregexps; QVector _index; Qt::CaseSensitivity _case_sensitivity; bool _is_multipattern; int _subpattern_count; mutable QVector _p0; mutable QVector _pn; mutable int _matched_length; }; #endif cb2bib-2.0.3/src/c2b/PaxHeaders/bibPreparser.h0000644000000000000000000000013115104461633015745 xustar0030 mtime=1762812827.762761531 29 atime=1762812827.99875967 30 ctime=1762812827.762761531 cb2bib-2.0.3/src/c2b/bibPreparser.h0000644000175000001440000000163215104461633017741 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBPREPARSER_H #define BIBPREPARSER_H #include /** This class handles external processing of bibliographic items. It's formally an extension of the bibParser. */ class bibPreparser : public QObject { Q_OBJECT public: explicit bibPreparser(QObject* parento = 0); inline ~bibPreparser() {} void preparse(const QString& text, QString* out_text); signals: void preparserLogAvailable(const QString& log); void statusMessage(const QString& ms); private: QString m_inp_file; QString m_out_file; }; #endif cb2bib-2.0.3/src/c2b/PaxHeaders/posTagger.h0000644000000000000000000000013115104461633015260 xustar0030 mtime=1762812827.818761089 29 atime=1762812827.99875967 30 ctime=1762812827.818761089 cb2bib-2.0.3/src/c2b/posTagger.h0000644000175000001440000000322115104461633017250 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef POSTAGGER_H #define POSTAGGER_H #include #include class posTagger { public: posTagger(); inline ~posTagger() {} QString ruletag(const QString& word) const; QString tagged(const QString& text) const; bool loadLexicon(); inline bool contains(const QString& sentence) const { return _sentence_patterns.contains(sentence); } private: const QChar _period; const QChar _space; const QString _pos_a; const QString _pos_g; const QString _pos_n; const QString _pos_o; const QString _pos_r; const QString _pos_s; const QString _suffix_able; const QString _suffix_ae; const QString _suffix_al; const QString _suffix_apostrophes; const QString _suffix_ar; const QString _suffix_ed; const QString _suffix_ful; const QString _suffix_ic; const QString _suffix_ics; const QString _suffix_ing; const QString _suffix_is; const QString _suffix_ive; const QString _suffix_lent; const QString _suffix_less; const QString _suffix_like; const QString _suffix_ly; const QString _suffix_ous; const QString _suffix_s; const QString _suffix_ss; const QString _suffix_us; QHash _lexicon; QHash _sentence_patterns; }; #endif cb2bib-2.0.3/src/c2b/PaxHeaders/cb2bib_utilities.cpp0000644000000000000000000000013115104461633017076 xustar0030 mtime=1762812827.666762288 29 atime=1762812827.99875967 30 ctime=1762812827.666762288 cb2bib-2.0.3/src/c2b/cb2bib_utilities.cpp0000644000175000001440000014360715104461633021103 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "cb2bib_utilities.h" #include "txtmatcher.h" #include #if defined(C2B_USE_LZSSE) #include "./lzsse4/lzsse4.h" #elif defined(C2B_USE_LZ4) #include #include #elif defined(C2B_USE_LZO) #include #include #endif namespace c2bUtils { const QRegExp nonAsciiLetter("[^A-Za-z]"); const QRegExp nonLetter("\\W"); const QString arxivUrl("https://arxiv.org/abs/%1"); // Link set according to: "Creating a Web Link to the Entrez Databases", // http://www.ncbi.nlm.nih.gov/books/bv.fcgi?rid=helplinks.chapter.linkshelp#linkshelp.Retrieve_PubMed_Cita const QString pubmedUrl("https://pubmed.ncbi.nlm.nih.gov/%1"); const QString metadatasection("\n[Raw Metadata\n%1\n/Raw Metadata]\n"); QString setCapitalization(const QString& str) { QString cap_string(str); if (isUpperCaseString(str)) cap_string = cap_string.toLower(); bool do_upper(true); for (int i = 0; i < cap_string.length(); ++i) if (cap_string.at(i).isLetter()) { if (do_upper) { // Check for special cases: pH, mRNA, l-Alanine, Ea.hy926, p53, α/β-barrel bool can_do_upper(true); for (int j = i + 1; j < cap_string.length(); ++j) if (cap_string.at(j).isDigit() || (cap_string.at(j).isLetter() && cap_string.at(j).isUpper()) || (j - i <= 3 && cap_string.at(j) == QLatin1Char('-') && cap_string.at(i) >= QChar(945))) { can_do_upper = false; break; } else if (cap_string.at(j) == QLatin1Char(' ')) break; if (can_do_upper) cap_string[i] = cap_string.at(i).toUpper(); } do_upper = false; } else if (cap_string.at(i) == QLatin1Char('.') || cap_string.at(i) == QLatin1Char(':') || cap_string.at(i) == QLatin1Char('?')) do_upper = true; else if (cap_string.at(i) != QLatin1Char(' ')) do_upper = false; return cap_string; } QString& simplifyString(QString& str) { if (str.length() == 0) return str; const ushort space(32); ushort* const c0 = (ushort*)str.data(); ushort* const cn = c0 + str.length(); ushort* c = c0; ushort* o = c0; while (c < cn) { const ushort ch = *c; if ((ch > 32 && ch < 160) || !(ch == space || QChar(ch).isSpace())) *o++ = ch; else if (o > c0 && *(o - 1) != space) *o++ = space; ++c; } if (o > c0 && *(o - 1) == space) --o; str.truncate(int(o - c0)); return str; } QString& fillString(QString& str, const QStringMatcher& pattern, const QChar& ch) { if (str.length() == 0) return str; const int pl(pattern.pattern().length()); const ushort uch(ch.unicode()); ushort* const c0((ushort*)str.data()); int p(0); while (p >= 0) { p = pattern.indexIn(str, p); if (p > -1) { ushort* c(c0 + p); const ushort* const cpl(c + pl); while (c < cpl) *c++ = uch; p += pl; } } return str; } QString& fillString(QString& str, const QString& pattern, const QChar& ch) { return fillString(str, QStringMatcher(pattern, Qt::CaseSensitive), ch); } QString& fillString(QString& str, const txtmatcher& pattern, const QChar& ch) { if (str.length() == 0) return str; const int pl(pattern.pattern().length()); const ushort uch(ch.unicode()); ushort* const c0((ushort*)str.data()); int p(0); while (p >= 0) { p = pattern.indexIn(str, p); if (p > -1) { ushort* c(c0 + p); const ushort* const cpl(c + pl); while (c < cpl) *c++ = uch; p += pl; } } return str; } QString& fillString(QString& str, const QRegExp& pattern, const QChar& ch) { if (str.length() == 0) return str; const ushort uch(ch.unicode()); ushort* const c0((ushort*)str.data()); int p(0); while (p >= 0) { p = pattern.indexIn(str, p); if (p > -1) { const int pl(pattern.matchedLength()); ushort* c(c0 + p); const ushort* const cpl(c + pl); while (c < cpl) *c++ = uch; p += pl; } } return str; } QString& fillString(QString& str, const QRegularExpression& pattern, const QChar& ch) { if (str.length() == 0) return str; const ushort uch(ch.unicode()); ushort* const c0((ushort*)str.data()); QRegularExpressionMatchIterator it(pattern.globalMatch(str)); while (it.hasNext()) { const QRegularExpressionMatch match(it.next()); ushort* c(c0 + match.capturedStart()); const ushort* const cpl(c + match.capturedLength()); while (c < cpl) *c++ = uch; } return str; } static const unsigned short _cyrillic_to_ascii[] = { // Code points 1024 to 1309 // See http://en.wikipedia.org/wiki/ISO_9 69, 69, 68, 71, 69, 90, 73, 73, 74, 76, 78, 67, 75, 73, 85, 68, 65, 66, 86, 71, 68, 69, 90, 90, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 70, 72, 67, 67, 83, 83, 698, 89, 697, 69, 85, 65, 97, 98, 118, 103, 100, 101, 122, 122, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 116, 117, 102, 104, 99, 99, 115, 115, 698, 121, 697, 101, 117, 97, 101, 101, 100, 103, 101, 122, 105, 105, 106, 108, 110, 99, 107, 105, 117, 100, 1120, 1121, 69, 101, 1124, 1125, 1126, 1127, 1128, 1129, 65, 97, 1132, 1133, 1134, 1135, 1136, 1137, 70, 102, 89, 121, 89, 121, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 71, 103, 71, 103, 71, 103, 90, 122, 1176, 1177, 75, 107, 75, 107, 75, 107, 75, 107, 78, 110, 78, 110, 80, 112, 79, 111, 83, 115, 84, 116, 85, 117, 85, 117, 72, 104, 67, 99, 67, 99, 67, 99, 72, 104, 67, 99, 67, 99, 1216, 90, 122, 75, 107, 76, 108, 78, 110, 78, 110, 67, 99, 1229, 1230, 1231, 65, 97, 65, 97, 1236, 1237, 69, 101, 65, 97, 65, 97, 90, 122, 90, 122, 90, 122, 73, 105, 73, 105, 79, 111, 79, 111, 79, 111, 69, 101, 85, 117, 85, 117, 85, 117, 67, 99, 1270, 1271, 89, 121, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 78, 110, 1292, 1293, 84, 116, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 81, 113, 87, 119 }; static inline QString& _to_ascii_transliterate(QString& str) { // Strip diacritics, undo ligatures, transliterate if (str.length() == 0) return str; ushort* const c0 = (ushort*)str.data(); ushort* const cn = c0 + str.length(); ushort* c = c0 - 1; bool do_ligatures_198(false); bool do_ligatures_223(false); bool do_ligatures_230(false); bool do_ligatures_338(false); bool do_ligatures_339(false); while (c < cn) { ++c; if (*c < 128) continue; if (*c > 1023 && *c < 1310) { *c = _cyrillic_to_ascii[*c - 1024]; if (*c == 1236) { *c = 198; do_ligatures_198 = true; } if (*c == 1237) { *c = 230; do_ligatures_230 = true; } continue; } QChar qc(*c); if (!qc.isLetter()) continue; switch (*c) { case 216: *c = QChar('O').unicode(); break; case 248: *c = QChar('o').unicode(); break; case 272: *c = QChar('D').unicode(); break; case 273: *c = QChar('d').unicode(); break; case 321: *c = QChar('L').unicode(); break; case 322: *c = QChar('l').unicode(); break; case 198: do_ligatures_198 = true; break; case 223: do_ligatures_223 = true; break; case 230: do_ligatures_230 = true; break; case 338: do_ligatures_338 = true; break; case 339: do_ligatures_339 = true; break; } if (qc.decompositionTag() == QChar::NoDecomposition) continue; qc = qc.decomposition().at(0); *c = qc.unicode(); if (qc.decompositionTag() == QChar::NoDecomposition) continue; qc = qc.decomposition().at(0); *c = qc.unicode(); } if (do_ligatures_198) str.replace(QChar(198), "AE", Qt::CaseSensitive); if (do_ligatures_223) str.replace(QChar(223), "ss", Qt::CaseSensitive); if (do_ligatures_230) str.replace(QChar(230), "ae", Qt::CaseSensitive); if (do_ligatures_338) str.replace(QChar(338), "OE", Qt::CaseSensitive); if (do_ligatures_339) str.replace(QChar(339), "oe", Qt::CaseSensitive); return str; } static inline QString& _to_ascii_keep_words(QString& str) { // Do: // const QRegExp nonAsciiWords("[^A-Za-z0-9\\+\\- ]"); // str.replace(nonAsciiWords, " "); // str = str.simplified(); if (str.length() == 0) return str; const ushort dash(QChar('-').unicode()); const ushort la(QChar('a').unicode()); const ushort lz(QChar('z').unicode()); const ushort n0(QChar('0').unicode()); const ushort n9(QChar('9').unicode()); const ushort plus(QChar('+').unicode()); const ushort space(QChar(' ').unicode()); const ushort ua(QChar('A').unicode()); const ushort uz(QChar('Z').unicode()); ushort* const c0 = (ushort*)str.data(); ushort* const cn = c0 + str.length(); ushort* c = c0; ushort* o = c0; while (c < cn) { const ushort ch = *c; if ((ch >= la && ch <= lz) || (ch >= ua && ch <= uz) || (ch >= n0 && ch <= n9) || ch == dash || ch == plus) *o++ = ch; else if (o > c0 && *(o - 1) != space) *o++ = space; ++c; } if (o > c0 && *(o - 1) == space) --o; str.truncate(int(o - c0)); return str; } QString toAscii(const QString& str, const AsciiConversion type) { QString ascii(str); if (type == FromBibTeX) cleanEquations(ascii); _to_ascii_transliterate(ascii); if (type == Collation) { for (int i = 0; i < ascii.length(); ++i) if (ascii.at(i).category() == QChar::Punctuation_Dash) ascii[i] = QLatin1Char(' '); return ascii.toCaseFolded(); } if (type == KeepWords || type == FromBibTeX) _to_ascii_keep_words(ascii); else if (type == Cleanup) remove(ascii, nonAsciiLetter); return ascii; } QString& stripDiacritics(QString& str) { _to_ascii_transliterate(str); return str; } QString& c2bToBib(QString& str) { // Escape common Extended Latin characters str.replace(QLatin1String(" &"), QLatin1String(" \\&")); str.replace(QChar(192), QLatin1String("{\\`A}")); str.replace(QChar(193), QLatin1String("{\\'A}")); str.replace(QChar(194), QLatin1String("{\\^A}")); str.replace(QChar(195), QLatin1String("{\\~A}")); str.replace(QChar(196), QLatin1String("{\\\"A}")); str.replace(QChar(197), QLatin1String("{\\AA}")); str.replace(QChar(198), QLatin1String("{\\AE}")); str.replace(QChar(199), QLatin1String("{\\c C}")); str.replace(QChar(200), QLatin1String("{\\`E}")); str.replace(QChar(201), QLatin1String("{\\'E}")); str.replace(QChar(202), QLatin1String("{\\^E}")); str.replace(QChar(203), QLatin1String("{\\\"E}")); str.replace(QChar(204), QLatin1String("{\\`I}")); str.replace(QChar(205), QLatin1String("{\\'I}")); str.replace(QChar(206), QLatin1String("{\\^I}")); str.replace(QChar(207), QLatin1String("{\\\"I}")); str.replace(QChar(209), QLatin1String("{\\~N}")); str.replace(QChar(210), QLatin1String("{\\`O}")); str.replace(QChar(211), QLatin1String("{\\'O}")); str.replace(QChar(212), QLatin1String("{\\^O}")); str.replace(QChar(213), QLatin1String("{\\~O}")); str.replace(QChar(214), QLatin1String("{\\\"O}")); str.replace(QChar(216), QLatin1String("{\\O}")); str.replace(QChar(217), QLatin1String("{\\`U}")); str.replace(QChar(218), QLatin1String("{\\'U}")); str.replace(QChar(219), QLatin1String("{\\^U}")); str.replace(QChar(220), QLatin1String("{\\\"U}")); str.replace(QChar(221), QLatin1String("{\\'Y}")); str.replace(QChar(223), QLatin1String("{\\ss}")); str.replace(QChar(224), QLatin1String("{\\`a}")); str.replace(QChar(225), QLatin1String("{\\'a}")); str.replace(QChar(226), QLatin1String("{\\^a}")); str.replace(QChar(227), QLatin1String("{\\~a}")); str.replace(QChar(228), QLatin1String("{\\\"a}")); str.replace(QChar(229), QLatin1String("{\\aa}")); str.replace(QChar(230), QLatin1String("{\\ae}")); str.replace(QChar(231), QLatin1String("{\\c c}")); str.replace(QChar(232), QLatin1String("{\\`e}")); str.replace(QChar(233), QLatin1String("{\\'e}")); str.replace(QChar(234), QLatin1String("{\\^e}")); str.replace(QChar(235), QLatin1String("{\\\"e}")); str.replace(QChar(236), QLatin1String("{\\`i}")); str.replace(QChar(237), QLatin1String("{\\'i}")); str.replace(QChar(238), QLatin1String("{\\^i}")); str.replace(QChar(239), QLatin1String("{\\\"i}")); str.replace(QChar(241), QLatin1String("{\\~n}")); str.replace(QChar(242), QLatin1String("{\\`o}")); str.replace(QChar(243), QLatin1String("{\\'o}")); str.replace(QChar(244), QLatin1String("{\\^o}")); str.replace(QChar(245), QLatin1String("{\\~o}")); str.replace(QChar(246), QLatin1String("{\\\"o}")); str.replace(QChar(248), QLatin1String("{\\o}")); str.replace(QChar(249), QLatin1String("{\\`u}")); str.replace(QChar(250), QLatin1String("{\\'u}")); str.replace(QChar(251), QLatin1String("{\\^u}")); str.replace(QChar(252), QLatin1String("{\\\"u}")); str.replace(QChar(253), QLatin1String("{\\'y}")); str.replace(QChar(255), QLatin1String("{\\\"y}")); str.replace(QChar(256), QLatin1String("{\\=A}")); str.replace(QChar(257), QLatin1String("{\\=a}")); str.replace(QChar(258), QLatin1String("{\\u A}")); str.replace(QChar(259), QLatin1String("{\\u a}")); str.replace(QChar(260), QLatin1String("{\\c A}")); str.replace(QChar(261), QLatin1String("{\\c a}")); str.replace(QChar(262), QLatin1String("{\\'C}")); str.replace(QChar(263), QLatin1String("{\\'c}")); str.replace(QChar(264), QLatin1String("{\\^C}")); str.replace(QChar(265), QLatin1String("{\\^c}")); str.replace(QChar(266), QLatin1String("{\\.C}")); str.replace(QChar(267), QLatin1String("{\\.c}")); str.replace(QChar(268), QLatin1String("{\\v C}")); str.replace(QChar(269), QLatin1String("{\\v c}")); str.replace(QChar(270), QLatin1String("{\\v D}")); str.replace(QChar(271), QLatin1String("{\\v d}")); str.replace(QChar(272), QLatin1String("{\\DJ}")); str.replace(QChar(273), QLatin1String("{\\dj}")); str.replace(QChar(274), QLatin1String("{\\=E}")); str.replace(QChar(275), QLatin1String("{\\=e}")); str.replace(QChar(276), QLatin1String("{\\u E}")); str.replace(QChar(277), QLatin1String("{\\u e}")); str.replace(QChar(278), QLatin1String("{\\.E}")); str.replace(QChar(279), QLatin1String("{\\.e}")); str.replace(QChar(280), QLatin1String("{\\c E}")); str.replace(QChar(281), QLatin1String("{\\c e}")); str.replace(QChar(282), QLatin1String("{\\v E}")); str.replace(QChar(283), QLatin1String("{\\v e}")); str.replace(QChar(284), QLatin1String("{\\^G}")); str.replace(QChar(285), QLatin1String("{\\^g}")); str.replace(QChar(286), QLatin1String("{\\u G}")); str.replace(QChar(287), QLatin1String("{\\u g}")); str.replace(QChar(288), QLatin1String("{\\.G}")); str.replace(QChar(289), QLatin1String("{\\.g}")); str.replace(QChar(290), QLatin1String("{\\c G}")); str.replace(QChar(291), QLatin1String("{\\c g}")); str.replace(QChar(292), QLatin1String("{\\^H}")); str.replace(QChar(293), QLatin1String("{\\^h}")); str.replace(QChar(294), QLatin1String("{\\H}")); str.replace(QChar(295), QLatin1String("{\\h}")); str.replace(QChar(296), QLatin1String("{\\~I}")); str.replace(QChar(297), QLatin1String("{\\~i}")); str.replace(QChar(298), QLatin1String("{\\=I}")); str.replace(QChar(299), QLatin1String("{\\=i}")); str.replace(QChar(300), QLatin1String("{\\u I}")); str.replace(QChar(301), QLatin1String("{\\u i}")); str.replace(QChar(302), QLatin1String("{\\c I}")); str.replace(QChar(303), QLatin1String("{\\c i}")); str.replace(QChar(304), QLatin1String("{\\.I}")); str.replace(QChar(305), QLatin1String("{\\i}")); str.replace(QChar(321), QLatin1String("{\\L}")); str.replace(QChar(322), QLatin1String("{\\l}")); str.replace(QChar(323), QLatin1String("{\\'N}")); str.replace(QChar(324), QLatin1String("{\\'n}")); str.replace(QChar(325), QLatin1String("{\\c N}")); str.replace(QChar(326), QLatin1String("{\\c n}")); str.replace(QChar(327), QLatin1String("{\\v N}")); str.replace(QChar(328), QLatin1String("{\\v n}")); str.replace(QChar(332), QLatin1String("{\\=O}")); str.replace(QChar(333), QLatin1String("{\\=o}")); str.replace(QChar(334), QLatin1String("{\\u O}")); str.replace(QChar(335), QLatin1String("{\\u o}")); str.replace(QChar(336), QLatin1String("{\\H O}")); str.replace(QChar(337), QLatin1String("{\\H o}")); str.replace(QChar(338), QLatin1String("{\\OE}")); str.replace(QChar(339), QLatin1String("{\\oe}")); str.replace(QChar(340), QLatin1String("{\\'R}")); str.replace(QChar(341), QLatin1String("{\\'r}")); str.replace(QChar(342), QLatin1String("{\\c R}")); str.replace(QChar(343), QLatin1String("{\\c r}")); str.replace(QChar(344), QLatin1String("{\\v R}")); str.replace(QChar(345), QLatin1String("{\\v r}")); str.replace(QChar(346), QLatin1String("{\\'S}")); str.replace(QChar(347), QLatin1String("{\\'s}")); str.replace(QChar(348), QLatin1String("{\\^S}")); str.replace(QChar(349), QLatin1String("{\\^s}")); str.replace(QChar(350), QLatin1String("{\\c S}")); str.replace(QChar(351), QLatin1String("{\\c s}")); str.replace(QChar(352), QLatin1String("{\\v S}")); str.replace(QChar(353), QLatin1String("{\\v s}")); str.replace(QChar(354), QLatin1String("{\\c T}")); str.replace(QChar(355), QLatin1String("{\\c t}")); str.replace(QChar(356), QLatin1String("{\\v T}")); str.replace(QChar(357), QLatin1String("{\\v t}")); str.replace(QChar(374), QLatin1String("{\\^Y}")); str.replace(QChar(375), QLatin1String("{\\^y}")); str.replace(QChar(376), QLatin1String("{\\\"Y}")); str.replace(QChar(377), QLatin1String("{\\'Z}")); str.replace(QChar(378), QLatin1String("{\\'z}")); str.replace(QChar(379), QLatin1String("{\\.Z}")); str.replace(QChar(380), QLatin1String("{\\.z}")); str.replace(QChar(381), QLatin1String("{\\v Z}")); str.replace(QChar(382), QLatin1String("{\\v z}")); // Escape common Greek and math // Some uppercases might require engrec package str.replace(QChar(181), QLatin1String("$\\mu$")); str.replace(QChar(183), QLatin1String("$\\cdot$")); str.replace(QChar(913), QLatin1String("$\\Alpha$")); str.replace(QChar(914), QLatin1String("$\\Beta$")); str.replace(QChar(915), QLatin1String("$\\Gamma$")); str.replace(QChar(916), QLatin1String("$\\Delta$")); str.replace(QChar(917), QLatin1String("$\\Epsilon$")); str.replace(QChar(918), QLatin1String("$\\Zeta$")); str.replace(QChar(919), QLatin1String("$\\Eta$")); str.replace(QChar(920), QLatin1String("$\\Theta$")); str.replace(QChar(921), QLatin1String("$\\Iota$")); str.replace(QChar(922), QLatin1String("$\\Kappa$")); str.replace(QChar(923), QLatin1String("$\\Lambda$")); str.replace(QChar(924), QLatin1String("$\\Mu$")); str.replace(QChar(925), QLatin1String("$\\Nu$")); str.replace(QChar(926), QLatin1String("$\\Xi$")); str.replace(QChar(927), QLatin1String("$\\Omicron$")); str.replace(QChar(928), QLatin1String("$\\Pi$")); str.replace(QChar(929), QLatin1String("$\\Rho$")); str.replace(QChar(931), QLatin1String("$\\Sigma$")); str.replace(QChar(932), QLatin1String("$\\Tau$")); str.replace(QChar(933), QLatin1String("$\\Upsilon$")); str.replace(QChar(934), QLatin1String("$\\Phi$")); str.replace(QChar(935), QLatin1String("$\\Chi$")); str.replace(QChar(936), QLatin1String("$\\Psi$")); str.replace(QChar(937), QLatin1String("$\\Omega$")); str.replace(QChar(945), QLatin1String("$\\alpha$")); str.replace(QChar(946), QLatin1String("$\\beta$")); str.replace(QChar(947), QLatin1String("$\\gamma$")); str.replace(QChar(948), QLatin1String("$\\delta$")); str.replace(QChar(949), QLatin1String("$\\varepsilon$")); str.replace(QChar(950), QLatin1String("$\\zeta$")); str.replace(QChar(951), QLatin1String("$\\eta$")); str.replace(QChar(952), QLatin1String("$\\theta$")); str.replace(QChar(953), QLatin1String("$\\iota$")); str.replace(QChar(954), QLatin1String("$\\kappa$")); str.replace(QChar(955), QLatin1String("$\\lambda$")); str.replace(QChar(956), QLatin1String("$\\mu$")); str.replace(QChar(957), QLatin1String("$\\nu$")); str.replace(QChar(958), QLatin1String("$\\xi$")); str.replace(QChar(959), QLatin1String("$\\omicron$")); str.replace(QChar(960), QLatin1String("$\\pi$")); str.replace(QChar(961), QLatin1String("$\\rho$")); str.replace(QChar(962), QLatin1String("$\\varsigma$")); str.replace(QChar(963), QLatin1String("$\\sigma$")); str.replace(QChar(964), QLatin1String("$\\tau$")); str.replace(QChar(965), QLatin1String("$\\upsilon$")); str.replace(QChar(966), QLatin1String("$\\phi$")); str.replace(QChar(967), QLatin1String("$\\chi$")); str.replace(QChar(968), QLatin1String("$\\psi$")); str.replace(QChar(969), QLatin1String("$\\omega$")); str.replace(QChar(977), QLatin1String("$\\vartheta$")); str.replace(QChar(981), QLatin1String("$\\varphi$")); str.replace(QChar(982), QLatin1String("$\\varpi$")); str.replace(QChar(989), QLatin1String("$\\digamma$")); str.replace(QChar(1008), QLatin1String("$\\varkappa$")); str.replace(QChar(1009), QLatin1String("$\\varrho$")); str.replace(QChar(1013), QLatin1String("$\\epsilon$")); str.replace(QChar(8211), '-'); str.replace(QChar(8462), QLatin1String("$\\hbar$")); str.replace(QChar(8463), QLatin1String("$\\hslash$")); str.replace(QChar(8467), QLatin1String("$\\ell$")); str.replace(QChar(8476), QLatin1String("$\\Re$")); str.replace(QChar(8706), QLatin1String("$\\partial$")); str.replace(QChar(8722), '-'); str.replace(QChar(8734), QLatin1String("$\\infty$")); str.replace(QChar(8764), QLatin1String("$\\sim$")); str.replace(QChar(8943), QLatin1String("$\\cdots$")); return str; } QHash latex_to_unicode() { QHash lu; lu.insert(QLatin1String("{\\&}"), QChar(38)); lu.insert(QLatin1String("$\\cdot$"), QChar(183)); lu.insert(QLatin1String("{\\`A}"), QChar(192)); lu.insert(QLatin1String("{\\'A}"), QChar(193)); lu.insert(QLatin1String("{\\^A}"), QChar(194)); lu.insert(QLatin1String("{\\~A}"), QChar(195)); lu.insert(QLatin1String("{\\\"A}"), QChar(196)); lu.insert(QLatin1String("{\\AA}"), QChar(197)); lu.insert(QLatin1String("{\\AE}"), QChar(198)); lu.insert(QLatin1String("{\\c C}"), QChar(199)); lu.insert(QLatin1String("{\\`E}"), QChar(200)); lu.insert(QLatin1String("{\\'E}"), QChar(201)); lu.insert(QLatin1String("{\\^E}"), QChar(202)); lu.insert(QLatin1String("{\\\"E}"), QChar(203)); lu.insert(QLatin1String("{\\`I}"), QChar(204)); lu.insert(QLatin1String("{\\'I}"), QChar(205)); lu.insert(QLatin1String("{\\^I}"), QChar(206)); lu.insert(QLatin1String("{\\\"I}"), QChar(207)); lu.insert(QLatin1String("{\\~N}"), QChar(209)); lu.insert(QLatin1String("{\\`O}"), QChar(210)); lu.insert(QLatin1String("{\\'O}"), QChar(211)); lu.insert(QLatin1String("{\\^O}"), QChar(212)); lu.insert(QLatin1String("{\\~O}"), QChar(213)); lu.insert(QLatin1String("{\\\"O}"), QChar(214)); lu.insert(QLatin1String("{\\O}"), QChar(216)); lu.insert(QLatin1String("{\\`U}"), QChar(217)); lu.insert(QLatin1String("{\\'U}"), QChar(218)); lu.insert(QLatin1String("{\\^U}"), QChar(219)); lu.insert(QLatin1String("{\\\"U}"), QChar(220)); lu.insert(QLatin1String("{\\'Y}"), QChar(221)); lu.insert(QLatin1String("{\\ss}"), QChar(223)); lu.insert(QLatin1String("{\\`a}"), QChar(224)); lu.insert(QLatin1String("{\\'a}"), QChar(225)); lu.insert(QLatin1String("{\\^a}"), QChar(226)); lu.insert(QLatin1String("{\\~a}"), QChar(227)); lu.insert(QLatin1String("{\\\"a}"), QChar(228)); lu.insert(QLatin1String("{\\aa}"), QChar(229)); lu.insert(QLatin1String("{\\ae}"), QChar(230)); lu.insert(QLatin1String("{\\c c}"), QChar(231)); lu.insert(QLatin1String("{\\`e}"), QChar(232)); lu.insert(QLatin1String("{\\'e}"), QChar(233)); lu.insert(QLatin1String("{\\^e}"), QChar(234)); lu.insert(QLatin1String("{\\\"e}"), QChar(235)); lu.insert(QLatin1String("{\\`\\i}"), QChar(236)); lu.insert(QLatin1String("{\\`i}"), QChar(236)); lu.insert(QLatin1String("{\\'\\i}"), QChar(237)); lu.insert(QLatin1String("{\\'i}"), QChar(237)); lu.insert(QLatin1String("{\\^\\i}"), QChar(238)); lu.insert(QLatin1String("{\\^i}"), QChar(238)); lu.insert(QLatin1String("{\\\"\\i}"), QChar(239)); lu.insert(QLatin1String("{\\\"i}"), QChar(239)); lu.insert(QLatin1String("{\\~n}"), QChar(241)); lu.insert(QLatin1String("{\\`o}"), QChar(242)); lu.insert(QLatin1String("{\\'o}"), QChar(243)); lu.insert(QLatin1String("{\\^o}"), QChar(244)); lu.insert(QLatin1String("{\\~o}"), QChar(245)); lu.insert(QLatin1String("{\\\"o}"), QChar(246)); lu.insert(QLatin1String("{\\o}"), QChar(248)); lu.insert(QLatin1String("{\\`u}"), QChar(249)); lu.insert(QLatin1String("{\\'u}"), QChar(250)); lu.insert(QLatin1String("{\\^u}"), QChar(251)); lu.insert(QLatin1String("{\\\"u}"), QChar(252)); lu.insert(QLatin1String("{\\'y}"), QChar(253)); lu.insert(QLatin1String("{\\\"y}"), QChar(255)); lu.insert(QLatin1String("{\\=A}"), QChar(256)); lu.insert(QLatin1String("{\\=a}"), QChar(257)); lu.insert(QLatin1String("{\\u A}"), QChar(258)); lu.insert(QLatin1String("{\\u a}"), QChar(259)); lu.insert(QLatin1String("{\\c A}"), QChar(260)); lu.insert(QLatin1String("{\\c a}"), QChar(261)); lu.insert(QLatin1String("{\\'C}"), QChar(262)); lu.insert(QLatin1String("{\\'c}"), QChar(263)); lu.insert(QLatin1String("{\\^C}"), QChar(264)); lu.insert(QLatin1String("{\\^c}"), QChar(265)); lu.insert(QLatin1String("{\\.C}"), QChar(266)); lu.insert(QLatin1String("{\\.c}"), QChar(267)); lu.insert(QLatin1String("{\\v C}"), QChar(268)); lu.insert(QLatin1String("{\\v c}"), QChar(269)); lu.insert(QLatin1String("{\\v D}"), QChar(270)); lu.insert(QLatin1String("{\\v d}"), QChar(271)); lu.insert(QLatin1String("{\\DJ}"), QChar(272)); lu.insert(QLatin1String("{\\dj}"), QChar(273)); lu.insert(QLatin1String("{\\=E}"), QChar(274)); lu.insert(QLatin1String("{\\=e}"), QChar(275)); lu.insert(QLatin1String("{\\u E}"), QChar(276)); lu.insert(QLatin1String("{\\u e}"), QChar(277)); lu.insert(QLatin1String("{\\.E}"), QChar(278)); lu.insert(QLatin1String("{\\.e}"), QChar(279)); lu.insert(QLatin1String("{\\c E}"), QChar(280)); lu.insert(QLatin1String("{\\c e}"), QChar(281)); lu.insert(QLatin1String("{\\v E}"), QChar(282)); lu.insert(QLatin1String("{\\v e}"), QChar(283)); lu.insert(QLatin1String("{\\^G}"), QChar(284)); lu.insert(QLatin1String("{\\^g}"), QChar(285)); lu.insert(QLatin1String("{\\u G}"), QChar(286)); lu.insert(QLatin1String("{\\u g}"), QChar(287)); lu.insert(QLatin1String("{\\.G}"), QChar(288)); lu.insert(QLatin1String("{\\.g}"), QChar(289)); lu.insert(QLatin1String("{\\c G}"), QChar(290)); lu.insert(QLatin1String("{\\c g}"), QChar(291)); lu.insert(QLatin1String("{\\^H}"), QChar(292)); lu.insert(QLatin1String("{\\^h}"), QChar(293)); lu.insert(QLatin1String("{\\H}"), QChar(294)); lu.insert(QLatin1String("{\\h}"), QChar(295)); lu.insert(QLatin1String("{\\~I}"), QChar(296)); lu.insert(QLatin1String("{\\~i}"), QChar(297)); lu.insert(QLatin1String("{\\=I}"), QChar(298)); lu.insert(QLatin1String("{\\=i}"), QChar(299)); lu.insert(QLatin1String("{\\u I}"), QChar(300)); lu.insert(QLatin1String("{\\u i}"), QChar(301)); lu.insert(QLatin1String("{\\c I}"), QChar(302)); lu.insert(QLatin1String("{\\c i}"), QChar(303)); lu.insert(QLatin1String("{\\.I}"), QChar(304)); lu.insert(QLatin1String("{\\i}"), QChar(305)); lu.insert(QLatin1String("{\\L}"), QChar(321)); lu.insert(QLatin1String("{\\l}"), QChar(322)); lu.insert(QLatin1String("{\\'N}"), QChar(323)); lu.insert(QLatin1String("{\\'n}"), QChar(324)); lu.insert(QLatin1String("{\\c N}"), QChar(325)); lu.insert(QLatin1String("{\\c n}"), QChar(326)); lu.insert(QLatin1String("{\\v N}"), QChar(327)); lu.insert(QLatin1String("{\\v n}"), QChar(328)); lu.insert(QLatin1String("{\\=O}"), QChar(332)); lu.insert(QLatin1String("{\\=o}"), QChar(333)); lu.insert(QLatin1String("{\\u O}"), QChar(334)); lu.insert(QLatin1String("{\\u o}"), QChar(335)); lu.insert(QLatin1String("{\\H O}"), QChar(336)); lu.insert(QLatin1String("{\\H o}"), QChar(337)); lu.insert(QLatin1String("{\\OE}"), QChar(338)); lu.insert(QLatin1String("{\\oe}"), QChar(339)); lu.insert(QLatin1String("{\\'R}"), QChar(340)); lu.insert(QLatin1String("{\\'r}"), QChar(341)); lu.insert(QLatin1String("{\\c R}"), QChar(342)); lu.insert(QLatin1String("{\\c r}"), QChar(343)); lu.insert(QLatin1String("{\\v R}"), QChar(344)); lu.insert(QLatin1String("{\\v r}"), QChar(345)); lu.insert(QLatin1String("{\\'S}"), QChar(346)); lu.insert(QLatin1String("{\\'s}"), QChar(347)); lu.insert(QLatin1String("{\\^S}"), QChar(348)); lu.insert(QLatin1String("{\\^s}"), QChar(349)); lu.insert(QLatin1String("{\\c S}"), QChar(350)); lu.insert(QLatin1String("{\\c s}"), QChar(351)); lu.insert(QLatin1String("{\\v S}"), QChar(352)); lu.insert(QLatin1String("{\\v s}"), QChar(353)); lu.insert(QLatin1String("{\\c T}"), QChar(354)); lu.insert(QLatin1String("{\\c t}"), QChar(355)); lu.insert(QLatin1String("{\\v T}"), QChar(356)); lu.insert(QLatin1String("{\\v t}"), QChar(357)); lu.insert(QLatin1String("{\\^Y}"), QChar(374)); lu.insert(QLatin1String("{\\^y}"), QChar(375)); lu.insert(QLatin1String("{\\\"Y}"), QChar(376)); lu.insert(QLatin1String("{\\'Z}"), QChar(377)); lu.insert(QLatin1String("{\\'z}"), QChar(378)); lu.insert(QLatin1String("{\\.Z}"), QChar(379)); lu.insert(QLatin1String("{\\.z}"), QChar(380)); lu.insert(QLatin1String("{\\v Z}"), QChar(381)); lu.insert(QLatin1String("{\\v z}"), QChar(382)); lu.insert(QLatin1String("$\\Alpha$"), QChar(913)); lu.insert(QLatin1String("$\\Beta$"), QChar(914)); lu.insert(QLatin1String("$\\Gamma$"), QChar(915)); lu.insert(QLatin1String("$\\Delta$"), QChar(916)); lu.insert(QLatin1String("$\\Epsilon$"), QChar(917)); lu.insert(QLatin1String("$\\Zeta$"), QChar(918)); lu.insert(QLatin1String("$\\Eta$"), QChar(919)); lu.insert(QLatin1String("$\\Theta$"), QChar(920)); lu.insert(QLatin1String("$\\Iota$"), QChar(921)); lu.insert(QLatin1String("$\\Kappa$"), QChar(922)); lu.insert(QLatin1String("$\\Lambda$"), QChar(923)); lu.insert(QLatin1String("$\\Mu$"), QChar(924)); lu.insert(QLatin1String("$\\Nu$"), QChar(925)); lu.insert(QLatin1String("$\\Xi$"), QChar(926)); lu.insert(QLatin1String("$\\Omicron$"), QChar(927)); lu.insert(QLatin1String("$\\Pi$"), QChar(928)); lu.insert(QLatin1String("$\\Rho$"), QChar(929)); lu.insert(QLatin1String("$\\Sigma$"), QChar(931)); lu.insert(QLatin1String("$\\Tau$"), QChar(932)); lu.insert(QLatin1String("$\\Upsilon$"), QChar(933)); lu.insert(QLatin1String("$\\Phi$"), QChar(934)); lu.insert(QLatin1String("$\\Chi$"), QChar(935)); lu.insert(QLatin1String("$\\Psi$"), QChar(936)); lu.insert(QLatin1String("$\\Omega$"), QChar(937)); lu.insert(QLatin1String("$\\alpha$"), QChar(945)); lu.insert(QLatin1String("$\\beta$"), QChar(946)); lu.insert(QLatin1String("$\\gamma$"), QChar(947)); lu.insert(QLatin1String("$\\delta$"), QChar(948)); lu.insert(QLatin1String("$\\varepsilon$"), QChar(949)); lu.insert(QLatin1String("$\\zeta$"), QChar(950)); lu.insert(QLatin1String("$\\eta$"), QChar(951)); lu.insert(QLatin1String("$\\theta$"), QChar(952)); lu.insert(QLatin1String("$\\iota$"), QChar(953)); lu.insert(QLatin1String("$\\kappa$"), QChar(954)); lu.insert(QLatin1String("$\\lambda$"), QChar(955)); lu.insert(QLatin1String("$\\mu$"), QChar(956)); lu.insert(QLatin1String("$\\nu$"), QChar(957)); lu.insert(QLatin1String("$\\xi$"), QChar(958)); lu.insert(QLatin1String("$\\omicron$"), QChar(959)); lu.insert(QLatin1String("$\\pi$"), QChar(960)); lu.insert(QLatin1String("$\\rho$"), QChar(961)); lu.insert(QLatin1String("$\\sigmaf$"), QChar(962)); lu.insert(QLatin1String("$\\varsigma$"), QChar(962)); lu.insert(QLatin1String("$\\sigma$"), QChar(963)); lu.insert(QLatin1String("$\\tau$"), QChar(964)); lu.insert(QLatin1String("$\\upsilon$"), QChar(965)); lu.insert(QLatin1String("$\\phi$"), QChar(966)); lu.insert(QLatin1String("$\\chi$"), QChar(967)); lu.insert(QLatin1String("$\\psi$"), QChar(968)); lu.insert(QLatin1String("$\\omega$"), QChar(969)); lu.insert(QLatin1String("$\\vartheta$"), QChar(977)); lu.insert(QLatin1String("$\\varphi$"), QChar(981)); lu.insert(QLatin1String("$\\varpi$"), QChar(982)); lu.insert(QLatin1String("$\\digamma$"), QChar(989)); lu.insert(QLatin1String("$\\varkappa$"), QChar(1008)); lu.insert(QLatin1String("$\\varrho$"), QChar(1009)); lu.insert(QLatin1String("$\\epsilon$"), QChar(1013)); lu.insert(QLatin1String("$\\hbar$"), QChar(8462)); lu.insert(QLatin1String("$\\hslash$"), QChar(8463)); lu.insert(QLatin1String("$\\ell$"), QChar(8467)); lu.insert(QLatin1String("$\\Re$"), QChar(8476)); lu.insert(QLatin1String("$\\partial$"), QChar(8706)); lu.insert(QLatin1String("$\\infty$"), QChar(8734)); lu.insert(QLatin1String("$\\sim$"), QChar(8764)); lu.insert(QLatin1String("$\\cdots$"), QChar(8943)); return lu; } const QHash latex_to_unicode_hash(latex_to_unicode()); const txtmatcher hasLatex("\\", Qt::CaseSensitive, 0); QString& bibToC2b(QString& str) { const int length(str.length()); if (length < 2) return str; int cursor(hasLatex.indexIn(str)); if (cursor < 0) return str; QChar* const s(str.data()); QString latex; bool modified(false); const QChar amp('&'); const QChar close('}'); const QChar del(0); const QChar dollar('$'); const QChar open('{'); const int mblen(7), mdlen(14); if (cursor == 0) { if (s[cursor + 1] == amp) { s[cursor] = del; modified = true; } ++cursor; } while (true) { cursor = hasLatex.indexIn(s, length, cursor); if (cursor < 1) break; if (s[cursor - 1] == open) { const int ls(cursor - 1); const int m(std::min(cursor + mblen, length)); for (; cursor < m; ++cursor) if (s[cursor] == close) { latex.setRawData(s + ls, cursor - ls + 1); if (latex_to_unicode_hash.contains(latex)) { s[ls] = latex_to_unicode_hash.value(latex); for (int l = ls + 1; l <= cursor; ++l) s[l] = del; modified = true; } break; } cursor = ls + 2; continue; } if (s[cursor - 1] == dollar) { const int ls(cursor - 1); const int m(std::min(cursor + mdlen, length)); for (; cursor < m; ++cursor) if (s[cursor] == dollar) { latex.setRawData(s + ls, cursor - ls + 1); if (latex_to_unicode_hash.contains(latex)) { s[ls] = latex_to_unicode_hash.value(latex); for (int l = ls + 1; l <= cursor; ++l) s[l] = del; modified = true; } break; } cursor = ls + 2; continue; } if (s[cursor + 1] == amp) { s[cursor] = del; modified = true; cursor += 2; continue; } cursor += 1; continue; } if (modified) { int c(0); for (int l = 0; l < length; ++l) if (s[l] != del) s[c++] = s[l]; str.truncate(c); } return str; } const QRegExp isBibToC2b("[\\{\\[\\$\\(\\\\<>]"); const QRegExp pnasGreekLetters("[\\{\\[\\(](alpha|beta|gamma|delta|varepsilon|" "zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|" "omicron|pi|rho|sigmaf|varsigma|sigma|tau|" "upsilon|phi|chi|psi|omega|vartheta|varphi|" "varpi|digamma|varkappa|varrho|epsilon)[\\}\\]\\)]", Qt::CaseInsensitive); QString& fullBibToC2b(QString& str) { // Escape TeX and other special characters to Unicode if (isBibToC2b.indexIn(str) == -1) return str; // PNAS Style replace(str, pnasGreekLetters, "$\\\\1$"); str.replace(QLatin1String("{micro}"), QLatin1String("$\\mu$")); str.replace(QLatin1String("{middle dot}"), QLatin1String("$\\cdot$")); // Sub and superscripts replace(str, QRegExp("([^<]*)"), "$_{\\1}$"); replace(str, QRegExp("([^<]*)"), "$^{\\1}$"); replace(str, QRegExp("\\[sub ([^\\]]*)\\]"), "$_{\\1}$"); replace(str, QRegExp("\\[sup ([^\\]]*)\\]"), "$^{\\1}$"); replace(str, QRegExp("\\}\\$\\$([_\\^])\\{"), "}\\1{"); // merge if both // Normalize TeX replace(str, QRegExp("\\{\\\\(\\W)\\{([\\\\]{0,1}\\w)\\}\\}"), "{\\\\1\\2}"); // {\'{A}} to {\'A} replace(str, QRegExp("\\{\\\\(\\w)\\{([\\\\]{0,1}\\w)\\}\\}"), "{\\\\1 \\2}"); // {\c{C}} to {\c C} replace(str, QRegExp("\\\\(\\W)\\{([\\\\]{0,1}\\w)\\}"), "{\\\\1\\2}"); // \'{A} to {\'A} replace(str, QRegExp("\\\\(\\w)\\{([\\\\]{0,1}\\w)\\}"), "{\\\\1 \\2}"); // \c{C} to {\c C} replace(str, QRegExp("\\{\\\\(.{1,2})\\{(\\w{0,2})\\}\\}"), "{\\\\1\\2}"); // {\\AA{}} to {\\AA} replace(str, QRegExp("\\\\\\{([A-Z]\\w{1,7})\\\\\\}"), "\\1"); // \{NaCl\} to NaCl // TeX to Unicode bibToC2b(str); return str; } QString fromUtf8(const QByteArray& ba) { // Based on Qt's QString::fromUtf8 function. Input ba must be an UTF-8 // encoded array produced by QString::toUtf8. Encoding correctness is // assumed and checking omitted for efficiency. const char* b = ba.constData(); const char* const bn = b + ba.length(); QString output; output.resize(ba.length()); ushort* o = (ushort*)output.unicode(); uint c; while (b < bn) { c = uint(*b); if (c & 0x80) { if ((c & 0xe0) == 0xc0) { c &= 0x1f; c = (uint)((c << 6) | (*++b & 0x3f)); } else if ((c & 0xf0) == 0xe0) { c &= 0x0f; c = (uint)((c << 6) | (b[1] & 0x3f)); c = (uint)((c << 6) | (b[2] & 0x3f)); b += 2; } else if ((c & 0xf8) == 0xf0) { c &= 0x07; c = (uint)((c << 6) | (b[1] & 0x3f)); c = (uint)((c << 6) | (b[2] & 0x3f)); c = (uint)((c << 6) | (b[3] & 0x3f)); *o++ = QChar::highSurrogate(c); c = QChar::lowSurrogate(c); b += 3; } else c = QChar::ReplacementCharacter; } *o++ = ushort(c); ++b; } output.truncate(int(o - (ushort*)output.unicode())); // QString check = QString::fromUtf8(ba); // qDebug() << (check == output); return output; } #if defined(C2B_USE_LZSSE) namespace lzsse { static const int HEADER_LENGTH = 10; QByteArray compress(const QByteArray& decompressed) { const int sdecompressed(decompressed.size()); if (sdecompressed == 0) return QByteArray(); LZSSE4_OptimalParseState* state(LZSSE4_MakeOptimalParseState(static_cast(sdecompressed))); if (!state) { warn("compress: lzsse: internal error - compression failed"); return QByteArray(); } QByteArray compressed; const int sdst(sdecompressed); const int scompressed(HEADER_LENGTH + sdst); compressed.resize(scompressed); char* dst(compressed.data() + HEADER_LENGTH); const unsigned int clevel(17); const int sactual(LZSSE4_CompressOptimalParse(state, decompressed.constData(), sdecompressed, dst, sdst, clevel)); LZSSE4_FreeOptimalParseState(state); if (sactual == 0) { warn("compress: lzsse: internal error - compression failed"); return QByteArray(); } compressed.resize(sactual + HEADER_LENGTH); QByteArray header(QByteArray::number(qulonglong(sdecompressed))); for (int i = 0; i < std::min(int(header.length()), HEADER_LENGTH); ++i) compressed[i] = header[i]; for (int i = std::min(int(header.length()), HEADER_LENGTH); i < HEADER_LENGTH; ++i) compressed[i] = ' '; return compressed; } QByteArray decompress(const QByteArray& compressed) { const int scompressed(compressed.size()); if (scompressed <= HEADER_LENGTH) return QByteArray(); const int sdecompressed(compressed.left(HEADER_LENGTH).trimmed().toULong()); QByteArray decompressed; decompressed.resize(sdecompressed); const int ssrc(scompressed - HEADER_LENGTH); const char* src(compressed.constData() + HEADER_LENGTH); const int sactual(LZSSE4_Decompress(src, ssrc, decompressed.data(), sdecompressed)); if (sactual != sdecompressed) { warn("decompress: lzsse: internal error - decompression failed"); return QByteArray(); } return decompressed; } } // namespace lzsse QByteArray compressString(const QString& decompressed) { return lzsse::compress( QByteArray(reinterpret_cast(decompressed.unicode()), decompressed.size() * sizeof(ushort))); } QString decompressString(const QByteArray& compressed) { const int scompressed(compressed.size()); if (scompressed <= lzsse::HEADER_LENGTH) return QString(); const int sdecompressedchars(compressed.left(lzsse::HEADER_LENGTH).trimmed().toULong()); const int sdecompressed(sdecompressedchars / sizeof(ushort)); QString decompressed; decompressed.resize(sdecompressed); const int ssrc(scompressed - lzsse::HEADER_LENGTH); const char* src(compressed.constData() + lzsse::HEADER_LENGTH); const int sactual(LZSSE4_Decompress(src, ssrc, reinterpret_cast(decompressed.data()), sdecompressedchars)); if (sactual != sdecompressedchars) { warn("decompress: lzsse: internal error - decompression failed"); return QString(); } return decompressed; } #elif defined(C2B_USE_LZ4) namespace lz4 { static const int HEADER_LENGTH = 10; QByteArray compress(const QByteArray& decompressed) { const int sdecompressed(decompressed.size()); if (sdecompressed == 0) return QByteArray(); QByteArray compressed; const int sdst(LZ4_compressBound(sdecompressed)); const int scompressed(HEADER_LENGTH + sdst); compressed.resize(scompressed); char* dst(compressed.data() + HEADER_LENGTH); const int sactual(LZ4_compress_HC(decompressed.constData(), dst, sdecompressed, sdst, LZ4HC_CLEVEL_DEFAULT)); if (sactual <= 0) { warn("compress: lz4: internal error - compression failed"); return QByteArray(); } compressed.resize(sactual + HEADER_LENGTH); QByteArray header(QByteArray::number(qulonglong(sdecompressed))); for (int i = 0; i < std::min(int(header.length()), HEADER_LENGTH); ++i) compressed[i] = header[i]; for (int i = std::min(int(header.length()), HEADER_LENGTH); i < HEADER_LENGTH; ++i) compressed[i] = ' '; return compressed; } QByteArray decompress(const QByteArray& compressed) { const int scompressed(compressed.size()); if (scompressed <= HEADER_LENGTH) return QByteArray(); const int sdecompressed(compressed.left(HEADER_LENGTH).trimmed().toULong()); QByteArray decompressed; decompressed.resize(sdecompressed); const int ssrc(scompressed - HEADER_LENGTH); const char* src(compressed.constData() + HEADER_LENGTH); const int sactual(LZ4_decompress_safe(src, decompressed.data(), ssrc, sdecompressed)); if (sactual != sdecompressed) { warn("decompress: lz4: internal error - decompression failed"); return QByteArray(); } return decompressed; } } // namespace lz4 QByteArray compressString(const QString& decompressed) { return lz4::compress( QByteArray(reinterpret_cast(decompressed.unicode()), decompressed.size() * sizeof(ushort))); } QString decompressString(const QByteArray& compressed) { const int scompressed(compressed.size()); if (scompressed <= lz4::HEADER_LENGTH) return QString(); const int sdecompressedchars(compressed.left(lz4::HEADER_LENGTH).trimmed().toULong()); const int sdecompressed(sdecompressedchars / sizeof(ushort)); QString decompressed; decompressed.resize(sdecompressed); const int ssrc(scompressed - lz4::HEADER_LENGTH); const char* src(compressed.constData() + lz4::HEADER_LENGTH); const int sactual(LZ4_decompress_safe(src, reinterpret_cast(decompressed.data()), ssrc, sdecompressedchars)); if (sactual != sdecompressedchars) { warn("decompress: lz4: internal error - decompression failed"); return QString(); } return decompressed; } #elif defined(C2B_USE_LZO) namespace lzo { static const int HEADER_LENGTH = 10; QByteArray compress(const QByteArray& data) { const lzo_uint src_s(data.size()); if (src_s == 0) return QByteArray(); if (lzo_init() != LZO_E_OK) { warn("compress: lzo: internal error - initialization failed"); return QByteArray(); } const lzo_bytep src_p = reinterpret_cast(data.constData()); QByteArray compressed; const lzo_uint dest_s = HEADER_LENGTH + (src_s + src_s / 16 + 64 + 3); compressed.resize((int)dest_s); lzo_bytep compressed_p = reinterpret_cast(compressed.data()); lzo_bytep dest_p = compressed_p + HEADER_LENGTH; lzo_uint enc_dest_s = dest_s - HEADER_LENGTH; QByteArray wrkmem; wrkmem.resize(LZO1X_999_MEM_COMPRESS); lzo_bytep wrkmem_p = reinterpret_cast(wrkmem.data()); if (lzo1x_999_compress(src_p, src_s, dest_p, &enc_dest_s, wrkmem_p) == LZO_E_OK) { compressed.resize((int)enc_dest_s + HEADER_LENGTH); QByteArray header(QByteArray::number((qulonglong)src_s)); for (int i = 0; i < std::min(int(header.length()), HEADER_LENGTH); ++i) compressed[i] = header[i]; for (int i = std::min(int(header.length()), HEADER_LENGTH); i < HEADER_LENGTH; ++i) compressed[i] = ' '; return compressed; } else { warn("compress: lzo: internal error - compression failed"); return QByteArray(); } } QByteArray decompress(const QByteArray& data) { const lzo_uint data_s(data.size()); if (data_s <= (unsigned int)HEADER_LENGTH) return QByteArray(); if (lzo_init() != LZO_E_OK) { warn("decompress: lzo: internal error - initialization failed"); return QByteArray(); } const lzo_bytep data_p = reinterpret_cast(data.constData()); const lzo_bytep src_p = data_p + HEADER_LENGTH; const lzo_uint src_s = data_s - HEADER_LENGTH; QByteArray decompressed; const ulong expected_dest_s = data.left(HEADER_LENGTH).trimmed().toULong(); lzo_uint dest_s = std::max(lzo_uint(expected_dest_s), lzo_uint(1)); decompressed.resize((int)dest_s); lzo_bytep dest_p = reinterpret_cast(decompressed.data()); if (lzo1x_decompress(src_p, src_s, dest_p, &dest_s, NULL) == LZO_E_OK && (ulong)dest_s == expected_dest_s) return decompressed; else { warn("decompress: lzo: internal error - decompression failed"); return QByteArray(); } } } // namespace lzo QByteArray compressString(const QString& decompressed) { return lzo::compress(decompressed.toUtf8()); } QString decompressString(const QByteArray& compressed) { return fromUtf8(lzo::decompress(compressed)); } #else QByteArray compressString(const QString& decompressed) { return qCompress(decompressed.toUtf8()); } QString decompressString(const QByteArray& compressed) { return fromUtf8(qUncompress(compressed)); } #endif } // namespace c2bUtils cb2bib-2.0.3/src/c2b/PaxHeaders/bibReference.h0000644000000000000000000000012715104461633015705 xustar0030 mtime=1762812827.762761531 29 atime=1762812827.99875967 28 ctime=1762812827.7667615 cb2bib-2.0.3/src/c2b/bibReference.h0000644000175000001440000000410515104461633017672 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBREFERENCE_H #define BIBREFERENCE_H #include "cb2bib_utilities.h" #include typedef QHash::const_iterator bibReferenceIterator; /** Basic class for a bibliographic reference @author Pere Constans */ class bibReference : public QHash { public: inline bibReference() : positionValue(0), pos(0) {} void clearFields() { pos = 0; } void clearReference() { positionValue = 0; citeidName.clear(); typeName.clear(); rawReference.clear(); unicodeReference.clear(); QHash::clear(); } /** Fallback for authors */ inline const QString anyAuthor() const { const QString v(value("author")); if (v.isEmpty()) return value("editor"); return v; } /** Fallback for titles */ inline const QString anyTitle() const { const QString v(value("title")); if (v.isEmpty()) { const QString v1(value("booktitle")); if (v1.isEmpty()) return QFileInfo(value("file")).fileName(); return v1; } return v; } /** Fallback for journal */ inline const QString anyJournal() const { QString v(value("journal")); if (v.isEmpty()) if (typeName == "inproceedings") { v = value("booktitle"); c2bUtils::cleanTitle(v, true); } return v; } QString citeidName; QString rawReference; QString typeName; QString unicodeReference; int positionValue; private: int pos; friend class coreBibParser; }; #endif cb2bib-2.0.3/src/c2b/PaxHeaders/wordMatcher.h0000644000000000000000000000013215104461633015605 xustar0030 mtime=1762812827.854760806 30 atime=1762812828.042759324 30 ctime=1762812827.854760806 cb2bib-2.0.3/src/c2b/wordMatcher.h0000644000175000001440000000470315104461633017602 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef WORDMATCHER_H #define WORDMATCHER_H #include "txtmatcher.h" #include #include class wordMatcher { public: wordMatcher(); explicit wordMatcher(const QString& pattern, const Qt::CaseSensitivity cs = Qt::CaseSensitive); inline ~wordMatcher() {} int indexIn(const QString& text, const int from = 0) const; void setPattern(const QString& pattern, const Qt::CaseSensitivity cs); inline int matchedLength() const { return _matched_length; } inline const QStringList& subpatternStrings() const { return _subpatterns; } private: inline int _index_in(const int s, const QString& text, const int p0) const { return _substrings.at(s).indexIn(text, p0); } inline int _index_in(const int s, const QString& text, const int p0, const int pn) const { return _substrings.at(s).indexIn(text.unicode(), std::min(_pn, pn), p0); } inline int _index_around(const QString& text, const int phook) const { for (int i = 0; i < _substring_count; ++i) _sp0[i] = -1; _sp0[_hook] = phook; const int bp0 = std::max(_p0, phook - _stretch); const int bpn = std::min(_pn, phook + _stretch); for (int i = 0; i < _substring_count; ++i) if (_sp0.at(i) == -1) { const int p0(_index_in(i, text, bp0, bpn)); if (p0 == -1) return -1; _sp0[i] = p0; } int bp(_pn); int fp(_p0); for (int i = 0; i < _substring_count; ++i) { const int p0(_sp0.at(i)); if (bp > p0) bp = p0; const int pn(p0 + _lengths.at(i)); if (fp < pn) fp = pn; } _matched_length = fp - bp; return bp; } QStringList _subpatterns; QVector _lengths; QVector _substrings; int _hook; int _stretch; int _substring_count; mutable QVector _sp0; mutable int _matched_length; mutable int _p0; mutable int _pn; }; #endif cb2bib-2.0.3/src/c2b/PaxHeaders/wordPattern.cpp0000644000000000000000000000013215104461633016172 xustar0030 mtime=1762812827.746761657 30 atime=1762812828.042759324 30 ctime=1762812827.746761657 cb2bib-2.0.3/src/c2b/wordPattern.cpp0000644000175000001440000000412015104461633020160 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "wordPattern.h" #include "cb2bib_utilities.h" #include "triads.h" wordPattern::wordPattern() : compositePattern(), _type(AllWords) {} wordPattern::wordPattern(const QString& pattern, const Type type, const Qt::CaseSensitivity cs) : compositePattern(pattern, cs), _type(type) { setPattern(pattern, type, cs); } void wordPattern::setPattern(const QString& pattern, const Type type, const Qt::CaseSensitivity cs) { _string = pattern; _type = type; _case_sensitivity = cs; _is_multipattern = false; _matched_length = -1; const QStringList words(c2bUtils::split(_string, c2bUtils::nonLetter, _QT_6_SkipEmptyParts)); _subpattern_count = words.count(); if (_subpattern_count == 0) return; _ranks.clear(); QStringList subpattern; QStringList substring; for (int i = 0; i < words.count(); ++i) { const QString& wi = words.at(i); const QString sp(escape(wi, _case_sensitivity)); subpattern.append(sp); substring.append(wi); _ranks.append(triads::textFrequency(wi)); // Rank according expectation (arXiv:0705.0751, Eq. 6) } set_sort_index(); if (_subpattern_count == 1) _regexp.setPattern(escape(_string, _case_sensitivity)); else _regexp.setPattern(QString("(?:%1)").arg(subpattern.join("|"))); _submatchers.resize(_subpattern_count); _subregexps.resize(_subpattern_count); _substrings.clear(); for (int i = 0; i < _subpattern_count; ++i) { const int ii(_index.at(i)); _submatchers[i] = txtmatcher(substring.at(ii), _case_sensitivity); _subregexps[i].setPattern(subpattern.at(ii)); _substrings.append(substring.at(ii)); } _is_multipattern = _subpattern_count > 1; } cb2bib-2.0.3/src/c2b/PaxHeaders/network.cpp0000644000000000000000000000013215104461633015352 xustar0030 mtime=1762812827.706761973 30 atime=1762812828.038759355 30 ctime=1762812827.710761941 cb2bib-2.0.3/src/c2b/network.cpp0000644000175000001440000003172215104461633017350 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "network.h" #include "cb2bib_utilities.h" #include "settings.h" #include #include #include #include #include network::network(QObject* parento) : QObject(parento), _max_redirections(15) { _is_fetching = false; _fetcher = new QNetworkAccessManager(this); connect(_fetcher, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), this, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); loadSettings(); connect(settings::instance(), SIGNAL(newSettings()), this, SLOT(loadSettings())); // Set predefined cookies QNetworkCookieJar* ncj = _fetcher->cookieJar(); QNetworkCookie nc("GSP", "ID=d093ce1ea042ad2b:IN=54afcd58e3b38df9:HIN=ff7e3a3ab3fbae0a+7e6cc990821af63:CF=4"); ncj->setCookiesFromUrl(QList() << nc, QUrl("https://scholar.google.com")); } /**************************************************************************** PUBLIC PART *****************************************************************************/ void network::getFile(const QString& source, const QString& destination, const Action action, QObject* receiver, const char* callback, const bool overwrite) { if (_is_fetching) { c2bUtils::warn(tr("network::getFile: Requesting network while still fetching previous request. Returned")); return; } setup(source, destination); disconnect(this, SIGNAL(requestFinished(bool)), 0, 0); if (receiver) connect(this, SIGNAL(requestFinished(bool)), receiver, callback); if (overwrite) if (QFileInfo::exists(destination)) QFile::remove(destination); getFilePrivate(action); } void network::headFile(const QString& source, QObject* receiver, const char* callback) { if (_is_fetching) { c2bUtils::warn(tr("network::headFile: Requesting network while still fetching previous request. Returned")); return; } setup(source); disconnect(this, SIGNAL(requestFinished(bool)), 0, 0); if (receiver) connect(this, SIGNAL(requestFinished(bool)), receiver, callback); headFilePrivate(); } void network::cancelDownload() { if (_is_fetching) _current_reply->abort(); } /**************************************************************************** PRIVATE PART *****************************************************************************/ void network::getFilePrivate(const Action action) { if (!checkDestination()) { _emit_request_finished(false); return; } if (_source_filename.startsWith("<>")) // cb2Bib keyword to use post http method { c2bUtils::remove(_source_filename, QRegExp("^<>")); _fetch_c2b(action, QNetworkAccessManager::PostOperation); return; } if (FmClient) if ((action == Copy && !FmClientCopyBin.isEmpty()) || (action == Move && !FmClientMoveBin.isEmpty())) { _fetch_client(action); return; } _fetch_c2b(action); } void network::headFilePrivate() { const QUrl u(_source_filename, QUrl::TolerantMode); if (u.scheme() == "file" || QFileInfo::exists(_source_filename)) { // Local File const QString fn(u.scheme() == "file" ? u.toLocalFile() : _source_filename); const bool succeeded(QFileInfo::exists(fn)); if (!succeeded) _request_error_string = tr("File does not exist."); _emit_request_finished(succeeded); } else { // Network File _head(u); } } void network::_emit_request_finished(bool succeeded) { _request_succeeded = succeeded; // Give some time to cleanup events and to return all network functions // before passing the control to the callback routine QTimer::singleShot(50, this, SLOT(_emit_request_finished())); } void network::_emit_request_finished() { _is_fetching = false; // Assumed events are clean, all functions returned, then make the callback emit requestFinished(_request_succeeded); } bool network::checkDestination() { // Checks whether or not writing to destination is safe // Returns false if file exists if (QFileInfo::exists(_destination_filename)) { _request_error_string = tr("Destination file '%1' already exists.").arg(_destination_filename); return false; } else return true; } void network::loadSettings() { settings* s(settings::instance()); FmClient = s->value("cb2Bib/FmClient").toBool(); FmClientCopyBin = s->fileName("cb2Bib/FmClientCopyBin"); FmClientMoveBin = s->fileName("cb2Bib/FmClientMoveBin"); FmClientCopyArg = s->value("cb2Bib/FmClientCopyArg").toString(); FmClientMoveArg = s->value("cb2Bib/FmClientMoveArg").toString(); QNetworkProxy proxy; if (s->value("cb2Bib/UseProxy").toBool()) { const QString hn(s->value("cb2Bib/ProxyHostName", QString()).toString()); if (!hn.isEmpty()) { if (s->value("cb2Bib/ProxyType").toInt() == 0) proxy = QNetworkProxy::HttpProxy; else proxy = QNetworkProxy::Socks5Proxy; proxy.setHostName(hn); proxy.setPort(quint16(s->value("cb2Bib/ProxyPort").toInt())); } } _fetcher->setProxy(proxy); } /**************************************************************************** PRIVATE PART: FILEMANAGER CLIENT *****************************************************************************/ void network::_fetch_client(const Action action) { // Getting NetworkFile through kfmclient Action act(action); // Only move local files QUrl u(_source_filename); if (!(u.scheme() == "file" || QFileInfo::exists(_source_filename))) if (action == Move) act = Copy; // Copy network files QStringList arglist; QString fmclient_bin; if (act == Copy) { fmclient_bin = FmClientCopyBin; arglist = FmClientCopyArg.split(' ', _QT_6_SkipEmptyParts); } else if (act == Move) { fmclient_bin = FmClientMoveBin; arglist = FmClientMoveArg.split(' ', _QT_6_SkipEmptyParts); } arglist.append(_source_filename); arglist.append(_destination_filename); _fetcher_client = new QProcess(this); connect(_fetcher_client, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(_client_finished(int,QProcess::ExitStatus))); _fetcher_client->start(fmclient_bin, arglist); if (!_fetcher_client->waitForStarted()) { delete _fetcher_client; _request_error_string = tr("FM Client '%1' could not be launched.").arg(fmclient_bin); _emit_request_finished(false); } } void network::_client_finished(int exitCode, QProcess::ExitStatus exitStatus) { bool succeeded(false); if (exitStatus == QProcess::CrashExit) _request_error_string = tr("FM Client crashed."); else { if (QFileInfo::exists(_destination_filename)) succeeded = true; else _request_error_string = tr("File '%1' has not been written. Exit code '%2'.").arg(_source_filename).arg(exitCode); } delete _fetcher_client; _emit_request_finished(succeeded); } /**************************************************************************** PRIVATE PART: C2B FETCHER *****************************************************************************/ void network::_head(const QUrl& url) { QNetworkRequest request; request.setUrl(url); request.setRawHeader( "User-Agent", QString("cb2Bib/" + C2B_VERSION + " (https://www.molspaces.com/cb2bib/; mailto:cb2bib@molspaces.com; Bibliographic Browser Tool)") .toLatin1()); _current_reply = _fetcher->head(request); connect(_current_reply, SIGNAL(finished()), SLOT(_head_finished())); } void network::_head_finished() { if (_redirection_count++ < _max_redirections) { const QUrl redirection(_current_reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl()); if (redirection.isValid()) { const QUrl ru(_current_reply->url().resolved(redirection)); _source_filename = ru.toString(); _current_reply->deleteLater(); _head(ru); return; } } const bool succeeded(_current_reply->error() == QNetworkReply::NoError); if (succeeded) _file_mimetype_string = _current_reply->header(QNetworkRequest::ContentTypeHeader).toString(); else _request_error_string = _current_reply->errorString() + '.'; _current_reply->deleteLater(); _emit_request_finished(succeeded); } void network::_fetch_c2b(const Action action, const QNetworkAccessManager::Operation operation) { _fetch_operation = operation; _fetch_url_query.clear(); QString url_str; if (_fetch_operation == QNetworkAccessManager::PostOperation) { const int qmark(_source_filename.indexOf('?')); url_str = _source_filename.mid(0, qmark); if (qmark > -1) { url_str += '/'; _fetch_url_query = _source_filename.mid(qmark + 1).toUtf8(); } } else url_str = _source_filename; QUrl u(url_str, QUrl::TolerantMode); if (u.scheme() == "file" || QFileInfo::exists(_source_filename)) { // Local File QFile source(u.scheme() == "file" ? u.toLocalFile() : _source_filename); bool succeeded(false); if (action == Copy) succeeded = source.copy(_destination_filename); else if (action == Move) succeeded = source.rename(_destination_filename); if (!succeeded) _request_error_string = source.errorString(); _emit_request_finished(succeeded); } else { // Network File _fetch(u); } } void network::_fetch(const QUrl& url) { _destination_file.setFileName(_destination_filename); if (!_destination_file.open(QIODevice::WriteOnly)) { _request_error_string = tr("File '%1' cannot be written. %2").arg(_destination_filename, _destination_file.errorString()); _emit_request_finished(false); return; } QNetworkRequest request; request.setUrl(url); request.setRawHeader( "User-Agent", QString("cb2Bib/" + C2B_VERSION + " (https://www.molspaces.com/cb2bib/; mailto:cb2bib@molspaces.com; Bibliographic Browser Tool)") .toLatin1()); if (_fetch_operation == QNetworkAccessManager::PostOperation) { request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); _current_reply = _fetcher->post(request, _fetch_url_query); } else _current_reply = _fetcher->get(request); connect(_current_reply, SIGNAL(readyRead()), this, SLOT(_fetch_ready_read())); connect(_current_reply, SIGNAL(finished()), SLOT(_fetch_finished())); #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(_current_reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), this, SLOT(logError())); #else connect(_current_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(logError())); #endif connect(_current_reply, SIGNAL(downloadProgress(qint64,qint64)), this, SIGNAL(downloadProgress(qint64,qint64))); } void network::_fetch_finished() { _destination_file.close(); if (_current_reply->error() == QNetworkReply::OperationCanceledError) _destination_file.remove(); // Delete file else if (_redirection_count++ < _max_redirections) { const QUrl redirection(_current_reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl()); if (redirection.isValid()) { const QUrl ru(_current_reply->url().resolved(redirection)); _source_filename = ru.toString(); const int status(_current_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()); if ((status >= 301 && status <= 303) || status == 307) _fetch_operation = QNetworkAccessManager::GetOperation; _current_reply->deleteLater(); _fetch(ru); return; } } const bool succeeded(_current_reply->error() == QNetworkReply::NoError); if (succeeded) _file_mimetype_string = _current_reply->header(QNetworkRequest::ContentTypeHeader).toString(); else _request_error_string = _current_reply->errorString() + '.'; _current_reply->deleteLater(); _emit_request_finished(succeeded); } void network::_fetch_ready_read() { _destination_file.write(_current_reply->readAll()); } void network::logError() { c2bUtils::warn(tr("network::QNetworkReply log: %1").arg(_current_reply->errorString())); } cb2bib-2.0.3/src/c2b/PaxHeaders/idMaker.h0000644000000000000000000000013115104461633014701 xustar0030 mtime=1762812827.802761216 29 atime=1762812827.99875967 30 ctime=1762812827.802761216 cb2bib-2.0.3/src/c2b/idMaker.h0000644000175000001440000000314415104461633016675 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Improvements and modifications: * July 2009 - Added <>, (C) 2009 by Dayu Huang ***************************************************************************/ #ifndef IDMAKER_H #define IDMAKER_H #include "bibReference.h" #include /** @author Pere Constans */ class idMaker : public QObject { Q_OBJECT public: explicit idMaker(const QString& patternKey, QObject* parento = 0); inline ~idMaker() {} QString makeID(const bibReference& reference); private: QString _author; QString _id_pattern; QString _journal; QString _pages; QString _title; QString _title_pattern; QString _volume; QString _year; bool _is_title_underscored; const QString _pattern_key; int _title_max_length; void make_author_all_abbreviated(QString* id); void make_author_all_initials(QString* id); void make_author_first(QString* id); void make_author_first_lowercase(QString* id); void make_journal_initials(QString* id); void make_pages_first(QString* id); void make_ppages_first(QString* id); void make_title(QString* id); void make_title_first_word(QString* id); void make_volume(QString* id); void make_year_abbreviated(QString* id); void make_year_full(QString* id); private slots: void loadSettings(); }; #endif cb2bib-2.0.3/src/c2b/PaxHeaders/document.h0000644000000000000000000000013115104461633015143 xustar0030 mtime=1762812827.790761311 29 atime=1762812827.99875967 30 ctime=1762812827.790761311 cb2bib-2.0.3/src/c2b/document.h0000644000175000001440000000242315104461633017136 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef DOCUMENT_H #define DOCUMENT_H #include /** This class converts documents to unicode strings */ class document { public: enum Conversion { FirstPage, Complete }; document(const QString& fn, const Conversion mode); inline ~document() {} QString fileToString(const QString& fn); QString toString(); void setConverter(const Conversion mode); inline QString errorString() const { return _error_string.trimmed(); } inline QString logString() const { return _log_string.trimmed(); } static QString& normalize(QString& doc, const Conversion mode); private: Conversion _conversion_mode; QString _converter_arg; QString _converter_bin; QString _converter_output; QString _document_fn; QString _error_string; QString _log_string; void setConverter(const QString& bin, const QString& args); }; #endif cb2bib-2.0.3/src/c2b/PaxHeaders/arxivXml.cpp0000644000000000000000000000013115104461633015472 xustar0030 mtime=1762812827.646762446 29 atime=1762812827.99875967 30 ctime=1762812827.650762414 cb2bib-2.0.3/src/c2b/arxivXml.cpp0000644000175000001440000000465515104461633017476 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "arxivXml.h" arxivXml::arxivXml(const QString& xml) : QXmlStreamReader() { _reference.clearReference(); addData(xml); readReference(); } void arxivXml::readReference() { if (hasError()) return; QStringList authors; while (reading("entry")) if (name().toLatin1() == "author") appendAuthor(&authors); else if (name().toLatin1() == "journal_ref") readField("note"); else if (name().toLatin1() == "title") readField("title"); else if (name().toLatin1() == "summary") readField("abstract"); else if (name().toLatin1() == "doi") readField("doi"); else if (name().toLatin1() == "id") processId(); else if (name().toLatin1() == "published") processDate(); _reference["author"] = authors.join(", "); } void arxivXml::readField(const QString& field) { readNext(); _reference[field] = text().toString(); } void arxivXml::processId() { readNext(); QRegExp rxarxiv("abs/(.+)$"); const int r(rxarxiv.indexIn(text().toString())); if (r >= 0) { QString aid(rxarxiv.cap(1)); c2bUtils::remove(aid, QRegExp("v\\d{1,2}$")); _reference["eprint"] = aid; _reference["journal"] = "arXiv:" + aid; _reference["url"] = c2bUtils::arxivUrl.arg(aid); } } void arxivXml::processDate() { readNext(); _reference["year"] = text().toString().left(4); } void arxivXml::appendAuthor(QStringList* authors) { while (reading("name")) if (name().toLatin1() == "name") { readNext(); authors->append(text().toString()); } } bool arxivXml::reading(const QString& tag) { if (tokenType() == NoToken) while (!atEnd()) if (readNext() == StartElement && name() == tag) return true; while (!atEnd()) { TokenType t = readNext(); if (t == StartElement) return true; else if (t == EndElement && name() == tag) return false; } return false; } cb2bib-2.0.3/src/c2b/PaxHeaders/pubmedXml.h0000644000000000000000000000013215104461633015263 xustar0030 mtime=1762812827.822761058 30 atime=1762812828.038759355 30 ctime=1762812827.826761026 cb2bib-2.0.3/src/c2b/pubmedXml.h0000644000175000001440000000160015104461633017251 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef PUBMEDXML_H #define PUBMEDXML_H #include "bibReference.h" #include class pubmedXml : public QXmlStreamReader { public: explicit pubmedXml(const QString& xml); inline ~pubmedXml() {} inline const bibReference& reference() const { return _reference; } private: bibReference _reference; bool reading(const QString& tag); void readAuthors(); void readField(const QString& field); void readJournal(); void readKeywords(); void readReference(); }; #endif cb2bib-2.0.3/src/c2b/PaxHeaders/multipatternLengths.h0000644000000000000000000000013215104461633017403 xustar0030 mtime=1762812827.810761153 30 atime=1762812828.038759355 30 ctime=1762812827.810761153 cb2bib-2.0.3/src/c2b/multipatternLengths.h0000644000175000001440000001171115104461633021375 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef MULTIPATTERNLENGTHS_H #define MULTIPATTERNLENGTHS_H #include #include #include struct subpatternLength { // Patterns of the form AND, OR, LENGTH (example: 'alpha_aaa|tau') subpatternLength(const int va, const int vo, const int vl) : a(va), o(vo), l(vl) {} int a, o, l; // and, or, length }; /** Auxiliary Multipattern Lengths struct for type patterns Context and FixedStringContext */ struct multipatternLengths { explicit multipatternLengths(QVector* plengths) : patternlengths(*plengths), blankspaces(0) { patternlengths.resize(0); patternlengths.append(0); } void init(const int nands) { subpatternlengths.clear(); for (int a = 0; a < nands; ++a) subpatternlengths.append(subpatternLength(a, 0, 0)); blankspaces = nands - 1; } void branch(const int nors) { const int nspl(subpatternlengths.count()); for (int i = 0; i < nspl; ++i) subpatternlengths[i].o = 0; for (int o = 1; o < nors; ++o) for (int i = 0; i < nspl; ++i) subpatternlengths.append(subpatternLength(subpatternlengths.at(i).a, o, subpatternlengths.at(i).l)); } void add(const int a, const int o, const int spl, const int stl, const bool subbranch = false) { const int nspl(subpatternlengths.count()); for (int i = 0; i < nspl; ++i) if (subpatternlengths.at(i).o == o) { const int ss(subpatternlengths.at(i).l == 0 ? 0 : 1); if (subbranch) { subpatternlengths.append( subpatternLength(subpatternlengths.at(i).a, o, subpatternlengths.at(i).l + spl + ss)); subpatternlengths[i].l += stl + ss; } else { const int l(subpatternlengths.at(i).a == a ? stl : spl); subpatternlengths[i].l += l + ss; } } } void cleanup() { patternlengths.resize(0); const int nspl(subpatternlengths.count()); for (int i = 0; i < nspl; ++i) if (!patternlengths.contains(subpatternlengths.at(i).l)) patternlengths.append(subpatternlengths.at(i).l); std::sort(patternlengths.begin(), patternlengths.end()); patternlengths = scorerLengths(patternlengths, blankspaces, false); } /** Multiword context type patterns 'w1 w2 ...' match also united words 'w1w2 ...' On occasions, words in text appear either separated or united with often the same meaning. For example, the pair 'non parametric' and 'nonparametric'. In general when using matched lengths comparisons for scoring, results are better when constraining blanks. CONTEXT: ' ' 300|3300|0.900 documents: 100000 sum r-prec map no spaces, no score opt 76449 0.341 0.385 no spaces, score opt 76517 0.342 0.385 spaces, no score opt 75727 0.336 0.379 spaces, score opt 75850 0.338 0.380 To accommodate cases such the one above mentioned, blank flexibilization is kept to nblanks - 1. For example, 'non parametric' length: 14 'non parametric regression' lengths: 24 and 25 Note that 'nonparametric' will not match texts having 'non parametric'. To force considering these cases a dot must be specified in the pattern. For example, 'non.parametric' lengths: 13 and 14 'non.parametric regression' lengths: 24 and 25 */ static QVector scorerLengths(const QVector& plengths, const int nblanks, const bool hasdot) { const int nb(hasdot ? nblanks + 1 : nblanks); if (nb < 1) return plengths; const int npl(plengths.count()); QVector sls(plengths); for (int b = 1; b <= nb; ++b) for (int i = 0; i < npl; ++i) { const int l(plengths.at(i) - b); if (!sls.contains(l)) sls.append(l); } std::sort(sls.begin(), sls.end()); return sls; } static QVector scorerLengths(const int plength, const int nblanks, const bool hasdot) { QVector plengths(1, plength); return scorerLengths(plengths, nblanks, hasdot); } QList subpatternlengths; QVector& patternlengths; int blankspaces; }; #endif cb2bib-2.0.3/src/c2b/PaxHeaders/pubmedXml.cpp0000644000000000000000000000013215104461633015616 xustar0030 mtime=1762812827.718761878 30 atime=1762812828.038759355 30 ctime=1762812827.718761878 cb2bib-2.0.3/src/c2b/pubmedXml.cpp0000644000175000001440000001143115104461633017607 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "pubmedXml.h" #include "cb2bib_utilities.h" pubmedXml::pubmedXml(const QString& xml) : QXmlStreamReader() { _reference.clearReference(); addData(xml); readReference(); } void pubmedXml::readReference() { if (hasError()) return; while (reading("PubmedArticle")) if (name().toLatin1() == "Journal") readJournal(); else if (name().toLatin1() == "AuthorList") readAuthors(); else if (name().toLatin1() == "MeshHeadingList") readKeywords(); else if (name().toLatin1() == "ArticleTitle") readField("title"); else if (name().toLatin1() == "AbstractText") readField("abstract"); else if (name().toLatin1() == "MedlinePgn") { readNext(); _reference["pages"] = c2bUtils::removed(text().toString(), QRegExp("\\,[\\s\\d]+")); // Cases "11-5, 25" } else if (name().toLatin1() == "PMID") { readNext(); _reference["url"] = c2bUtils::pubmedUrl.arg(text().toString()); } else if (name().toLatin1() == "ArticleId") { if (attributes().count() > 0) if (attributes().at(0).value().toLatin1() == "doi") readField("doi"); } } void pubmedXml::readField(const QString& field) { _reference[field] = readElementText(QXmlStreamReader::IncludeChildElements); } void pubmedXml::readAuthors() { QStringList authors; while (reading("AuthorList")) { if (name().toLatin1() == "Author" && attributes().value("ValidYN").toLatin1() != "N") { QString a, i; bool abbreviated(true); while (reading("Author")) if (name().toLatin1() == "LastName") { readNext(); a = a + ' ' + text().toString(); } else if (name().toLatin1() == "ForeName" || name().toLatin1() == "FirstName") { readNext(); a = text().toString() + ' ' + a; abbreviated = false; } else if (name().toLatin1() == "Suffix") { readNext(); if (text().toLatin1() == "2nd") a = a + " II"; else if (text().toLatin1() == "3rd") a = a + " III"; else a = a + ' ' + text().toString(); } else if (name().toLatin1() == "Initials") { readNext(); i = text().toString(); } if (abbreviated) authors.append(i + ' ' + a); else authors.append(a); } } _reference["author"] = authors.join(", "); } void pubmedXml::readJournal() { QString ja, jf, mldate; while (reading("Journal")) if (name().toLatin1() == "ISOAbbreviation") { readNext(); ja = text().toString(); } else if (name().toLatin1() == "Title") { readNext(); jf = text().toString(); } else if (name().toLatin1() == "Volume") readField("volume"); else if (name().toLatin1() == "Issue") readField("number"); else if (name().toLatin1() == "Year") readField("year"); else if (name().toLatin1() == "MedlineDate") { readNext(); mldate = text().toString(); } if (jf.isEmpty()) _reference["journal"] = ja; else _reference["journal"] = jf; if (_reference.value("year").isEmpty()) { c2bUtils::remove(mldate, QRegExp("[^\\d\\s-]")); c2bUtils::remove(mldate, QRegExp("\\b\\d{1,3}\\b")); _reference["year"] = mldate; } } void pubmedXml::readKeywords() { QStringList k; while (reading("MeshHeadingList")) if (name().toLatin1() == "DescriptorName") { readNext(); k.append(text().toString()); } _reference["keywords"] = k.join(", "); } bool pubmedXml::reading(const QString& tag) { while (!atEnd()) { TokenType t = readNext(); if (t == StartElement) return true; else if (t == EndElement) if (name() == tag) return false; } return false; } cb2bib-2.0.3/src/c2b/PaxHeaders/metadataParser.cpp0000644000000000000000000000013215104461633016616 xustar0030 mtime=1762812827.702762004 30 atime=1762812828.038759355 30 ctime=1762812827.702762004 cb2bib-2.0.3/src/c2b/metadataParser.cpp0000644000175000001440000004636215104461633020622 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "metadataParser.h" #include "coreBibParser.h" #include "settings.h" #include #include #include /** \page metadata Reading and Writing Bibliographic Metadata GET_TABLE_OF_CONTENTS \section metadata_read Reading Metadata Metadata in scientific documents had been rarely appreciated and used for decades. For bibliographic metadata, no format specification had been widely accepted. cb2Bib adapted back in 2008 the PDF predefined metadata capabilities to set BibTeX bibliographic keys in document files. cb2Bib reads all XMP (a specific XML standard devised for metadata storage) packets found in the document. It then parses the XML strings looking for nodes and attributes with key names meaningful to bibliographic references. If a given bibliographic field is found in multiple packets, cb2Bib will take the last one, which most often, and according to the PDF specs, is the most updated one. The fields file, which would be the document itself, and pages, which is usually the actual number of pages, are skipped. The metadata is then summarized in cb2Bib clipboard panel as, for instance \verbatim [Bibliographic Metadata arXiv:0705.0751v1 [cs.IR] 5 May 2007 /Bibliographic Metadata] \endverbatim This data, whenever the user considers it to be correct, can be easily imported by the build-in 'Heuristic Guess' capability. On the other hand, if keys are found with the prefix bibtex, cb2Bib will assume the document does contain bibliographic metadata, and it will only consider the keys having this prefix. Assuming therefore that metadata is bibliographic, cb2Bib will automatically import the reference. This way, if using PDFImport, BibTeX-aware documents will be processed as successfully recognized, without requiring any user supplied regular expression. See also \ref relnotes100, \ref c2bconf_clipboard, and \ref pdfimport.

 

\section metadata_write Writing Metadata Once an extracted reference is saved and there is a document attached to it, cb2Bib will optionally insert the bibliographic metadata into the document itself. cb2Bib writes an XMP packet as, for instance \verbatim P. Constans arXiv 0705.0751 Approximate textual retrieval article 2007 \endverbatim The BibTeX fields file and id are skip from writing. The former for the reason mentioned above, and the latter because it is easily generated by specialized BibTeX software according to each user preferences. LaTeX escaped characters for non ASCII letters are converted to UTF-8, as XMP already specifies this codec. The actual writing of the packet into the document is performed by ExifTool, an excellent Perl program written by Phil Harvey. See \htmlonly https://exiftool.org. \endhtmlonly ExifTool supports several document formats for writing. The most relevant here are Postscript and PDF. For PDF documents, metadata is written as an incremental update of the document. This exactly preserves the binary structure of the document, and changes can be easily reversed or modified if so desired. Whenever ExifTool is unable to insert metadata, e.g., because the document format is not supported or it has structural errors, cb2Bib will issue an information message, and the document will remain untouched. See also \ref c2bconf_documents and \ref update_metadata. */ metadataParser::metadataParser(QObject* parento) : QObject(parento) { _cbpP = new coreBibParser(this); init(); } metadataParser::metadataParser(coreBibParser* cbp, QObject* parento) : QObject(parento), _cbpP(cbp) { Q_ASSERT_X(_cbpP, "metadataParser", "coreBibParser was not instantiated"); init(); } void metadataParser::init() { _settingsP = settings::instance(); // Set bibliographic fields // Remove fields file (it is itself) and pages (usually number of pages) from list _fields = QRegExp("\\b(?:abstract|address|annote|author|authors|booktitle|chapter|" "doi|edition|editor|eprint|institution|isbn|issn|journal|" "keyword|keywords|key words|month|note|number|organization|" "pagerange|publicationname|publisher|school|series|title|url|volume|year)\\b"); _fields.setCaseSensitivity(Qt::CaseInsensitive); // Recognition from BibTeX entries _bibtex_fields = QRegExp("\\bbibtex:(?:abstract|address|annote|author|booktitle|chapter|" "doi|edition|editor|eprint|institution|isbn|issn|journal|" "keywords|month|note|number|organization|pages|publisher|" "school|series|title|url|volume|year)\\b"); _bibtex_fields.setCaseSensitivity(Qt::CaseInsensitive); // Set field keys equivalences const QStringList& bibliographicFields = _cbpP->bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) _bibtex_key.insert(bibliographicFields.at(i), bibliographicFields.at(i)); _bibtex_key.insert("authors", "author"); _bibtex_key.insert("key words", "keywords"); _bibtex_key.insert("keyword", "keywords"); _bibtex_key.insert("pagerange", "pages"); _bibtex_key.insert("publicationname", "journal"); } const QString metadataParser::metadata(const QString& fn) { if (!_metadata(fn)) return QString(); QString data; if (_has_bibtex) data = _cbpP->referenceToBibTeX(_ref); else { const QStringList& bibliographicFields(_cbpP->bibliographicFields()); if (_ref.contains("type")) data += QString("%1\n").arg(_ref.value("type")); for (int i = 0; i < bibliographicFields.count(); ++i) { const QString key(bibliographicFields.at(i)); if (_ref.contains(key)) data += QString("<%1>%2\n").arg(key, _ref.value(key)); } } data = QString("[Bibliographic Metadata\n%1/Bibliographic Metadata]\n").arg(data); return data; } bool metadataParser::metadata(const QString& fn, bibReference* ref) { ref->clearReference(); bool has_reference(_metadata(fn)); has_reference = has_reference && _has_bibtex && _has_cb2bib; if (has_reference) (*ref) = _ref; return has_reference; } bool metadataParser::_metadata(const QString& fn) { QByteArray raw_contents; QFile f(fn); if (f.open(QIODevice::ReadOnly)) { raw_contents = f.readAll(); f.close(); } else return false; _ref.clearReference(); _ref.typeName = "article"; _has_bibtex = false; _has_cb2bib = false; _has_prism = false; QStringList xmls; _metadataXmp(fn, raw_contents, &xmls); // Last in list should be the most updated, parse it last for (int i = 0; i < xmls.count(); ++i) _fuzzyParser(xmls.at(i)); QMutableHashIterator it(_ref); while (it.hasNext()) { it.next(); it.value() = c2bUtils::fromQtXmlString(it.value()); } if (!_has_cb2bib) _miscellaneousData(fn, raw_contents); if (_ref.count() == 0) return false; if (_has_bibtex) if (_ref.contains("type")) _ref.typeName = _ref.value("type"); return true; } void metadataParser::_metadataXmp(const QString& fn, const QByteArray& raw_contents, QStringList* xmls) { xmls->clear(); int pos(0); while (pos > -1) { // Scan all packets, and do not trust "='' " etc, as producers encode differently pos = raw_contents.indexOf(" -1) { int posn(raw_contents.indexOf(" pos) { xmls->append(c2bUtils::toQtXmlString(QString::fromUtf8(raw_contents.mid(pos, posn - pos + 19)))); _has_bibtex = _has_bibtex || xmls->last().contains("bibtex:"); _has_cb2bib = _has_cb2bib || xmls->last().contains("www.molspaces.com/cb2bib"); _has_prism = _has_prism || xmls->last().contains("prismstandard.org/namespaces/basic/2.0"); pos = posn; } else pos = -1; } } if (xmls->count() == 0) _metadataXmpExifTool(fn, xmls); } void metadataParser::_miscellaneousData(const QString& fn, const QByteArray& raw_contents) { // Get title, author, and keywords from here whenever no cb2Bib BibTeX data is available QString data; QRegExp pdf_author_rx; QRegExp pdf_title_rx; QRegExp pdf_keywords_rx; const QString exiftool_bin(_settingsP->fileName("cb2Bib/ExifToolBin")); bool is_exiftool_available = !exiftool_bin.isEmpty(); if (is_exiftool_available) { QProcess exiftool; QStringList arglist; arglist.append(fn); exiftool.start(exiftool_bin, arglist); if (!exiftool.waitForFinished(90000)) exiftool.kill(); data = QString::fromUtf8(exiftool.readAllStandardOutput()); if (exiftool.error() == QProcess::UnknownError) // No error { pdf_author_rx.setPattern("Author\\s*:\\s+(.*)\\n"); pdf_title_rx.setPattern("Title\\s*:\\s+(.*)\\n"); pdf_keywords_rx.setPattern("Subject\\s*:\\s+(.*)\\n"); } else is_exiftool_available = false; } if (!is_exiftool_available) { if (!raw_contents.startsWith("%PDF")) return; data = _pdfDictionary(raw_contents); pdf_author_rx.setPattern("\\Author\\s*\\((.*)\\)"); pdf_title_rx.setPattern("\\Title\\s*\\((.*)\\)"); } pdf_author_rx.setMinimal(true); pdf_author_rx.setCaseSensitivity(Qt::CaseSensitive); if (pdf_author_rx.indexIn(data) > -1) if (!pdf_author_rx.cap(1).trimmed().isEmpty()) _ref["author"] = pdf_author_rx.cap(1); // Dublin Core Metadata keywords if exiftool is available if (_has_prism && is_exiftool_available) { pdf_keywords_rx.setMinimal(true); pdf_keywords_rx.setCaseSensitivity(Qt::CaseSensitive); if (pdf_keywords_rx.indexIn(data) > -1) if (!pdf_keywords_rx.cap(1).trimmed().isEmpty()) _ref["keywords"] = pdf_keywords_rx.cap(1); } // Done if BibTeX, otherwise try checking dictionary for title if (_has_bibtex) return; pdf_title_rx.setMinimal(true); pdf_title_rx.setCaseSensitivity(Qt::CaseSensitive); if (pdf_title_rx.indexIn(data) > -1) if (!pdf_title_rx.cap(1).trimmed().isEmpty()) _ref["title"] = pdf_title_rx.cap(1); } const QString metadataParser::_pdfDictionary(const QByteArray& rawpdf) { // Heuristic to locate the Pdf dictionary const int pos(rawpdf.lastIndexOf("/Producer")); if (pos > -1) { const int pos0(rawpdf.lastIndexOf("<<", pos)); if (pos0 > -1) { const int posn(rawpdf.indexOf(">>", pos)); if (posn > pos0) return QString::fromLatin1(rawpdf.mid(pos0, posn - pos0 + 2)); } } return QString(); } void metadataParser::_metadataXmpExifTool(const QString& fn, QStringList* xmls) { // Not actually needed, called for not directly visible XMP packages // It's slower than _metadataXmp() full scan. const QString exiftool_bin(_settingsP->fileName("cb2Bib/ExifToolBin")); if (exiftool_bin.isEmpty()) return; QProcess exiftool; QStringList arglist; arglist.append("-xmp"); arglist.append("-b"); arglist.append(fn); exiftool.start(exiftool_bin, arglist); if (!exiftool.waitForFinished(90000)) exiftool.kill(); QString xmp(c2bUtils::toQtXmlString(QString::fromUtf8(exiftool.readAllStandardOutput()))); if (xmp.startsWith("append(xmp); _has_bibtex = _has_bibtex || xmls->last().contains("bibtex:"); _has_cb2bib = _has_cb2bib || xmls->last().contains("www.molspaces.com/cb2bib"); _has_prism = _has_prism || xmls->last().contains("prismstandard.org/namespaces/basic/2.0"); } } void metadataParser::_fuzzyParser(const QString& data) { if (data.isEmpty()) return; QXmlStreamReader parser; parser.addData(data); QRegExp* fields; if (_has_bibtex) fields = &_bibtex_fields; else fields = &_fields; QString field; QString key; QString value; while (!parser.atEnd()) { parser.readNext(); if (parser.isStartElement()) { // Do attributes (seems poppler xml composing) QXmlStreamAttributes att = parser.attributes(); for (int i = 0; i < att.count(); ++i) { field = att.at(i).qualifiedName().toString(); key = att.at(i).name().toString().toLower(); value = att.at(i).value().toString(); if (value.isEmpty()) continue; if (fields->indexIn(field) >= 0) _ref[_bibtex_key.value(key)] = value; else if (QString::compare(field, "summary", Qt::CaseInsensitive) == 0 || QString::compare(field, "subject", Qt::CaseInsensitive) == 0) { if (!_ref.contains("abstract")) // Prefer BibTeX field key if exists than synonyms _ref["abstract"] = value; } else if (QString::compare(field, "bibtex:type", Qt::CaseInsensitive) == 0 || QString::compare(field, "bibtex:entrytype", Qt::CaseInsensitive) == 0) _ref["type"] = value.toLower(); } // Do element (exiftool and exempi xml composing) field = parser.qualifiedName().toString(); key = parser.name().toString().toLower(); if (fields->indexIn(field) >= 0) { parser.readNext(); value = parser.text().toString().trimmed(); if (!value.isEmpty()) _ref[_bibtex_key.value(key)] = value; } else if (!_has_bibtex && QString::compare(field, "prism:coverDate", Qt::CaseSensitive) == 0) { parser.readNext(); value = parser.text().toString().trimmed(); const QDate pdate(QDate::fromString(value, Qt::ISODate)); const QString pyear(pdate.toString("yyyy")); // Prefer BibTeX date over Prism if (!pyear.isEmpty() && !_ref.contains("year")) _ref["year"] = pyear; const QString pmonth(pdate.toString("d MMMM")); if (!pmonth.isEmpty() && !_ref.contains("month")) _ref["month"] = pmonth; } else if (QString::compare(field, "summary", Qt::CaseInsensitive) == 0 || QString::compare(field, "subject", Qt::CaseInsensitive) == 0) { parser.readNext(); value = parser.text().toString().trimmed(); if (!value.isEmpty() && !_ref.contains("abstract")) // Prefer BibTeX field key if exists than synonyms _ref["abstract"] = value; } else if (QString::compare(field, "bibtex:type", Qt::CaseInsensitive) == 0 || QString::compare(field, "bibtex:entrytype", Qt::CaseInsensitive) == 0) { parser.readNext(); value = parser.text().toString().trimmed(); if (!value.isEmpty()) _ref["type"] = value.toLower(); } } } if (parser.hasError()) c2bUtils::debug(tr("metadataParser: Error while parsing XML packets")); } bool metadataParser::insertMetadata(const bibReference& ref, const QString& fn, QString* error, const bool has_reference) { if (error) error->clear(); const QString exiftool_bin(_settingsP->fileName("cb2Bib/ExifToolBin")); if (exiftool_bin.isEmpty()) { if (error) *error = tr("Metadata writer: ExifTool location has not been specified."); else emit showMessage(tr("Warning - cb2Bib"), tr("Metadata writer: ExifTool location has not been specified.")); return false; } if (ref.count() == 0) return false; QString bibtags; QString key; QString value; const QString entry("%2\n"); bibtags += entry.arg("type", ref.typeName); const QStringList& bibliographicFields = _cbpP->bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) { key = bibliographicFields.at(i); value = ref.value(key); if (key == "file") continue; else if (key == "id") continue; c2bUtils::fullBibToC2b(value); if (key == "title" || key == "booktitle") c2bUtils::cleanTitle(value); bibtags += entry.arg(key, value); } QString bibtags_xmp(c2bUtils::fileToString(":/xml/xml/cb2bib.xmp")); bibtags_xmp.replace("GET_BIBTEX_TAGS", bibtags); bibtags_xmp.replace("GET_FORMATTED_AUTHOR", formattedAuthor(ref.value("author"))); const QString workdir(QFileInfo(fn).absolutePath()); const QString bibtags_file(workdir + "/bibtags.xmp"); c2bUtils::stringToFile(bibtags_xmp, bibtags_file); QProcess exiftool; QStringList arglist; arglist.append("-overwrite_original"); arglist.append("-m"); if (has_reference) arglist.append("-P"); arglist.append("-TagsFromFile"); arglist.append(bibtags_file); arglist.append("-all:all"); arglist.append("-pdf:all networkQuery::networkQuery(bibParser* bp, QObject* parento) : QObject(parento), _bpP(bp) { Q_ASSERT_X(_bpP, "networkQuery", "bibParser was not instantiated"); _networkP = new network(this); init(); } networkQuery::networkQuery(bibParser* bp, network* net, QObject* parento) : QObject(parento), _bpP(bp), _networkP(net) { Q_ASSERT_X(_bpP, "networkQuery", "bibParser was not instantiated"); Q_ASSERT_X(_networkP, "networkQuery", "network was not instantiated"); init(); } void networkQuery::init() { _settingsP = settings::instance(); _settingsP->setValue("networkQuery/isSupervised", true); _networkquery_tmp_fn1 = _settingsP->tempPath() + "/cb2bib_query_tmp_html1_" + _settingsP->applicationPid(); _networkquery_tmp_fn2 = _settingsP->tempPath() + "/cb2bib_query_tmp_html2_" + _settingsP->applicationPid(); _timing = QDateTime::currentDateTime(); } bool networkQuery::hasSsl() { return _networkP->supportedSchemes().contains("https"); } void networkQuery::submitQuery(const bibReference& reference, const QString& raw_reference, const bool check_document) { // Submission Initialization _error_string.clear(); _query_parameter_count.clear(); _is_end_of_file = false; _pdfurl_is_captured = false; _check_document = check_document && _settingsP->value("cb2Bib/AutomaticPdfDownload").toBool(); // Query data _Qtitle = reference.value("title"); _Qjournal = _bpP->fullJournal(reference.value("journal")); _Qvolume = reference.value("volume"); _Qpage = c2bUtils::firstPage(reference.value("pages")); _Qdoi = reference.value("doi").trimmed(); if (!_Qdoi.isEmpty() && QRegExp("^10\\.[\\d\\.]+/\\S+$").indexIn(_Qdoi) == -1) { _Qdoi.clear(); c2bUtils::warn(tr("Warning: DOI skipped: '%1' is not a valid DOI").arg(_Qdoi)); } _Qauthor = reference.value("author"); _Qauthor = c2bUtils::replaced(_Qauthor, QRegExp("(?:\\b\\w\\b|\\band\\b|\\W)"), " "); _Qauthor = c2bUtils::simplifyString(_Qauthor); _Qexcerpt = _bpP->excerpt(raw_reference, QStringList() << _Qdoi << _Qauthor << _Qtitle); _Qeprint = reference.value("eprint").trimmed(); _raw_reference = raw_reference; // Remove raw metadata in case user repeats the network query c2bUtils::remove(_raw_reference, QRegExp("\\n\\[Raw Metadata.+$")); if (_timing.msecsTo(QDateTime::currentDateTime()) < 550) QTimer::singleShot(550, this, SLOT(submitQuery1())); else submitQuery1(); } void networkQuery::submitQuery1() { _raw_metadata.clear(); // Submission, first step, setting journal codes if (!setQueryParameters()) { _error_string = tr("No data for query."); emit queryEnded(false, _targetQ, _networkquery_tmp_fn1); return; } if (_is_end_of_file) { _error_string = tr("Performed %1 queries: No reference found.").arg(_query_parameter_count.count()); emit queryEnded(false, _targetQ, _networkquery_tmp_fn1); return; } c2bUtils::debug(tr("Query Number = %1").arg(_query_parameter_count.count())); c2bUtils::debug(tr("targetQ[%1]").arg(_targetQ)); c2bUtils::debug(tr("captionQ[%1]").arg(_captionQ)); c2bUtils::debug(tr("referenceurl_prefix[%1]").arg(_referenceurl_prefix)); c2bUtils::debug(tr("referenceurl_sufix[%1]").arg(_referenceurl_sufix)); c2bUtils::debug(tr("pdfurl_prefix[%1]").arg(_pdfurl_prefix)); c2bUtils::debug(tr("pdfurl_sufix[%1]").arg(_pdfurl_sufix)); c2bUtils::debug(tr("action[%1]").arg(_action)); c2bUtils::debug(tr("POST1[%1]").arg(_targetQ)); if (_action == "browse_query") { if (openFile(encodeUrl(_targetQ))) { _error_string = tr("Browsing query."); emit queryEnded(true, QString(), QString()); } else { _error_string = tr("Could not open URL '%1'.").arg(encodeUrl(_targetQ)); emit queryEnded(false, QString(), QString()); } return; } _timing = QDateTime::currentDateTime(); if (_action == "htm2txt_query") emit statusMessage(tr("Importing: %1.").arg(_targetQ)); else emit statusMessage(tr("Query: %1.").arg(_targetQ)); _networkP->getFile(_targetQ, _networkquery_tmp_fn1, network::Copy, this, SLOT(submitQuery2(bool)), !_settingsP->value("cb2Bib/KeepTmpNQFiles").toBool()); } void networkQuery::submitQuery2(bool succeeded) { // Submission, second part: check query replay and PDF existence if (!succeeded) { _error_string = _networkP->errorString(); emit statusMessage(tr("Query failed with %1.").arg(_error_string)); QTimer::singleShot(10, this, SLOT(submitQuery1())); return; } QString lines(c2bUtils::fileToString(_networkquery_tmp_fn1, !_settingsP->value("cb2Bib/KeepTmpNQFiles").toBool())); // For the single query cases with no htm2txt_query and referenceurl_prefix use // non empty capture_from_query to check for result availability QString captured; if (!_captionQ.isEmpty()) { QRegExp rx(_captionQ); rx.setMinimal(true); if (!rx.isValid()) c2bUtils::warn(tr("Warning: RegExp '%1' is not valid").arg(_captionQ)); const int ncap(rx.indexIn(lines)); if (ncap == -1) { QTimer::singleShot(10, this, SLOT(submitQuery1())); return; } captured = fromHtmlString(rx.cap(1)); c2bUtils::debug(tr("CAPTURED[%1]").arg(captured)); } if (_action == "htm2txt_query") { _error_string = tr("Importing query URL."); emit queryEnded(true, QString(), fromHtmlString(lines, true)); return; } if (_action == "merge_all_metadata") _raw_metadata = _raw_reference + c2bUtils::metadatasection.arg(lines.trimmed()); else if (_action == "merge_referenceurl_metadata") _raw_metadata = _raw_reference; else _raw_metadata = c2bUtils::metadatasection.arg(lines.trimmed()); if (_referenceurl_prefix.isEmpty() && _pdfurl_prefix.isEmpty()) { _error_string = tr("Importing query URL."); emit queryEnded(true, QString(), _raw_metadata); return; } if (captured.isEmpty()) { QTimer::singleShot(10, this, SLOT(submitQuery1())); return; } if (_referenceurl_prefix.isEmpty()) _targetBib.clear(); else _targetBib = _referenceurl_prefix + captured + _referenceurl_sufix; if (_check_document && !_pdfurl_prefix.isEmpty()) { if (_pdfurl_is_captured) _targetPDF = _pdfurl_prefix + _pdfurl_sufix; else _targetPDF = _pdfurl_prefix + captured + _pdfurl_sufix; emit statusMessage(tr("Checking: %1").arg(_targetPDF)); _networkP->headFile(_targetPDF, this, SLOT(submitQuery3(bool))); } else submitQuery3(false); } void networkQuery::submitQuery3(bool succeeded) { // Submission, third part: extracting reference location if (!succeeded || QRegExp("\\b(chm|djvu|pdf|ps)\\b").indexIn(_networkP->mimetypeString()) == -1) _targetPDF.clear(); else _targetPDF = _networkP->sourceFilename(); if (_referenceurl_prefix.isEmpty()) { emit queryEnded(true, _targetPDF, _raw_metadata); return; } c2bUtils::debug(tr("POST2[%1]").arg(_targetBib)); c2bUtils::debug(tr("POST3[%1]").arg(_targetPDF)); if (_action == "browse_referenceurl") { if (openFile(encodeUrl(_targetBib))) { _error_string = tr("Browsing reference."); emit queryEnded(true, QString(), QString()); } else { _error_string = tr("Could not open URL '%1'.").arg(encodeUrl(_targetBib)); emit queryEnded(false, QString(), QString()); } return; } if (_action == "htm2txt_referenceurl") emit statusMessage(tr("Importing: %1.").arg(_targetBib)); else emit statusMessage(tr("Retrieving: %1.").arg(_targetBib)); _networkP->getFile(_targetBib, _networkquery_tmp_fn2, network::Copy, this, SLOT(queryDone(bool)), !_settingsP->value("cb2Bib/KeepTmpNQFiles").toBool()); } void networkQuery::queryDone(bool succeeded) { // Submission Done if (!succeeded) { QTimer::singleShot(10, this, SLOT(submitQuery1())); return; } QString lines(c2bUtils::fileToString(_networkquery_tmp_fn2, !_settingsP->value("cb2Bib/KeepTmpNQFiles").toBool())); if (_action == "htm2txt_referenceurl") { _error_string = tr("Importing reference URL."); emit queryEnded(true, _targetPDF, fromHtmlString(lines, true)); return; } if (_action == "merge_all_metadata" || _action == "merge_referenceurl_metadata") _raw_metadata += c2bUtils::metadatasection.arg(lines.trimmed()); else _raw_metadata = c2bUtils::metadatasection.arg(lines.trimmed()); emit queryEnded(true, _targetPDF, _raw_metadata); } bool networkQuery::setQueryParameters() { if (!checkQueryFile(_settingsP->fileName("cb2Bib/NetworkFile"))) return false; QFile file(_settingsP->fileName("cb2Bib/NetworkFile")); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { c2bUtils::warn(tr("Failed to open '%1' file.").arg(_settingsP->fileName("cb2Bib/NetworkFile"))); return false; } QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); QRegExp Journal("journal=" + _Qjournal + "\\|"); QRegExp AnyJournal("journal=\\s*$"); uint readQueryParams(0); _is_end_of_file = false; QString line; while (!stream.atEnd()) { line = stream.readLine(); if (line.startsWith("%c2b_stop_parsing")) break; // Skip comments and blanks if (!(line.isEmpty() || QRegExp("^#").indexIn(line) >= 0)) { if (Journal.indexIn(line) >= 0) { const QStringList lc(line.split('|')); if (lc.count() > 1) _QjournalCode = lc.at(1); else _QjournalCode.clear(); } else if (AnyJournal.indexIn(line) >= 0) { _QjournalCode = _Qjournal; _QjournalCode.replace(" & ", " and "); // Avoid sending '&' to confuse URLs _QjournalCode = c2bUtils::replaced(_QjournalCode, QRegExp("\\W"), " "); _QjournalCode = _QjournalCode.simplified(); _QjournalCode.replace(" ", "+"); } // Get appropiate parameters for Journal or AnyJournal if (Journal.indexIn(line) >= 0 || AnyJournal.indexIn(line) >= 0) { // Skip if already performed if (!_query_parameter_count.contains(++readQueryParams)) { while (QRegExp("^journal=").indexIn(line) >= 0) line = stream.readLine(); _targetQ = c2bUtils::removed(line, QRegExp("^query=")); line = stream.readLine(); _captionQ = c2bUtils::removed(line, QRegExp("^capture_from_query=")); line = stream.readLine(); _referenceurl_prefix = c2bUtils::removed(line, QRegExp("^referenceurl_prefix=")); line = stream.readLine(); _referenceurl_sufix = c2bUtils::removed(line, QRegExp("^referenceurl_sufix=")); line = stream.readLine(); _pdfurl_prefix = c2bUtils::removed(line, QRegExp("^pdfurl_prefix=")); line = stream.readLine(); _pdfurl_sufix = c2bUtils::removed(line, QRegExp("^pdfurl_sufix=")); line = stream.readLine(); _action = c2bUtils::removed(line, QRegExp("^action=")); // Setting Query Parameters updateQueryPlaceholders(); // Finally, check for unresolved cb2Bib tags if (areQueryParametersValid()) { _query_parameter_count.append(readQueryParams); return true; } } } } } file.close(); _is_end_of_file = true; return (!_query_parameter_count.isEmpty()); } void networkQuery::updateQueryPlaceholders() { const QString pdfurl_prefix(_pdfurl_prefix); if (!_Qtitle.isEmpty()) { _targetQ.replace("<>", _Qtitle); _captionQ.replace("<<title>>", _Qtitle); _referenceurl_prefix.replace("<<title>>", _Qtitle); _referenceurl_sufix.replace("<<title>>", _Qtitle); _pdfurl_prefix.replace("<<title>>", _Qtitle); _pdfurl_sufix.replace("<<title>>", _Qtitle); } if (!_QjournalCode.isEmpty()) { _targetQ.replace("<<journal>>", _QjournalCode); _captionQ.replace("<<journal>>", _QjournalCode); _referenceurl_prefix.replace("<<journal>>", _QjournalCode); _referenceurl_sufix.replace("<<journal>>", _QjournalCode); _pdfurl_prefix.replace("<<journal>>", _QjournalCode); _pdfurl_sufix.replace("<<journal>>", _QjournalCode); } if (!_Qpage.isEmpty()) { _targetQ.replace("<<pages>>", _Qpage); _captionQ.replace("<<pages>>", _Qpage); _referenceurl_prefix.replace("<<pages>>", _Qpage); _referenceurl_sufix.replace("<<pages>>", _Qpage); _pdfurl_prefix.replace("<<pages>>", _Qpage); _pdfurl_sufix.replace("<<pages>>", _Qpage); } if (!_Qvolume.isEmpty()) { _targetQ.replace("<<volume>>", _Qvolume); _captionQ.replace("<<volume>>", _Qvolume); _referenceurl_prefix.replace("<<volume>>", _Qvolume); _referenceurl_sufix.replace("<<volume>>", _Qvolume); _pdfurl_prefix.replace("<<volume>>", _Qvolume); _pdfurl_sufix.replace("<<volume>>", _Qvolume); } if (!_Qdoi.isEmpty()) { _targetQ.replace("<<doi>>", _Qdoi); _captionQ.replace("<<doi>>", _Qdoi); _referenceurl_prefix.replace("<<doi>>", _Qdoi); _referenceurl_sufix.replace("<<doi>>", _Qdoi); _pdfurl_prefix.replace("<<doi>>", _Qdoi); _pdfurl_sufix.replace("<<doi>>", _Qdoi); } if (!_Qexcerpt.isEmpty()) { _targetQ.replace("<<excerpt>>", _Qexcerpt); _captionQ.replace("<<excerpt>>", _Qexcerpt); _referenceurl_prefix.replace("<<excerpt>>", _Qexcerpt); _referenceurl_sufix.replace("<<excerpt>>", _Qexcerpt); _pdfurl_prefix.replace("<<excerpt>>", _Qexcerpt); _pdfurl_sufix.replace("<<excerpt>>", _Qexcerpt); } if (!_Qeprint.isEmpty()) { _targetQ.replace("<<eprint>>", _Qeprint); _captionQ.replace("<<eprint>>", QRegExp::escape(_Qeprint)); _referenceurl_prefix.replace("<<eprint>>", _Qeprint); _referenceurl_sufix.replace("<<eprint>>", _Qeprint); _pdfurl_prefix.replace("<<eprint>>", _Qeprint); _pdfurl_sufix.replace("<<eprint>>", _Qeprint); } _pdfurl_is_captured = (pdfurl_prefix != _pdfurl_prefix); } bool networkQuery::areQueryParametersValid() const { if (!_action.isEmpty()) { if (_action == "browse_query" || _action == "browse_referenceurl") { if (!_settingsP->value("networkQuery/isSupervised").toBool()) return false; } else if (!(_action == "htm2txt_query" || _action == "htm2txt_referenceurl" || _action == "merge_all_metadata" || _action == "merge_referenceurl_metadata")) return false; } const QString allParams(_targetQ + _captionQ + _referenceurl_prefix + _referenceurl_sufix + _pdfurl_prefix + _pdfurl_sufix); return QRegExp("(?:<<title>>|<<journal>>|<<pages>>|<<volume>>|<<doi>>|<<excerpt>>|<<eprint>>)") .indexIn(allParams) == -1; } const QString networkQuery::encodeUrl(const QString& url) const { // Removes <<post>> tag if present and encodes URL to percent encoding QString encoded_url(c2bUtils::removed(url, QRegExp("^<<post>>"))); encoded_url = QUrl::toPercentEncoding(encoded_url, "+:/?=&\\"); return encoded_url; } bool networkQuery::checkQueryFile(const QString& fn) const { if (fn.isEmpty()) { c2bUtils::warn(tr("No network query file especified")); return false; } QFileInfo fi(fn); if (!fi.exists() || !fi.isReadable()) { c2bUtils::warn(tr("Could not open network query file %1 for reading").arg(fn)); return false; } return true; } �������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/coreBibParser.h�����������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016047� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.778761405 29 atime=1762812827.99875967 30 ctime=1762812827.782761374 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/coreBibParser.h����������������������������������������������������������������0000644�0001750�0000144�00000015562�15104461633�020052� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef COREBIBPARSER_H #define COREBIBPARSER_H #include "authorString.h" #include "bibReference.h" #include "settings.h" #include "txtmatcher.h" #include <QDir> #include <QObject> /** Class for bibliographic reference parsing @author Pere Constans */ class coreBibParser : public QObject { Q_OBJECT public: explicit coreBibParser(QObject* parento = 0); inline virtual ~coreBibParser() {} QString referenceToBibTeX(const bibReference& ref) const; QString referenceToFomattedBibTeX(const bibReference& ref) const; QString singleReferenceField(const QString& field, const bibReference& ref) const; bibReference wholeReference(const QString& str) const; bool referenceAtKey(const QString& key, const QString& str, bibReference* ref); bool referencesIn(const QString& str, bibReference* ref); void initReferenceParsing(const QString& dir, const QStringList& fields, bibReference* ref); inline const QStringList& bibliographicFields() const { return _bibliographic_fields; } inline const QStringList& sortedBibliographicFields() const { return _sorted_bibliographic_fields; } inline const QStringList& bibliographicTypes() const { return _bibliographic_types; } inline void setReferenceParsingDir(const QString& dir) { // Set base dir for cases of relative 'file' // Terminate dirname with separator to avoid adding it to each reference _bib_file_dir = QDir::toNativeSeparators(QFileInfo(dir).absolutePath() + QDir::separator()); } inline bool hasBibTeX(const QString& str) const { if (_bib_begin0_re.indexIn(str) > -1) return true; else return _bib_begin1_re.indexIn(str) > -1; } inline int fieldCount(const bibReference& ref) const { // Counting non empty fields int n(0); bibReferenceIterator i; for (i = ref.constBegin(); i != ref.constEnd(); ++i) if (!i.value().isEmpty()) ++n; return n; } inline QString& authorFromBibTeX(QString& as) { // Avoid BibTeX reverse names if (as.contains(_comma)) as = _authorString.toBibTeX(as, _settingsP->value("cb2Bib/UseFullNames").toBool()); return as; } inline QString authorFromMedline(const QString& author) const { return _authorString.fromMedline(author); } inline const QString& authorPrefixes() const { return _authorString.prefixes(); } protected: QRegExp _field_re; QString adjacentNumbers(const QString& numbers) const; QStringList _bibliographic_fields; QStringList _bibliographic_types; QStringList _current_bibliographic_fields; QStringList _sorted_bibliographic_fields; authorString _authorString; settings* _settingsP; private: QRegExp _bib_begin0_re; QRegExp _bib_begin1_re; QRegExp _bib_begin_re; QString _bib_file_dir; const QChar _at; const QChar _close; const QChar _colon; const QChar _comma; const QChar _cr; const QChar _hyphen; const QChar _lca; const QChar _lcz; const QChar _nl; const QChar _open; const QChar _period; const QChar _pound; const QChar _quote; const QChar _space; const QChar _tilde; const QChar _uca; const QChar _ucz; txtmatcher _bib_begin_at; txtmatcher _bib_field_delimiter; void referenceContents(const QString& str, bibReference* ref, int pos) const; void setFields(); void setRegularExpressions(); void setTypes(); void _parse_reference_fields(const QString& bibstr, const QStringList& fields, bibReference* ref) const; int _in_braces_ends(const QChar* const b, const int p, const int length) const; inline int referenceStarts(const QString& str, int pos = 0) const { while (true) { const int i(_bib_begin_at.indexIn(str, pos)); if (i > 0) { for (int j = i - 1; j >= pos; --j) if (str.at(j) == _nl || str.at(j) == _cr) goto check; else if (!str.at(j).isSpace()) goto next; if (pos > 0) goto next; } else if (i < 0) return i; check: if (_bib_begin_re.indexIn(str, i, QRegExp::CaretAtOffset) == i) return i; next: pos = i + 2; } } inline int referenceStarts(const QString& key, const QString& str) const { if (!str.contains(key)) return -1; int i(QRegExp("^\\s*@\\w+\\s*\\{" + key + ',').indexIn(str)); if (i < 0) i = QRegExp("[\\r\\n]\\s*@\\w+\\s*\\{" + key + ',').indexIn(str); if (i < 0) return i; return QRegExp("@\\w+\\s*\\{" + key + ',').indexIn(str, i); } inline int referenceEnds(const QString& str, const int pos = 0) const { // If referenceStarts call is successful, we know for sure // that there is an opening { right after pos. // Do not check again here. // Checking for brace closure is the safest way for parsing. // It will fail, though, for references incorrectly written. // Avoid overextending in these cases by checking the // start of the next reference. int ref_length(referenceStarts(str, pos + 2) - 1); if (ref_length < 0) ref_length = str.length(); const int brace_pos(str.indexOf(_open, pos)); int open_braces(1); for (int i = brace_pos + 1; i < ref_length; ++i) { if (str.at(i) < _open) continue; const QChar& si(str.at(i)); if (si == _open) open_braces++; else if (si == _close) open_braces--; if (open_braces == 0) return i; } return ref_length - 1; } inline void setReferenceEnd(QString* str) const { // Set safer termination: field="..." } -> field="...",} const unsigned int length(str->length()); if (str->at(length - 2) == _space) (*str)[length - 2] = _comma; else (*str)[length - 1] = _comma; } inline QString referenceAt(const QString& str, int* pos) const { // String str contains one or multiple references (file contents) const int p(referenceEnds(str, *pos) + 1); const QString str_ref(str.mid(*pos, p - (*pos))); *pos = p; return str_ref; } }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/monthDB.cpp���������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015214� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.702762004 30 atime=1762812828.038759355 30 ctime=1762812827.706761973 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/monthDB.cpp��������������������������������������������������������������������0000644�0001750�0000144�00000004421�15104461633�017206� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "monthDB.h" #include "settings.h" monthDB::monthDB() : _day_rx(QRegExp("(\\d+)")), _month_rx(QRegExp("([A-Za-z]+)")), _month_abbreviated(QString("jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec").split('|')), _month_full( QString("January|February|March|April|May|June|July|August|September|October|November|December").split('|')) {} QString monthDB::retrieve(const QString& month_query) { bool has_month(_month_rx.indexIn(month_query) > -1); if (!has_month) return month_query; const QString month(_month_rx.cap(1)); const QString month_abbreviated(abbreviated(month)); const QString month_full(full(month)); // Early return if month is not recognized if (month_abbreviated == month_full) return month_query; const bool has_day(_day_rx.indexIn(month_query) > -1); if (settings::instance()->value("cb2Bib/PostprocessMonth").toBool()) { // Do '1 April' -> '"1~" # apr' if (has_day) return QString("\"%1~\" # %2").arg(_day_rx.cap(1), month_abbreviated); else return month_abbreviated; } else { // Capitalize if (has_day) return QString("%1 %2").arg(_day_rx.cap(1), month_full); else return month_full; } } QString monthDB::abbreviated(const QString& month) const { for (int i = 0; i < 12; i++) if (QString::compare(month, _month_abbreviated.at(i), Qt::CaseInsensitive) == 0 || QString::compare(month, _month_full.at(i), Qt::CaseInsensitive) == 0) return _month_abbreviated.at(i); return month; } QString monthDB::full(const QString& month) const { for (int i = 0; i < 12; i++) if (QString::compare(month, _month_abbreviated.at(i), Qt::CaseInsensitive) == 0 || QString::compare(month, _month_full.at(i), Qt::CaseInsensitive) == 0) return _month_full.at(i); return month; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/metadataParser.h����������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016263� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.806761184 30 atime=1762812828.038759355 30 ctime=1762812827.806761184 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/metadataParser.h���������������������������������������������������������������0000644�0001750�0000144�00000004113�15104461633�020253� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef METADATAPARSER_H #define METADATAPARSER_H #include <bibReference.h> #include <QObject> class coreBibParser; class settings; class metadataParser : public QObject { Q_OBJECT public: explicit metadataParser(QObject* parento = 0); explicit metadataParser(coreBibParser* cbp, QObject* parento = 0); inline ~metadataParser() {} bool insertMetadata(const bibReference& ref, const QString& fn, QString* error = 0, const bool has_reference = false); bool metadata(const QString& fn, bibReference* ref); const QString metadata(const QString& fn); signals: void showMessage(const QString& title, const QString& ms); private: QHash<QString, QString> _bibtex_key; QRegExp _bibtex_fields; QRegExp _fields; bibReference _ref; bool _has_bibtex; bool _has_cb2bib; bool _has_prism; bool _metadata(const QString& fn); const QString _pdfDictionary(const QByteArray& rawpdf); coreBibParser* _cbpP; settings* _settingsP; void _fuzzyParser(const QString& data); void _metadataXmp(const QString& fn, const QByteArray& raw_contents, QStringList* xmls); void _metadataXmpExifTool(const QString& fn, QStringList* xmls); void _miscellaneousData(const QString& fn, const QByteArray& raw_contents); void init(); inline QString formattedAuthor(const QString& author) const { const QStringList alist(author.split(" and ", _QT_6_SkipEmptyParts)); int na(alist.count()); if (na <= 2) return author; QString formatted(alist.first()); for (int i = 1; i < na - 1; ++i) formatted += ", " + alist.at(i); formatted += ", and " + alist.last(); return formatted; } }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/substringMatcher.cpp������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�017205� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.726761815 30 atime=1762812828.038759355 30 ctime=1762812827.726761815 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/substringMatcher.cpp�����������������������������������������������������������0000644�0001750�0000144�00000005745�15104461633�021211� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "substringMatcher.h" #include "cb2bib_utilities.h" #include "triads.h" substringMatcher::substringMatcher() : _hook(-1), _substring_count(0), _matched_length(-1), _p0(0), _pn(0) {} substringMatcher::substringMatcher(const QString& pattern, const Qt::CaseSensitivity cs) : _hook(-1), _matched_length(-1), _p0(0), _pn(0) { QRegExp sep("\\.\\{(\\d+),(\\d+)\\}"); QStringList substrings(c2bUtils::split(pattern, sep, _QT_6_SkipEmptyParts)); Q_ASSERT_X(substrings.count() >= 2, "substringMatcher", "Expected at least two substrings in pattern"); int s(0); QList<int> stretches; while ((s = sep.indexIn(pattern, s)) != -1) { Q_ASSERT_X(sep.captureCount() == 2, "substringMatcher", "Expected two digits in repetition"); Q_ASSERT_X(sep.cap(1).toInt() == 0, "substringMatcher", "Expected zero in first repetition digit"); stretches.append(sep.cap(2).toInt()); s += sep.matchedLength(); } Q_ASSERT_X(substrings.count() == stretches.count() + 1, "substringMatcher", "Mismatch in pattern"); _substring_count = substrings.count(); _substrings.resize(_substring_count); _lengths.resize(_substring_count); for (int i = 0; i < _substring_count; ++i) { _substrings[i] = txtmatcher(substrings.at(i), cs); _lengths[i] = substrings.at(i).length(); } _stretches.resize(_substring_count); _stretches[0] = 0; for (int i = 1; i < _substring_count; ++i) _stretches[i] = stretches.at(i - 1); _acc_lengths.fill(0, _substring_count); for (int i = 1; i < _substring_count; ++i) _acc_lengths[i] = _acc_lengths[i - 1] + _lengths.at(i - 1); int lf(10000); for (int i = 0; i < _substring_count; ++i) { const int f(triads::textFrequency(substrings.at(i))); if (f < lf) { lf = f; _hook = i; } } #if C2B_DEBUG_SUBSTRINGMATCHER qDebug() << "substringMatcher: Pattern: " << pattern; qDebug() << "substringMatcher: Hook: " << substrings.at(_hook); #endif } int substringMatcher::indexIn(const QString& str, const int from) const { _matched_length = -1; if (_hook == -1) // Uninitialized return -1; _p0 = from; if (_p0 < 0) _p0 = 0; _pn = str.length(); if (_pn == 0) return -1; int hp(_p0); int p(-1); while (p == -1) { hp = _index_in(_hook, str, hp + _acc_lengths.at(_hook)); #if C2B_DEBUG_SUBSTRINGMATCHER qDebug() << "substringMatcher: Hook at " << hp; #endif if (hp == -1) return -1; p = _index_around(str, hp); hp += _lengths.at(_hook); } return p; } ���������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/wordMatcher.cpp�����������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016137� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1762812827.73876172 30 atime=1762812828.042759324 30 ctime=1762812827.742761689 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/wordMatcher.cpp����������������������������������������������������������������0000644�0001750�0000144�00000005127�15104461633�020136� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "wordMatcher.h" #include "cb2bib_utilities.h" #include "triads.h" #include <limits> wordMatcher::wordMatcher() : _hook(-1), _stretch(0), _substring_count(0), _matched_length(-1), _p0(0), _pn(0) {} wordMatcher::wordMatcher(const QString& pattern, const Qt::CaseSensitivity cs) : _p0(0), _pn(0) { setPattern(pattern, cs); } void wordMatcher::setPattern(const QString& pattern, const Qt::CaseSensitivity cs) { _hook = -1; _matched_length = -1; _stretch = 0; _subpatterns = c2bUtils::split(pattern, c2bUtils::nonLetter, _QT_6_SkipEmptyParts); if (_subpatterns.count() == 0) return; _substring_count = _subpatterns.count(); for (int i = 0; i < _substring_count; ++i) _subpatterns[i].replace('_', ' '); _substrings.resize(_substring_count); _lengths.resize(_substring_count); _sp0.resize(_substring_count); for (int i = 0; i < _substring_count; ++i) { _substrings[i] = txtmatcher(_subpatterns.at(i), cs); _lengths[i] = _subpatterns.at(i).length(); if (_lengths.at(i) > 4) _stretch += 50; else _stretch += 10; } for (int i = 0, lf = std::numeric_limits<int>::max(); i < _substring_count; ++i) { const int f(_substrings.at(i).frequency() * triads::textFrequency(_substrings.at(i).pattern())); if (f < lf) { lf = f; _hook = i; } } #ifdef C2B_DEBUG_SEARCHING for (int i = 0; i < _substring_count; ++i) qDebug() << "subpattern " << _substrings.at(i).pattern(); qDebug() << "hook " << _substrings.at(_hook).pattern() << _hook; qDebug() << "_stretch " << _stretch; qDebug() << "subpatternstrings " << subpatternStrings(); #endif } int wordMatcher::indexIn(const QString& text, const int from) const { _matched_length = -1; if (_hook == -1) // Uninitialized return -1; _p0 = from; if (_p0 < 0) _p0 = 0; _pn = text.length(); if (_pn == 0) return -1; int hp(_p0); int p(-1); while (p == -1) { hp = _index_in(_hook, text, hp); if (hp == -1) return -1; p = _index_around(text, hp); hp += _lengths.at(_hook); } return p; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/c2blib.pro����������������������������������������������������������0000644�0000000�0000000�00000000073�15104461330�015032� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 atime=1762812827.99875967 30 ctime=1762812827.178766136 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/c2blib.pro���������������������������������������������������������������������0000644�0001750�0000144�00000001732�15104461330�017022� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������LANGUAGE = C++ CONFIG += c++11 HEADERS += $$files(*.h) SOURCES += $$files(*.cpp) SOURCES -= $$files(moc_*.cpp) SOURCES -= $$files(qrc_*.cpp) RESOURCES += c2blib.qrc INCLUDEPATH += . QT = core network greaterThan(QT_VERSION, 6){ QT += core5compat } win32 { TARGET = ../../c2b } else { TARGET = ../c2b } CONFIG -= dll CONFIG += staticlib VERSION = 0.0.0 TEMPLATE = lib QMAKE_CXXFLAGS_DEBUG += -DC2B_DEBUG !use_lzsse : !use_lz4 : !use_lzo : !use_qt_zlib { CONFIG += use_lz4 } use_lzsse { message(cb2Bib will be linked against LZSSE library) DEFINES += C2B_USE_LZSSE SOURCES += ./lzsse4/lzsse4.cpp INCLUDEPATH += ./lzsse4 } use_lz4 { message(cb2Bib will be linked against LZ4 library) DEFINES += C2B_USE_LZ4 } use_lzo { message(cb2Bib will be linked against LZO library) DEFINES += C2B_USE_LZO } use_qt_zlib { message(cb2Bib will be linked against Qt ZLIB library) DEFINES += C2B_USE_ZLIB } use_avx2 { QMAKE_CXXFLAGS += -mavx2 } ��������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/documentContents.h��������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016661� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.794761279 29 atime=1762812827.99875967 30 ctime=1762812827.798761247 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/documentContents.h�������������������������������������������������������������0000644�0001750�0000144�00000004172�15104461633�020657� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef DOCUMENTCONTENTS_H #define DOCUMENTCONTENTS_H #include "cb2bib_utilities.h" #include <QHash> #include <QString> class documentContents { public: enum Type { Simplified, Complete }; inline const QString& signature() const { if (!_is_signature_loaded) { _signature = c2bUtils::byteArrayToString(_cache.value(_signature_key)); _is_signature_loaded = true; } return _signature; } inline const QString& text() const { if (!_is_text_loaded) { if (_type == Simplified) _text = c2bUtils::toAscii(c2bUtils::decompressString(_cache.value(_text_key)), c2bUtils::KeepWords); else _text = c2bUtils::decompressString(_cache.value(_text_key)); _is_text_loaded = true; } return _text; } private: inline explicit documentContents(const QHash<QString, QByteArray>& cache) : _type(Complete), _cache(cache), _is_signature_loaded(false), _is_text_loaded(false) {} inline ~documentContents() {} inline void clear() { _is_signature_loaded = false; _is_text_loaded = false; _signature.clear(); _signature_key.clear(); _text.clear(); _text_key.clear(); } inline void preload(const QString& skey, const QString& tkey, const Type type) { clear(); _signature_key = skey; _text_key = tkey; _type = type; } QString _signature_key; QString _text_key; Type _type; const QHash<QString, QByteArray>& _cache; mutable QString _signature; mutable QString _text; mutable bool _is_signature_loaded; mutable bool _is_text_loaded; friend class documentCache; }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/collectionAnalyzer.h������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�017166� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.774761437 29 atime=1762812827.99875967 30 ctime=1762812827.774761437 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/collectionAnalyzer.h�����������������������������������������������������������0000644�0001750�0000144�00000005111�15104461633�021156� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef COLLECTIONANALYZER_H #define COLLECTIONANALYZER_H #include <QStringList> #include <QVarLengthArray> class settings; class collectionAnalyzer { public: collectionAnalyzer(); inline ~collectionAnalyzer() {} void reload(); void setDocumentKeywords(const QString& documentfn); void setKeywordDocuments(const QString& keyword); void setSimilarDocuments(const QString& documentfn); void skipSimilarDocument(const int i); inline int similarCount() const { return _nsimilar; } inline const QString& similar(const int i) const { return _documents[_similar[i]]; } inline const QVarLengthArray<double>& similarity() const { return _similarity; } inline double similarity(const int i) const { return _similarity[i]; } inline int sentenceCount() const { return _sentences.size(); } inline const QString& sentence(const int i) const { return _sentences[i]; } inline int keywordCount() const { return _document_keyword_ids.size(); } inline int keywordid(const int i) const { return _document_keyword_ids.at(i); } inline int documentCount() const { return _sdocuments.size(); } inline const QString& document(const int i) const { return _documents[_sdocuments[i]]; } private: int _document_id(const QString& documentfn) const; int _sentence_id(const QString& keyword) const; void grepDocuments(const QString& documentfn, QVector<int>* dsentences) const; void grepSentences(const QString& keyword, QVarLengthArray<int>* sdocuments) const; QList<int> _document_keyword_ids; QString _document_keyword; QString _documentsif_fn; QString _documentslf_fn; QString _keyword_document_fn; QString _sentencesif_fn; QString _sentenceslf_fn; QString _similar_document_fn; QVarLengthArray<QString> _documents; QVarLengthArray<QString> _sentences; QVarLengthArray<double> _similarity; QVarLengthArray<int> _sdocuments; QVarLengthArray<int> _similar; QVarLengthArray<ushort> _document_norms; int _ndocuments; int _nsentences; int _nsimilar; settings* _settingsP; }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/cb2bib_utilities.h��������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016543� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.770761468 29 atime=1762812827.99875967 30 ctime=1762812827.770761468 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/cb2bib_utilities.h�������������������������������������������������������������0000644�0001750�0000144�00000032772�15104461633�020550� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef CB2BIB_UTILITIES_H #define CB2BIB_UTILITIES_H #include "PORTING_TO_QT_6.h" #include <QDir> #include <QFile> #include <QFileInfo> #include <QRegExp> #include <QString> #include <QtDebug> #ifdef C2B_TRACE_MEMORY #include <iostream> #include <sys/resource.h> #endif class txtmatcher; /** cb2Bib core utilities */ namespace c2bUtils { enum AsciiConversion { Cleanup, Collation, FromBibTeX, KeepWords, Transliterate }; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) inline int count(const QString& str, const QRegExp& re) { return re.countIn(str); } inline void remove(QString& str, const QRegExp& re) { const QString s(str); str = re.removeIn(s); } inline QString removed(const QString& str, const QRegExp& re) { return re.removeIn(str); } inline void replace(QString& str, const QRegExp& re, const QString& after) { const QString s(str); str = re.replaceIn(s, after); } inline QString replaced(const QString& str, const QRegExp& re, const QString& after) { return re.replaceIn(str, after); } inline QStringList split(const QString& str, const QRegExp& re, Qt::SplitBehavior behavior) { return re.splitString(str, behavior); } #else inline int count(const QString& str, const QRegExp& re) { return str.count(re); } inline void remove(QString& str, const QRegExp& re) { str.remove(re); } inline QString removed(const QString& str, const QRegExp& re) { QString s(str); return s.remove(re); } inline void replace(QString& str, const QRegExp& re, const QString& after) { str.replace(re, after); } inline QString replaced(const QString& str, const QRegExp& re, const QString& after) { QString s(str); return s.replace(re, after); } #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) inline QStringList split(const QString& str, const QRegExp& re, Qt::SplitBehavior behavior) { return str.split(re, behavior); } #else inline QStringList split(const QString& str, const QRegExp& re, QString::SplitBehavior behavior) { return str.split(re, behavior); } #endif #endif extern QString setCapitalization(const QString& str); extern QString toAscii(const QString& str, const AsciiConversion type); extern QString& bibToC2b(QString& str); extern QString& c2bToBib(QString& str); extern QString& fillString(QString& str, const QRegExp& pattern, const QChar& ch); extern QString& fillString(QString& str, const QRegularExpression& pattern, const QChar& ch); extern QString& fillString(QString& str, const QString& pattern, const QChar& ch); extern QString& fillString(QString& str, const QStringMatcher& pattern, const QChar& ch); extern QString& fillString(QString& str, const txtmatcher& pattern, const QChar& ch); extern QString& fullBibToC2b(QString& str); extern QString& simplifyString(QString& str); extern QString& stripDiacritics(QString& str); extern const QRegExp nonAsciiLetter; extern const QRegExp nonLetter; extern const QString arxivUrl; extern const QString metadatasection; extern const QString pubmedUrl; inline QString& cleanEquations(QString& str) { // Simplify equations const QChar eq('$'); int i(str.indexOf(eq)); if (i == -1) return str; const QChar ob('{'); const QChar cb('}'); const QChar ca('^'); const QChar sl('\\'); const QChar us('_'); const int n(str.length()); int p(i); while (i < n) { if (str.at(i) == eq) { bool has_eq(false); for (int j = i + 1; j < std::min(i + 70, n); ++j) // Set a max equation length if (str.at(j) == eq) { has_eq = true; for (int k = i + 1; k < j; ++k) { const QChar& ck = str.at(k); if (ck != us && ck != ca && ck != sl && ck != ob && ck != cb) str[p++] = str.at(k); } i = j; break; } if (!has_eq) str[p++] = str.at(i); } else str[p++] = str.at(i); ++i; } str.chop(n - p); return str; } inline QString& cleanTitle(QString& title, const bool clean_period = false) { // Remove TeX braces and equation $ cleanEquations(title); title.remove(QLatin1Char('{')); title.remove(QLatin1Char('}')); title = title.trimmed(); if (clean_period && title.length() > 0) if (title[title.length() - 1] == QLatin1Char('.')) title.chop(1); return title; } inline QString toHtmlString(QString str) { // Encode some symbols to HTML for proper browser display str.replace(QLatin1Char('<'), QLatin1String("<")); str.replace(QLatin1Char('>'), QLatin1String(">")); str.replace(QLatin1Char('%'), QLatin1String("%")); replace(str, QRegExp("_\\{([^\\}]*)\\}"), "<sub>\\1</sub>"); replace(str, QRegExp("\\^\\{([^\\}]*)\\}"), "<sup>\\1</sup>"); cleanEquations(str); return str; } inline QString firstPage(QString pages) { simplifyString(pages); return removed(pages, QRegExp("[\\s\\-].*$")); } inline bool isLowerCaseString(const QString& str, const int pos0 = 0, int posn = -1) { if (str.isEmpty()) return false; if (posn < 0) posn = str.length(); for (int i = pos0; i < posn; ++i) if (str.at(i).isLetter()) if (str.at(i).category() == QChar::Letter_Uppercase) return false; return true; } inline bool isUpperCaseString(const QString& str, const int pos0 = 0, int posn = -1) { if (str.isEmpty()) return false; if (posn < 0) posn = str.length(); for (int i = pos0; i < posn; ++i) if (str.at(i).isLetter()) if (str.at(i).category() == QChar::Letter_Lowercase) return false; return true; } /** Gives a document absolute, full path-name */ inline QString documentAbsoluteName(const bool bibtexrelative, const QString& bibtexfn, const QString& docdir, const QString& docfn) { QString name; if (bibtexrelative) { // The bibtexfn might be relative in USB mode, calling absolutePath will restore its fullname. QDir ddir(QFileInfo(bibtexfn).absolutePath()); // When bibtexrelative, should only be relative to bibtexfn, (safely) disregard if it is absolute. if (QDir(docdir).isRelative()) name = ddir.absolutePath() + QLatin1Char('/') + docdir + QLatin1Char('/') + QFileInfo(docfn).fileName(); else name = ddir.absolutePath() + QLatin1Char('/') + QFileInfo(docfn).fileName(); } else // The docdir should be absolute here, whether or not working in USB mode. If it was relative, // this will set it with respect the application directory. name = QDir(docdir).absolutePath() + QLatin1Char('/') + QFileInfo(docfn).fileName(); return QDir::toNativeSeparators(QDir::cleanPath(name)); } /** Gives a document filename, as it will be written to BibTeX file tag */ inline QString documentFilename(const bool bibtexrelative, const QString& bibtexfn, const QString& docdir, const QString& docfn) { QString name; if (bibtexrelative) { QDir ddir(QFileInfo(bibtexfn).absolutePath()); if (QDir(docdir).isRelative()) name = ddir.absolutePath() + QLatin1Char('/') + docdir + QLatin1Char('/') + QFileInfo(docfn).fileName(); else name = ddir.absolutePath() + QLatin1Char('/') + QFileInfo(docfn).fileName(); name = ddir.relativeFilePath(name); } else name = QDir(docdir).absolutePath() + QLatin1Char('/') + QFileInfo(docfn).fileName(); return QDir::toNativeSeparators(QDir::cleanPath(name)); } /** Gives a document path as it will be written to BibTeX file tag */ inline QString documentDirName(const bool bibtexrelative, const QString& bibtexfn, const QString& docdir) { QString name; if (bibtexrelative) { QDir ddir(QFileInfo(bibtexfn).absolutePath()); if (QDir(docdir).isRelative()) name = ddir.absolutePath() + QLatin1Char('/') + docdir; else name = docdir + QLatin1Char('/'); name = ddir.relativeFilePath(name); } else name = QDir(docdir).absolutePath(); name = QDir::toNativeSeparators(QDir::cleanPath(name)); return name; } inline QString fileToString(const QString& fn, bool delete_on_close = false) { if (fn.isEmpty()) return QString(); QFile f(fn); if (f.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream stream(&f); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); const QString contents(stream.readAll()); if (delete_on_close) f.remove(); else f.close(); return contents; } else return QString(); } inline bool stringToFile(const QString& str, const QString& fn) { if (fn.isEmpty()) return false; QFile f(fn); if (f.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream stream(&f); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); stream << str; f.close(); return true; } else return false; } inline QStringList filesInDir(const QString& dir, const QStringList& filters) { QStringList files; QFileInfo fi(dir); if (!fi.exists()) return files; if (fi.isDir()) { QDir d(dir); const QFileInfoList dil(d.entryInfoList(filters)); for (int i = 0; i < dil.count(); ++i) files.append(QDir::toNativeSeparators(QDir::cleanPath(dil.at(i).absoluteFilePath()))); } else if (fi.isFile()) files.append(QDir::toNativeSeparators(QDir::cleanPath(fi.absoluteFilePath()))); return files; } inline int nearInteger(double a) { int ia = int(a); a = a - double(ia); if (a >= 0.5) ia++; else if (a <= -0.5) ia--; return ia; } inline bool inBraces(const int pos, const QString& str, QString* in) { if (str.at(pos - 1) == QLatin1Char('{')) // pos > 0 always { int open_braces(1); const QChar open('{'); const QChar close('}'); for (int i = pos; i < str.length(); ++i) { if (str.at(i) < open) continue; const QChar& si(str.at(i)); if (si == open) open_braces++; else if (si == close) open_braces--; if (open_braces == 0) { *in = str.mid(pos, i - pos); return true; } } } else // in Quotes { const QChar quote('"'); const QChar comma(','); for (int i = pos; i < str.length() - 1; ++i) if (str.at(i) == quote) if (str.at(i + 1) == comma) { *in = str.mid(pos, i - pos); return true; } } return false; } inline bool patternLengthMoreThan(const QRegExp& s1, const QRegExp& s2) { return s1.pattern().length() > s2.pattern().length(); } inline QString fromQtXmlString(QString str) { // Workaround (It will be fixed in Qt 4.5) // Escape toXmlString already done by ExifTool str.replace(QLatin1String("%%#39;"), QLatin1String("'")); str.replace(QLatin1String("%%amp;"), QLatin1String("&")); str.replace(QLatin1String("%%gt;"), QLatin1String(">")); str.replace(QLatin1String("%%lt;"), QLatin1String("<")); str.replace(QLatin1String("%%quot;"), QLatin1String("\"")); return str; } inline QString toQtXmlString(QString str) { // Workaround (It will be fixed in Qt 4.5) // Escape toXmlString already done by ExifTool str.replace(QLatin1String("'"), QLatin1String("%%#39;")); str.replace(QLatin1String("&"), QLatin1String("%%amp;")); str.replace(QLatin1String(">"), QLatin1String("%%gt;")); str.replace(QLatin1String("<"), QLatin1String("%%lt;")); str.replace(QLatin1String("""), QLatin1String("%%quot;")); return str; } #ifdef C2B_TRACE_MEMORY inline void print_maximum_resident_set_size() { rusage usage; if (getrusage(RUSAGE_SELF, &usage) == 0) std::cerr << "[cb2bib] maxrss: " << usage.ru_maxrss << std::endl; } #endif inline void warn(const QString& ms) { qWarning("[cb2bib] %s.", (const char*)ms.toLatin1()); } inline void debug(const QString& #ifdef C2B_DEBUG debug_ms #endif ) { #ifdef C2B_DEBUG qDebug() << "[cb2bib] " << debug_ms; #endif } inline QByteArray stringToByteArray(const QString& s) { return QByteArray(reinterpret_cast<const char*>(s.unicode()), s.size() * sizeof(ushort)); } inline QString byteArrayToString(const QByteArray& ba) { return QString(reinterpret_cast<const QChar*>(ba.constData()), ba.size() / sizeof(ushort)); } extern QString fromUtf8(const QByteArray& ba); extern QByteArray compressString(const QString& decompressed); extern QString decompressString(const QByteArray& compressed); } // namespace c2bUtils #endif ������cb2bib-2.0.3/src/c2b/PaxHeaders/texToHtml.cpp�������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015611� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.730761783 30 atime=1762812828.038759355 30 ctime=1762812827.730761783 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/texToHtml.cpp������������������������������������������������������������������0000644�0001750�0000144�00000033315�15104461633�017607� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "texToHtml.h" #include "cb2bib_parameters.h" #include "settings.h" #include <QUrl> texToHtml::texToHtml() : texParser() { _macro_arguments_rx = QRegExp("\\}\\s*\\[\\s*(\\d+)\\s*\\]\\s*\\{"); _named_extern_url_rx = QRegExp("_((?:file|http|https|ftp)://(?:[^\\s\\n\\r\\[]+))\\[([^\\]]*)\\]"); _named_url_rx = QRegExp("\\b((?:file|http|https|ftp)://(?:[^\\s\\n\\r\\[]+))\\[([^\\]]*)\\]"); _extern_url_rx = QRegExp("_((?:file|http|https|ftp)(?!.+\">)://(?:[^\\s\\n\\r\\[]+))(\\.[\\s\\n\\r]){0,1}"); _url_rx = QRegExp("\\b((?:file|http|https|ftp)(?!.+\">)://(?:[^\\s\\n\\r\\[]+))(\\.[\\s\\n\\r]){0,1}"); _close_subsection = false; _close_subsubsection = false; _make_index = false; _use_mathjax_rendering = false; _use_relative_links = false; _index_anchors = 0; _settingsP = settings::instance(); } void texToHtml::toHtml(const QString& tex, const QString& fn) { _html_filename = fn; c2bUtils::stringToFile(toHtml(tex), fn); } QString texToHtml::toHtml(const QString& tex) { _bibtex_directory.clear(); _cites.clear(); _close_subsection = false; _close_subsubsection = false; _html.clear(); _index = "<ul>\n"; _index_anchors = 0; _make_index = false; _use_mathjax_rendering = false; _references.clear(); _tex_macro_names_rx.clear(); _tex_macros.clear(); _title.clear(); _use_relative_links = _settingsP->value("c2bAnnote/UseRelativeLinks").toBool(); if (_html_filename.isEmpty()) _use_relative_links = false; else _current_dir = QDir(QFileInfo(_html_filename).absolutePath()); QString tex2html(c2bUtils::fileToString(":/htm/htm/tex2html.html")); QString mathjax_head(c2bUtils::fileToString(_settingsP->fileName("c2bAnnote/MathJaxHeaderFile")).trimmed()); if (!mathjax_head.isEmpty()) _use_mathjax_rendering = true; parse(tex); if (_close_subsubsection) _index += "</ul></li>\n"; if (_close_subsection) _index += "</ul></li>\n"; _index += "</ul>"; if (_use_mathjax_rendering) { if (!_tex_macros.isEmpty()) { QString t("\n\n<script type=\"text/x-mathjax-config\">\n MathJax.Hub.Config({\n TeX: {\n Macros: " "{%1\n }\n }\n });\n</script>\n"); mathjax_head += t.arg(_tex_macros); } tex2html.replace("GET_MATHJAX_HEAD", mathjax_head); } else tex2html.remove("GET_MATHJAX_HEAD"); if (_settingsP->value("c2bAnnote/IncludeCSS").toBool()) { QString css(c2bUtils::fileToString(_settingsP->fileName("c2bAnnote/AnnoteCssFile")).trimmed()); if (css.isEmpty()) css = c2bUtils::fileToString(":/htm/htm/tex2html.css"); tex2html.replace("GET_CSS", "<style type=\"text/css\">\n" + css.trimmed() + "\n</style>\n"); } else { QString cssfn(_settingsP->fileName("c2bAnnote/AnnoteCssFile")); if (cssfn.isEmpty()) tex2html.remove("GET_CSS"); else { if (_use_relative_links) cssfn = _current_dir.relativeFilePath(cssfn); tex2html.replace("GET_CSS", "\n <link href=\"" + cssfn + "\" rel=\"stylesheet\" type=\"text/css\"/>\n"); } } tex2html.replace("GET_TITLE", _title); retrieveReferences(); QString reference_list_html; referencesToHtml(&reference_list_html); tex2html.replace("GET_REFERENCES", reference_list_html); citesToHtml(&_html); if (_make_index && _index_anchors > 1) { _index = c2bUtils::fileToString(":/htm/htm/tex2html_index.html").arg(_index); tex2html.replace("GET_INDEX", _index); } else tex2html.remove("GET_INDEX"); tex2html.replace("GET_HTML", _html); tex2html.replace("GET_CB2BIB_VERSION_NUMBER", C2B_VERSION); _html_filename.clear(); return tex2html; } void texToHtml::parseElement(const QString& p, const QString& e, const QString& v) { if (e == "section") { const QString sv(toHtmlString(v)); ++_index_anchors; _html += QString("\n<h1><a id=\"sect%1\"></a>%2</h1>\n\n").arg(_index_anchors).arg(sv); if (_close_subsubsection) _index += "</ul></li>\n"; if (_close_subsection) _index += "</ul></li>\n"; _index += QString("<li><a href=\"#sect%1\">%2</a></li>\n").arg(_index_anchors).arg(sv); _close_subsubsection = false; _close_subsection = false; } else if (e == "subsection") { const QString sv(toHtmlString(v)); ++_index_anchors; _html += QString("\n<h2><a id=\"sect%1\"></a>%2</h2>\n\n").arg(_index_anchors).arg(sv); if (_close_subsubsection) _index += "</ul></li>\n"; if (!_close_subsection) _index += "<li style=\"list-style: none\"><ul>\n"; _index += QString("<li><a href=\"#sect%1\">%2</a></li>\n").arg(_index_anchors).arg(sv); _close_subsubsection = false; _close_subsection = true; } else if (e == "subsubsection") { const QString sv(toHtmlString(v)); ++_index_anchors; _html += QString("\n<h3><a id=\"sect%1\"></a>%2</h3>\n\n").arg(_index_anchors).arg(sv); if (!_close_subsubsection) _index += "<li style=\"list-style: none\"><ul>\n"; _index += QString("<li><a href=\"#sect%1\">%2</a></li>\n").arg(_index_anchors).arg(sv); _close_subsubsection = true; } else if (e == "title") _title = toHtmlString(v); else if (e == "itemize") { const QStringList items(v.trimmed().split("\\item ", _QT_6_SkipEmptyParts)); for (int i = 0; i < items.count(); ++i) parseTextParagraph("- " + items.at(i).simplified()); } else if (e == "abstract") _html += QString("\n<div id=\"abstract\" class=\"abstract\">\n%1\n</div><br /><hr />\n\n") .arg(toHtmlString(v.trimmed(), false)); else if (e == "verbatim") _html += QString("\n<pre>%1</pre>\n\n").arg(v); else if (e == "newcommand") extractMacro(v); else _html += QString("\n<div>\n%1\n</div>\n\n").arg(p); } void texToHtml::parseComment(const QString& p) { if (p.startsWith("%\\c2b_bibtex_directory{")) c2bUtils::inBraces(p.indexOf('{') + 1, p, &_bibtex_directory); else if (p == "%\\c2b_makeindex") _make_index = true; } void texToHtml::parseTextParagraph(const QString& p) { extractCites(p); QString pstr(toHtmlString(p, false)); urlToHtml(&pstr); if (p.startsWith("- ")) _html += QString("\n<ul><li>%1</li></ul>\n\n").arg(pstr.mid(2)); else _html += QString("\n<p>%1</p>\n\n").arg(pstr); } void texToHtml::extractMacro(const QString& v) { QString name; if (!c2bUtils::inBraces(1, v, &name)) return; // Substitution '\macro' -> '$\macro[args]$'. MathJax will not process macros outside equation environments. _tex_macro_names_rx.append(QRegExp("(\\" + name + "\\S*)")); // To minimize clashes, the replacement must be performed from longest to shortest names. // Sort now, even if this needs multiple sortings. This way, substitutions can be done while parsing. std::sort(_tex_macro_names_rx.begin(), _tex_macro_names_rx.end(), c2bUtils::patternLengthMoreThan); QString definition; for (int i = name.length() + 2; i < v.length(); ++i) if (v.at(i) == '{') { if (c2bUtils::inBraces(i + 1, v, &definition)) break; else return; } if (definition.isEmpty()) return; name.remove("\\"); definition.remove("\\ensuremath"); definition.replace("\\", "\\\\"); if (_macro_arguments_rx.indexIn(v) > -1) _tex_macros += QString("\n %1: ['%2',%3],").arg(name, definition, _macro_arguments_rx.cap(1)); else _tex_macros += QString("\n %1: '%2',").arg(name, definition); } void texToHtml::extractCites(const QString& p) { int pos(p.indexOf("\\cite{", 0)); while (pos >= 0) { QString cites; if (c2bUtils::inBraces(pos + 6, p, &cites)) { const QStringList cite(cites.split(',', _QT_6_SkipEmptyParts)); for (int i = 0; i < cite.count(); ++i) { const QString c(cite.at(i).trimmed()); if (!_cites.contains(c)) _cites.insert(c, -(1 + _cites.count())); } } pos = p.indexOf("\\cite{", pos + 6); } } void texToHtml::citesToHtml(QString* html) { QString key("\\b%1\\b"); QHash<QString, bibReference>::const_iterator i = _references.constBegin(); while (i != _references.constEnd()) { const QString k(i.key()); c2bUtils::replace(*html, QRegExp(key.arg(k)), QString("<a href=\"#%1\">%2</a>").arg(k).arg(_cites.value(k))); ++i; } c2bUtils::replace(*html, QRegExp("\\\\cite\\{([^\\{]+)\\}"), "<span class=\"citations\">[\\1]</span>"); } /** Retrieve references from BibTeX files directory */ void texToHtml::retrieveReferences() { if (_bibtex_directory.isEmpty()) _bibtex_directory = QFileInfo(_settingsP->fileName("cb2Bib/BibTeXFile")).path(); const QStringList flist(c2bUtils::filesInDir(_bibtex_directory, QStringList() << "*.bib")); const QStringList keys(_cites.keys()); QStringList fields; fields.append("author"); fields.append("booktitle"); fields.append("doi"); fields.append("editor"); fields.append("file"); fields.append("journal"); fields.append("pages"); fields.append("title"); fields.append("url"); fields.append("volume"); fields.append("year"); bibReference ref; _cbp.initReferenceParsing(_bibtex_directory + '/', fields, &ref); bool done(false); for (int i = 0; i < flist.count(); ++i) { if (done) return; const QString bib_contents(c2bUtils::fileToString(flist.at(i))); done = true; for (int j = 0; j < keys.count(); ++j) { if (_cites.value(keys.at(j)) > 0) continue; done = false; const QString key(keys.at(j)); if (_cbp.referenceAtKey(key, bib_contents, &ref)) { _references.insert(key, ref); _cites[key] = -_cites[key]; } } } } void texToHtml::referencesToHtml(QString* reference_list_html) { reference_list_html->clear(); if (_references.count() == 0) return; QStringList keys(_references.keys()); QMap<int, QString> ordering; for (int i = 0; i < keys.count(); ++i) ordering.insert(_cites.value(keys.at(i)), keys.at(i)); keys = ordering.values(); const QString reference_item_html(c2bUtils::fileToString(":/htm/htm/reference_item.html")); const QRegExp nonletters("[^\\w\\s-]"); QString references; for (int i = 0; i < keys.count(); ++i) { const bibReference& ref = _references.value(keys.at(i)); QString author(ref.anyAuthor()); if (!author.isEmpty()) { author = _cbp.authorFromBibTeX(author); c2bUtils::remove(author, nonletters); author.replace(" and ", ", "); c2bUtils::simplifyString(author); author += '.'; } QString title(ref.anyTitle()); c2bUtils::cleanTitle(title, true); // Do not percent encode file (some browsers dont like encoded local files) and url // (it might already be, if needed, decode prior to encode) const QString doi(ref.value("doi")); const QString file(ref.value("file")); const QString url(ref.value("url")); QString link; if (!file.isEmpty()) { if (_use_relative_links) link = QDir::cleanPath(_current_dir.relativeFilePath(file)); else link = QDir::cleanPath(file); } else if (!url.isEmpty()) link = url; else if (!doi.isEmpty()) { if (doi.startsWith("http")) link = doi; else link = "https://dx.doi.org/" + QUrl::toPercentEncoding(doi); } const QString journal(ref.anyJournal()); const QString volume(ref.value("volume")); QString pages(ref.value("pages")); if (!pages.isEmpty()) { if (!volume.isEmpty()) pages = ", " + pages.remove(' '); else pages = ' ' + pages.remove(' '); } QString year(ref.value("year")); if (!year.isEmpty()) year = '(' + year + ")."; QString item(reference_item_html); item.replace("GET_REFERENCE_ANCHOR_ID", ref.citeidName); item.replace("GET_REFERENCE_ANCHOR_NAME", ref.citeidName); item.replace("GET_REFERENCE_AUTHOR", author); if (link.isEmpty()) item.remove("href=\"GET_REFERENCE_LINK\""); else item.replace("GET_REFERENCE_LINK", link); item.replace("GET_REFERENCE_PAGES", pages); item.replace("GET_REFERENCE_SOURCE", journal); item.replace("GET_REFERENCE_TITLE", c2bUtils::toHtmlString(title)); item.replace("GET_REFERENCE_VOLUME", volume); item.replace("GET_REFERENCE_YEAR", year); references += item; // Update _cites values according to this list _cites[keys.at(i)] = i + 1; } *reference_list_html = c2bUtils::fileToString(":/htm/htm/reference_list.html"); reference_list_html->replace("GET_REFERENCES", references); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/settings.h����������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015166� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.834760963 30 atime=1762812828.038759355 30 ctime=1762812827.838760932 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/settings.h���������������������������������������������������������������������0000644�0001750�0000144�00000010564�15104461633�017165� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef SETTINGS_H #define SETTINGS_H #include "cb2bib_parameters.h" #include <QDir> #include <QSettings> #include <QStringList> class QCoreApplication; class settings : public QSettings { Q_OBJECT public: explicit settings(QObject* parento = 0); virtual ~settings(); // Command line data. (Set public for easiest access. Only settings or derived classes should modify it) QString cl_annote_filename; QString cl_extract_output_filename; QString cl_import_filename; QString cl_index_dirname; QStringList cl_bibedit_filenames; QStringList cl_citer_filenames; QStringList cl_extract_input_filenames; bool cl_bibedit; bool cl_cb2bib_import_mode; bool cl_cb2bib_information; bool cl_cb2bib_mode; bool cl_cb2bib_tests; bool cl_citer; bool cl_configure; bool cl_console_mode; bool cl_doc2bib; bool cl_html_annote; bool cl_import; bool cl_index; bool cl_sloppy; bool cl_txt2bib; bool cl_user_configured; bool cl_view_annote; // Get/Set filenames according to settings // PdfDirectory is a particular case. If relative, it is relative to the BibTeX file inline QString fileName(const QString& key) const { if (_is_usb_configured_mode) { const QString v(value(key).toString()); if (key == "cb2Bib/PdfDirectory") if (value("cb2Bib/RelativePdfDirectory").toBool()) return QDir::toNativeSeparators(QDir::cleanPath(v)); if (key.endsWith("Bin")) // Pathless binary to be found on PATH if (!(v.contains('/') || v.contains('\\'))) return v; return QDir::toNativeSeparators(QDir::cleanPath(_c2bAppDir.absoluteFilePath(v))); } else return QDir::toNativeSeparators(QDir::cleanPath(value(key).toString())); } inline void setFilename(const QString& key, const QString& fn) { if (_is_usb_configured_mode) { if (key == "cb2Bib/PdfDirectory") { if (value("cb2Bib/RelativePdfDirectory").toBool()) { setValue(key, fn); return; } } setValue(key, _c2bAppDir.relativeFilePath(fn)); } else setValue(key, fn); } inline bool loaded() const { return _is_loaded; } inline bool isUsbConfiguredMode() const { return _is_usb_configured_mode; } inline QStringList confCommandFlags() const { return _conf_command_flags; } inline QString tempPath() const { return _tmp_dir_path; } inline QString applicationPid() const { return _application_pid; } void setDefaultValue(const QString& key, const QVariant& defaulValue); QString applicationDataDir() const; static bool isConsoleCheckMode(const int argc, char** argv); static bool isConsoleMode(const int argc, char** argv); static bool isSingleApplicationMode(const int argc, char** argv); static settings* instance() { Q_ASSERT_X(_c2b_global_settings, "settings", "settings was not instantiated"); return _c2b_global_settings; } protected: settings(const QString& organization, const QString& application, QObject* parento = 0); explicit settings(const QString& fn, QObject* parento = 0); // init() has a virtual method, keep it out of the constructor void init(bool command_line = true); static bool isConfiguredMode(); static const QString configuredFilename(); virtual QString decodeFilename(const QString& fn) const; private: QCoreApplication* _c2bApp; QDir _c2bAppDir; QString _application_pid; QString _tmp_dir_path; QStringList _conf_command_flags; bool _is_loaded; bool _is_usb_configured_mode; static settings* _c2b_global_settings; void _init(); void checkCommand(bool* action, int* actions); void printUsage(); void readCommandLine(); void setDefaults(); }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/bibSearcher.cpp�����������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016071� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.662762319 29 atime=1762812827.99875967 30 ctime=1762812827.662762319 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/bibSearcher.cpp����������������������������������������������������������������0000644�0001750�0000144�00000060610�15104461633�020066� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bibSearcher.h" #include "bibParser.h" #include "settings.h" #include <QCoreApplication> /** \page bibsearch Search BibTeX and PDF Document Files \section searchfunct Search Functionality - <b>Search pattern</b> \n Patterns and composite patterns can be either \htmlonly <a href="https://arxiv.org/abs/0705.0751" target="_blank">approximate strings</a>, \endhtmlonly strings, contexts, regular expressions, or wildcard filters. Patterns admit Unicode characters. The scope of each pattern can be the reference as a whole or be focused on a particular reference field. The fields <tt>year</tt>, <tt>file</tt>, and <tt>journal</tt> are treated specifically. The field <tt>year</tt> has the qualifiers <tt>Exact</tt>, <tt>Newer</tt>, and <tt>Older</tt>. The field <tt>file</tt> can optionally refer to either the filename or the contents of such a file. Finally, for <tt>journal</tt>, the input pattern is duplicated to the, if available, journal fullname, and they two are checked against the <tt>journal</tt> actual field contents and, if available, its expanded contents. For example, typing 'ijqc' retrieves all references with <tt>journal</tt> being 'Int. J. Quantum Chem.'. Or, typing 'chemistry' retrieves any of 'J. Math. Chem.', 'J. Phys. Chem.', etc. This expansion is not performed when the pattern scope is set to <tt>all</tt>. - <b>Search scope</b> \n By default, searches are performed on the current BibTeX output file. If <b>Scan all BibTeX files</b> is checked the search will extend to all BibTeX files, extension .bib, present in the current directory. It might be therefore convenient to group all reference files in one common directory, or have them linked to that directory. When <b>Scan linked documents</b> is checked, and one or more pattern scope is <tt>all</tt> or <tt>file</tt>, the contents of the file in <tt>file</tt> is converted to text and scanned for that given pattern. See \ref c2bconf_utilities section to configure the external to text converter. - <b>Search modifier</b> \n \htmlonly cb2Bib converts TeX encoded characters to Unicode when parsing the references. This permits, for instance, for the pattern 'Møller' to retrieve either 'Møller' or 'M{\o}ller', without regard to how the BibTeX reference is written. By checking <b>Simplify source</b>, the reference and the converted PDF files are simplified to plain ASCII. In this way, the pattern '\bMoller\b' will hit any of 'Møller', 'M{\o}ller', or 'Moller'. Additionally, all non-word characters are removed, preserving only the ASCII, word structure of the source. Note that source simplification is only performed for the patterns whose scope is <tt>all</tt> or <tt>file</tt> contents, and that and so far, cb2Bib has only a subset of such conversions. Implemented TeX to Unicode conversions can be easily checked by entering a reference. The Unicode to ASCII letter-only conversion, on the other hand, is the one that cb2Bib also uses to write the reference IDs and, hence, the renaming of dropped files. cb2Bib can understand minor sub and superscript formatting. For instance, the pattern 'H2O' will retrieve 'H<sub>2</sub>O' from a BibTeX string <code>H$_{2}$O</code>. \endhtmlonly \section contextsearch Contextual Search A convenient way to retrieve documents is by matching a set of keywords appearing in a close proximity context, while disregarding the order in which the words might had been written. cb2Bib considers two types of contextual searches. One flexibilizes phrase matching only at the level of the constituting words. It is accessed by selecting <tt>Fixed string: Context</tt> in the pattern type box. The other one, in addition, stems the supplied keywords. It is accessed by selecting <tt>Context</tt>. By way of stemming, the keyword <i>analyze</i>, for example, will also match <i>analyse</i>, and <i>aluminum</i> will match <i>aluminium</i> too. The syntax for <tt>Context</tt> type patterns is summarized in the following table: \verbatim Operator Example Expansion space contextual search contextual AND search | contextual search|matching contextual AND (search|match) + contextual search|+matching contextual AND (search|\bmatching\b) _ contextual_search contextual.{0,25}search - non-parametric non.{0,1}parametr . non.parametric non.{0,1}parametr Diacritics and Greek letters: naïve search (naïve|naive) AND search kendall tau kendall AND (tau|τ) \endverbatim In the above examples, operator space <tt>AND</tt> means match words in any order. Operator <tt>_</tt> preserves word order, and operator <tt>+</tt> prevents stemming and forces exact word match. Operator <tt>-</tt> considers cases of words that might had been written either united, hyphenated, or space separated. Diacritics are expanded if the diacritic mark is specified. This is, <i>naive</i> will not match <i>naïve</i>. On the other hand, Greek letters are expanded only when typed by name. \section notes Notes - cb2Bib uses an internal cache to speed up the search of linked files. By default data is stored as <tt>current_file.bib.c2b</tt>. It might be more convenient, however, to setup a temporary directory out of the user data backup directories. See <b>Search In Files Cache Directory</b> in \ref c2bconf_files. When a linked file is processed for the first time, cb2Bib does several string manipulations, such as removing end of line hyphenations. This process is time consuming for very large files. - The <b>approximate string</b> search is described in reference \htmlonly <a href="https://arxiv.org/abs/0705.0751" target="_blank">https://arxiv.org/abs/0705.0751</a>. \endhtmlonly It reduces the chance of missing a hit due to transcription and decoding errors in the document files. Approximate string is also a form of serendipitous information retrieval. */ /** Top level driver for searching BibTeX files */ bibSearcher::bibSearcher(bibParser* bp, QObject* parento) : QObject(parento), _bpP(bp), _do_rank_results(true), _do_search_similar(false) { clear(); } /** Top level driver for searching BibTeX files. Specialized constructor for searching repeated or similar references. */ bibSearcher::bibSearcher(bibParser* bp, const QString& bib_dir, QObject* parento) : QObject(parento), _bpP(bp), _do_rank_results(false), _do_search_similar(true) { // Retrieve (any_author(context) AND any_title(approximate)) OR citeidName(exact) clear(); setSearchScope(bib_dir, bib_dir, true, false); setSimplifySource(false); setBoolean(true); addPattern(false, false, searchPattern::type(searchPattern::Context), QLatin1String("all"), QChar(), _bpP->currentReference().anyAuthor()); addPattern(false, false, searchPattern::type(searchPattern::ApproximateString), QLatin1String("all"), QChar(), _bpP->currentReference().anyTitle()); _do_search_similar_citeid = _bpP->currentReference().citeidName; if (_do_search_similar_citeid.isEmpty()) _do_search_similar_citeid = QLatin1Char('@'); } bibSearcher::bibSearcher() : _bpP(0), _do_rank_results(false), _do_search_similar(false) { clear(); } void bibSearcher::addPattern(bool Not, bool caseSensitive, const QString& patternType, const QString& scope, const QChar& yearScope, const QString& pattern) { if (pattern.trimmed().isEmpty()) return; _patterns.append(searchPattern(Not, caseSensitive, patternType, scope, yearScope, pattern)); if (!_scopes.contains(scope)) _scopes.append(scope); } void bibSearcher::exec() { if (_patterns.count() == 0 && !_do_search_similar) return; std::sort(_patterns.begin(), _patterns.end()); _include_documents = _include_documents && (_scopes.contains(QLatin1String("all")) || _scopes.contains(QLatin1String("file"))); if (_include_documents && !_scopes.contains(QLatin1String("file"))) _scopes.append(QLatin1String("file")); _scopes.removeAll(QLatin1String("all")); QString and_or; if (_boolean_and) and_or = QLatin1String(".AND."); else and_or = QLatin1String(".OR."); for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern = _patterns.at(i); _log_string += tr("% Pattern%1: %2%3\n").arg(i + 1).arg(and_or, pattern.toString()); } // Search In Files const QStringList flist(_all_bibtex_files ? c2bUtils::filesInDir(_bibtex_dir, QStringList() << "*.bib") : c2bUtils::filesInDir(_bibtex_file, QStringList() << "*.bib")); for (int i = 0; i < flist.count(); ++i) { search(flist.at(i)); if (_aborted) { clear(); _error_counter = -1; return; } } // Search Done _log_string += tr("% Scanned References: %1 BibTeX Files: %2 Linked Files: %3\n") .arg(_reference_counter) .arg(_bibtex_counter) .arg(_document_counter); if (_include_documents) _documents.unload(); if (_result_references.count() == 0) return; if (_do_rank_results) quadrupleSortDescending(&_result_scores, &_result_references, &_result_html_data, &_result_html_abstracts); _result_string = "\n\n" + _result_references.join("\n\n") + "\n\n"; _log_string += tr("% Total Unique Hits: %1\n").arg(_result_references.count()); #ifdef C2B_DEBUG_SEARCHING if (_result_scores.count() > 0) qDebug() << "Scores: " << _result_scores; #endif } QString bibSearcher::searchDocumentKeyword(const QString& bibtexfn, const QString& documentfn, const QString& keyword) { bibSearcher bs; QString exc; bs._documents.load(bibtexfn, documentContents::Complete); if (bs._documents.setCurrent(documentfn)) { QString p(keyword); c2bUtils::replace(p, QRegExp("\\W"), ".{0,5}"); p.replace("s", ".?"); p = "\\b" + p + "\\w*\\b"; bs.addPattern(false, false, searchPattern::type(searchPattern::RegularExpression), QLatin1String("all"), QChar(), p); QString document(bs._documents.current().text()); c2bUtils::stripDiacritics(document); if (bs._patterns.at(0).matches(document)) { exc = c2bUtils::fileToString(":/htm/htm/excerpts.html"); exc.replace("GET_EXCERPTS_TITLE", keyword); exc.replace("GET_EXCERPTS", bs.excerpts(document).mid(20)); } } bs._documents.unload(); return exc; } void bibSearcher::abort() { _aborted = true; } void bibSearcher::clear() { _aborted = false; _all_bibtex_files = false; _bibtex_counter = 0; _bibtex_dir.clear(); _bibtex_file.clear(); _boolean_and = true; _do_search_similar_citeid.clear(); _document_counter = 0; _error_counter = 0; _include_documents = false; _log_string = "% cb2Bib " + C2B_VERSION + " / BibTeX Search Log\n"; _patterns.clear(); _reference_counter = 0; _reference_match_counter = 0; _reference_score = double(0); _result_html_abstracts.clear(); _result_html_data.clear(); _result_references.clear(); _result_scores.clear(); _result_string.clear(); _scopes.clear(); _simplify_source = false; } void bibSearcher::search(const QString& bib_file) { _bibtex_counter++; QString bib_file_contents; QFile file(bib_file); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { _error_counter++; _log_string += tr("% [cb2bib] Unable to open the file %1 for reading. Error: '%2'.\n").arg(bib_file, file.errorString()); return; } QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); bib_file_contents = stream.readAll(); _log_string += tr("% Scanning file %1\n").arg(bib_file.trimmed()); if (_include_documents) { if (_simplify_source) _documents.load(bib_file, documentContents::Simplified); else _documents.load(bib_file, documentContents::Complete); } const int hits(_result_references.count()); bibReference ref; _bpP->initReferenceParsing(bib_file, _scopes, &ref); while (_bpP->referencesIn(bib_file_contents, &ref)) { _reference_counter++; if (_do_search_similar) searchSimilarReferences(bib_file, ref); else searchReference(bib_file, ref); QCoreApplication::processEvents(); if (_aborted) return; } _log_string += tr("% File %1. Hits: %2\n").arg(bib_file.trimmed()).arg(_result_references.count() - hits); } void bibSearcher::searchReference(const QString& bib_file, const bibReference& ref) { const bool include_document( _include_documents && _documents.setCurrent(ref.value(QLatin1String("file")), &_document_counter, &_log_string, &_error_counter)); // Initialize composite search bool hit(_boolean_and); // Composite search for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern(_patterns.at(i)); const searchPattern::modifiers& modifier(pattern.modifier()); bool ihit(false); if (modifier.scope == QLatin1String("year")) { int istr(ref.value(modifier.scope).toInt()); int jstr(modifier.string.toInt()); if (modifier.yearScope == QLatin1Char('=')) ihit = istr == jstr; else if (modifier.yearScope == QLatin1Char('>')) ihit = istr >= jstr; else if (modifier.yearScope == QLatin1Char('<')) ihit = istr <= jstr; } else if (modifier.scope == QLatin1String("all")) { if (_simplify_source) ihit = pattern.matches(c2bUtils::toAscii(ref.unicodeReference, c2bUtils::FromBibTeX)); else ihit = pattern.matches(ref.unicodeReference); if (!ihit) if (include_document) ihit = pattern.matches(_documents.current()); } else if (modifier.scope == QLatin1String("journal")) { const QString pattern_full(_bpP->fullJournal(modifier.string)); const QString j_orig(ref.value(modifier.scope)); const QString j_full(_bpP->fullJournal(j_orig)); ihit = j_full == pattern_full || pattern.matches(j_orig) || pattern.matches(j_full); } else if (modifier.scope == QLatin1String("file") && include_document) ihit = pattern.matches(_documents.current()); else ihit = pattern.matches(ref.value(modifier.scope)); if (modifier.NOT) ihit = !ihit; if (_boolean_and) { hit = hit && ihit; if (!hit) break; } else { hit = hit || ihit; if (hit) break; } } if (hit) if (!_result_references.contains(ref.rawReference)) { _result_references.append(ref.rawReference); _reference_score = double(0); _reference_match_counter = 0; if (_scopes.contains(QLatin1String("title"))) setTitleRank(ref.value(QLatin1String("title"))); else if (_scopes.contains(QLatin1String("booktitle"))) setTitleRank(ref.value(QLatin1String("booktitle"))); if (_scopes.contains(QLatin1String("abstract"))) _result_html_abstracts.append(highlight(ref.value(QLatin1String("abstract")))); else _result_html_abstracts.append(highlight(_bpP->singleReferenceField(QLatin1String("abstract"), ref))); if (include_document) _result_html_data.append(location(bib_file, ref) + excerpts(_documents.current().text())); else _result_html_data.append(location(bib_file, ref)); _result_scores.append(_reference_score); #if C2B_DEBUG_SCORER _debug_scorer_scores.append(_reference_score); _debug_scorer_occurrences.append(_reference_match_counter); _debug_scorer_documents.append(_bpP->singleReferenceField(QLatin1String("title"), ref)); #endif } } void bibSearcher::searchSimilarReferences(const QString& bib_file, const bibReference& ref) { if (ref.citeidName == _do_search_similar_citeid) { if (!_result_references.contains(ref.rawReference)) { _result_references.append(ref.rawReference); _result_html_data.append(location(bib_file, ref)); } return; } if (_patterns.count() == 0) return; // Initialize composite search bool hit(_boolean_and); // Composite search for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern(_patterns.at(i)); hit = hit && pattern.matches(ref.unicodeReference); if (!hit) break; } if (hit) if (!_result_references.contains(ref.rawReference)) { _result_references.append(ref.rawReference); _result_html_data.append(location(bib_file, ref)); } } void bibSearcher::setTitleRank(const QString& title) { if (!_do_rank_results || title.isEmpty()) return; for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern(_patterns.at(i)); const searchPattern::modifiers& modifier(pattern.modifier()); pattern.initializeScores(); if (modifier.NOT) continue; if (modifier.scope != QLatin1String("title") && modifier.scope != QLatin1String("booktitle")) continue; int pos(0); while (pos >= 0) { pos = pattern.indexIn(title, pos); if (pos > -1) { pattern.updateScore(pos); pos += pattern.advanceLength(); } } _reference_score += 10 * pattern.matchedScore(); } } QString bibSearcher::excerpts(const QString& contents) { const int max_excerpts(25); const int max_unmerged_excerpts(max_excerpts + 2500); QMap<int, int> exc_endpos; for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern(_patterns.at(i)); const searchPattern::modifiers& modifier(pattern.modifier()); pattern.initializeScores(); if (modifier.NOT) continue; if (modifier.scope != QLatin1String("all") && modifier.scope != QLatin1String("file")) continue; int n_excerpts(0); int pos(0); while (pos >= 0) { pos = pattern.indexIn(contents, pos); if (pos > -1) { if (++n_excerpts > max_unmerged_excerpts) break; if (_do_rank_results) pattern.updateScore(pos); exc_endpos.insert(pos, std::max(pos + pattern.matchedLength(), exc_endpos.value(pos))); pos += pattern.advanceLength(); } } if (_do_rank_results) { _reference_score += pattern.matchedScore(); _reference_match_counter = pattern.matchedCounter(); } } if (exc_endpos.isEmpty()) return QString(); // Merge QList<int> i_pos = exc_endpos.keys(); int pos0(i_pos.at(0)); for (int i = 1; i < i_pos.count(); ++i) { const int posi(i_pos.at(i)); if (exc_endpos.value(pos0) < posi) pos0 = posi; else { const int endposi(exc_endpos.value(posi)); exc_endpos.remove(posi); exc_endpos.insert(pos0, endposi); } } i_pos = exc_endpos.keys(); const int context_length(75); QString exc; QRegExp lead_truncated_words("^.*\\s(?=\\w)"); lead_truncated_words.setMinimal(true); QRegExp tail_truncated_words("\\W+\\w+\\W*$"); tail_truncated_words.setMinimal(true); bool item_begins(true); bool item_complete; const int items(std::min(int(i_pos.count()), max_excerpts)); for (int i = 0; i < items; ++i) { const int pos(i_pos.at(i)); const int length(exc_endpos.value(pos) - pos); const QString match(QLatin1String("<span>") + c2bUtils::toHtmlString(contents.mid(pos, length)) + QLatin1String("</span>")); if (item_begins) { QString pre_match(contents.mid(pos - context_length, context_length)); c2bUtils::remove(pre_match, lead_truncated_words); pre_match = c2bUtils::toHtmlString(pre_match); exc += QLatin1String("• ...") + pre_match + match; } else exc += match; if (i + 1 == items) item_complete = true; else item_complete = exc_endpos.value(pos) + (2 * context_length) < i_pos.at(i + 1); if (item_complete) { QString post_match(contents.mid(pos + length, context_length)); c2bUtils::remove(post_match, tail_truncated_words); post_match = c2bUtils::toHtmlString(post_match); exc += post_match + "... "; item_begins = true; } else { exc += contents.mid(pos + length, i_pos.at(i + 1) - pos - length); item_begins = false; } } exc = QLatin1String("</p><p id=\"excerpt\">") + exc; if (i_pos.count() >= max_excerpts) exc += tr("</p><p><b>Found more than %1 occurrences</b>.").arg(max_excerpts); return exc; } QString bibSearcher::highlight(const QString& abstract) { if (abstract.isEmpty()) return abstract; QMap<int, int> endpos; for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern(_patterns.at(i)); const searchPattern::modifiers& modifier(pattern.modifier()); pattern.initializeScores(); if (modifier.NOT) continue; if (modifier.scope != QLatin1String("all") && modifier.scope != QLatin1String("abstract")) continue; int pos(0); while (pos >= 0) { pos = pattern.indexIn(abstract, pos); if (pos > -1) { if (_do_rank_results) pattern.updateScore(pos); endpos.insert(pos, std::max(pos + pattern.matchedLength(), endpos.value(pos))); pos += pattern.advanceLength(); } } if (_do_rank_results) { _reference_score += pattern.matchedScore(); _reference_match_counter = pattern.matchedCounter(); } } if (endpos.isEmpty()) return c2bUtils::toHtmlString(abstract); // Merge QList<int> i_pos = endpos.keys(); int pos0(i_pos.at(0)); for (int i = 1; i < i_pos.count(); ++i) { const int posi(i_pos.at(i)); if (endpos.value(pos0) < posi) pos0 = posi; else { const int endposi(endpos.value(posi)); endpos.remove(posi); endpos.insert(pos0, endposi); } } i_pos = endpos.keys(); QString hla; int npos(0); for (int i = 0; i < i_pos.count(); ++i) { const int pos(i_pos.at(i)); const int length(endpos.value(pos) - pos); hla += c2bUtils::toHtmlString(abstract.mid(npos, pos - npos)) + QLatin1String("<span>") + c2bUtils::toHtmlString(abstract.mid(pos, length)) + QLatin1String("</span>"); npos = endpos.value(pos); } hla += c2bUtils::toHtmlString(abstract.mid(npos, abstract.length() - npos)); return hla; } QString bibSearcher::location(const QString& fn, const bibReference& ref) const { const QString at("<a href=\"%1:%2\" class=\"anchor\">" "<img src=\":/icons/icons/edit16.png\" alt=\"action\" width=\"16\" height=\"16\" /></a>"); return at.arg(QDir::cleanPath(fn)).arg(ref.positionValue); } ������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/documentCache.cpp���������������������������������������������������0000644�0000000�0000000�00000000130�15104461633�016421� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.682762162 29 atime=1762812827.99875967 29 ctime=1762812827.68676213 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/documentCache.cpp��������������������������������������������������������������0000644�0001750�0000144�00000011501�15104461633�020412� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "documentCache.h" #include "cb2bib_utilities.h" #include "document.h" #include "settings.h" #include "triads.h" #include <QDataStream> documentCache::documentCache() : _current(_cache), _content_type(documentContents::Complete), _cache_load_size(0), _settingsP(settings::instance()) {} documentCache::~documentCache() { save(); } void documentCache::load(const QString& fn, const documentContents::Type type) { _content_type = type; if (_load_filename == fn) return; unload(); _load_filename = fn; const QString cache_dir(_settingsP->fileName("cb2Bib/CacheDirectory")); if (QFileInfo::exists(cache_dir) && QFileInfo(cache_dir).isDir()) _cache_filename = QDir::cleanPath(cache_dir + '/' + QFileInfo(_load_filename).fileName() + ".c2b"); else _cache_filename = _load_filename.trimmed() + ".c2b"; if (QFileInfo::exists(_cache_filename)) { QFile file(_cache_filename); if (file.open(QIODevice::ReadOnly)) { QDataStream ds(&file); ds >> _cache; } } #if defined(C2B_USE_LZSSE) if (!_cache.contains("clzsse")) { _cache.clear(); _cache.insert("clzsse", QByteArray()); } #elif defined(C2B_USE_LZ4) if (!_cache.contains("clz4")) { _cache.clear(); _cache.insert("clz4", QByteArray()); } #elif defined(C2B_USE_LZO) if (!_cache.contains("clzo")) { _cache.clear(); _cache.insert("clzo", QByteArray()); } #else if (!_cache.contains("czlib")) { _cache.clear(); _cache.insert("czlib", QByteArray()); } #endif _cache_load_size = _cache.size(); } void documentCache::unload() { // Release cache memory save(); _cache.clear(); _cache_filename.clear(); _cache_load_size = 0; _load_filename.clear(); } bool documentCache::setCurrent(const QString& fn, int* pdfCounter, QString* logString, int* errorCounter) { const QString doc_fn(QDir::cleanPath(fn.trimmed())); if (doc_fn.isEmpty()) { _current.clear(); return false; } const QString skey("sign:" + doc_fn); const QString tkey(doc_fn); _current.preload(skey, tkey, _content_type); if (!_cache.contains(tkey)) { document doc(doc_fn, document::Complete); _current._text = doc.toString(); if (!doc.errorString().isEmpty()) { ++(*errorCounter); (*logString) += QObject::tr("% [cb2bib] %1\n").arg(doc.errorString()); return false; } _cache.insert(doc_fn, c2bUtils::compressString(_current._text)); if (_content_type == documentContents::Simplified) { _current._text = c2bUtils::toAscii(_current._text, c2bUtils::KeepWords); _current._signature = triads::asciiTextSignature(_current._text); } else _current._signature = triads::textSignature(_current._text); _cache.insert(skey, c2bUtils::stringToByteArray(_current._signature)); _current._is_text_loaded = true; _current._is_signature_loaded = true; } ++(*pdfCounter); return true; } bool documentCache::setCurrent(const QString& fn) { const QString doc_fn(QDir::cleanPath(fn.trimmed())); if (doc_fn.isEmpty()) { _current.clear(); return false; } const QString skey("sign:" + doc_fn); const QString tkey(doc_fn); _current.preload(skey, tkey, _content_type); if (!_cache.contains(tkey)) { document doc(doc_fn, document::Complete); _current._text = doc.toString(); if (!doc.errorString().isEmpty()) return false; _cache.insert(doc_fn, c2bUtils::compressString(_current._text)); if (_content_type == documentContents::Simplified) { _current._text = c2bUtils::toAscii(_current._text, c2bUtils::KeepWords); _current._signature = triads::asciiTextSignature(_current._text); } else _current._signature = triads::textSignature(_current._text); _cache.insert(skey, c2bUtils::stringToByteArray(_current._signature)); _current._is_text_loaded = true; _current._is_signature_loaded = true; } return true; } void documentCache::save() { if (_cache_load_size != _cache.size() && !_cache_filename.isEmpty()) { QFile file(_cache_filename); if (file.open(QIODevice::WriteOnly)) { QDataStream ds(&file); ds << _cache; } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/crJson.h������������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�014563� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.782761374 29 atime=1762812827.99875967 30 ctime=1762812827.790761311 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/crJson.h�����������������������������������������������������������������������0000644�0001750�0000144�00000002376�15104461633�016565� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef CRJSON_H #define CRJSON_H #include "bibReference.h" class crJson { public: explicit crJson(const QString& json); inline ~crJson() {} inline const bibReference& reference() const { return _reference; } inline bool hasError() const { return _has_error; } inline QString errorString() const { return _error_string; } private: void readReference(const QString& json); static QString _bibtex_booktitle(const QStringList& titles); static QString _bibtex_series(const QStringList& titles); static QString _bibtex_title(const QStringList& titles, const QStringList& subtitles); static QString _normalize_jabstract(const QString& abstract); static int _words(const QString& s); static void _normalize_jtitles(QStringList* titles); QString _error_string; bibReference _reference; bool _has_error; }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/monthDB.h�����������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014661� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.806761184 30 atime=1762812828.038759355 30 ctime=1762812827.810761153 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/monthDB.h����������������������������������������������������������������������0000644�0001750�0000144�00000001537�15104461633�016660� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef MONTHDB_H #define MONTHDB_H #include <QRegExp> #include <QStringList> /** Post processing of tag 'month' @author Pere Constans */ class monthDB { public: monthDB(); inline ~monthDB() {} QString retrieve(const QString& month_query); private: QRegExp _day_rx; QRegExp _month_rx; QString abbreviated(const QString& month) const; QString full(const QString& month) const; const QStringList _month_abbreviated; const QStringList _month_full; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/texParser.cpp�������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015636� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.726761815 30 atime=1762812828.038759355 30 ctime=1762812827.730761783 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/texParser.cpp������������������������������������������������������������������0000644�0001750�0000144�00000007500�15104461633�017631� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "texParser.h" #include "cb2bib_utilities.h" void texParser::parse(QString tex) { _stream.setString(&tex, QIODevice::ReadOnly); _paragraph.clear(); _stop_parsing = false; while (!_stream.atEnd() && !_stop_parsing) { readLine(true); if (_line.isEmpty()) { flush(); parseEmptyLine(); } else if (_line.startsWith('%')) { flush(); parseComment(_line); } else if (_line.startsWith('\\')) doElement(); else _paragraph += ' ' + _line; } flush(); } void texParser::doElement() { if (_line.startsWith("\\begin{")) gotoEnd("begin"); else if (_line.startsWith("\\section{")) gotoEndBraces("section"); else if (_line.startsWith("\\subsection{")) gotoEndBraces("subsection"); else if (_line.startsWith("\\subsubsection{")) gotoEndBraces("subsubsection"); else if (_line.startsWith("\\title{")) gotoEndBraces("title"); else if (_line.startsWith("\\author{")) gotoEndBraces("author"); else if (_line.startsWith("\\newcommand{")) gotoEndMacro("newcommand"); else if (_line.startsWith("\\documentclass")) flushLaTeXMarkup("documentclass"); else if (_line.startsWith("\\maketitle")) flushLaTeXMarkup("maketitle"); else if (_line.startsWith("\\end{document}")) flushLaTeXMarkup("document"); else if (_line.startsWith("\\bibliography")) flushLaTeXMarkup("bibliography"); else _paragraph += ' ' + _line; } void texParser::gotoEnd(const QString& e) { QString block_name; QString block_contents; const int pos(e.length() + 2); c2bUtils::inBraces(pos, _line, &block_name); if (block_name == "document") { flushLaTeXMarkup("document"); return; } QRegExp end_block(QString("^\\s*\\\\end\\{%1\\}").arg(block_name)); _element = _line; while (!_stream.atEnd()) { readLine(); if (end_block.indexIn(_line) >= 0) { _element += '\n' + _line.trimmed(); break; } else { _element += '\n' + _line; block_contents += '\n' + _line; } } flushElement(block_name, block_contents); } void texParser::gotoEndBraces(const QString& e) { QString in; const int pos(e.length() + 2); _element = _line; while (!_stream.atEnd() && !c2bUtils::inBraces(pos, _element, &in)) _element += '\n' + readLine(); flushElement(e, c2bUtils::simplifyString(in)); } void texParser::gotoEndMacro(const QString& e) { // Macro syntax: \newcommand{name}[number of arguments]{definition} int line_init_pos(e.length() + 3); int element_init_pos(0); _element = _line; while (!_stream.atEnd()) { // Find the begining of macro definition for (int pos = line_init_pos; pos < _line.length(); ++pos) if (_line.at(pos) == '{') { QString in; while (!_stream.atEnd() && !c2bUtils::inBraces(element_init_pos + pos + 1, _element, &in)) _element += '\n' + readLine(); in = _element; in.remove('\\' + e); flushElement(e, c2bUtils::simplifyString(in)); return; } // Try next line line_init_pos = 0; element_init_pos = _element.length() + 1; _element += '\n' + readLine(); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/bibExtractor.h������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015755� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.758761563 29 atime=1762812827.99875967 30 ctime=1762812827.758761563 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/bibExtractor.h�����������������������������������������������������������������0000644�0001750�0000144�00000003310�15104461633�017744� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBEXTRACTOR_H #define BIBEXTRACTOR_H #include <QObject> class bibParser; class metadataParser; class networkQuery; class settings; class QEventLoop; class QTextStream; /** Wrapper class for handling the whole bibliographic extraction/recognition process. */ class bibExtractor : public QObject { Q_OBJECT public: explicit bibExtractor(QObject* parento = 0); bibExtractor(bibParser* bp, metadataParser* mp, networkQuery* nq, QObject* parento = 0); ~bibExtractor(); enum InputType { PlainText, Document }; int extract(const QString& text, QString* bibtex); int extract(const QStringList& input_fns, const QString& output_fn, const InputType& type); private: InputType _input_type; QEventLoop* _event_loop; QString _document_fn; QString documentToString(const QString& fn) const; QTextStream& cout; bibParser* _bpP; bool _is_copymove_ok; bool isReliable() const; metadataParser* _mpP; networkQuery* _networkQP; settings* _settingsP; void _extract(const QString& text); void extract(const QString& text); void init(); private slots: void copyMoveEnded(bool ok); void logMessage(const QString& ms) const; void proxyLogMessage() const; void queryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/crJson.cpp����������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015116� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.678762193 29 atime=1762812827.99875967 30 ctime=1762812827.678762193 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/crJson.cpp���������������������������������������������������������������������0000644�0001750�0000144�00000021540�15104461633�017112� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "crJson.h" #include "cb2bib_utilities.h" #include <QJsonArray> #include <QJsonDocument> #include <QJsonObject> #include <cmath> crJson::crJson(const QString& json) { _reference.clearReference(); readReference(json); } void crJson::readReference(const QString& json) { _has_error = true; _error_string.clear(); QJsonParseError jerr; QJsonDocument jdoc(QJsonDocument::fromJson(json.toUtf8(), &jerr)); if (jdoc.isNull() || jdoc.isEmpty()) { _error_string = QObject::tr("Invalid data%1").arg(jerr.errorString().isEmpty() ? QString() : ": " + jerr.errorString()); return; } QJsonObject jobj(jdoc.object().value("message").toObject()); if (jobj.isEmpty()) { _error_string = QObject::tr("Invalid reference data"); return; } #ifdef C2B_DEBUG for (QJsonObject::const_iterator i = jobj.constBegin(); i != jobj.constEnd(); ++i) qDebug() << "[crjson] " << i.key() << i.value(); #endif if (jobj.value("DOI").isUndefined()) { _error_string = QObject::tr("Invalid reference data: no DOI parsed"); return; } _reference["doi"] = jobj.value("DOI").toString(); if (!jobj.value("published-print").isUndefined()) { const QJsonValue jyear( jobj.value("published-print").toObject().value("date-parts").toArray().first().toArray().first()); if (!jyear.isUndefined()) _reference["year"] = QString::number(jyear.toDouble()); } else if (!jobj.value("published-online").isUndefined()) { // For articles no longer published in print const QJsonValue jyear( jobj.value("published-online").toObject().value("date-parts").toArray().first().toArray().first()); if (!jyear.isUndefined()) _reference["year"] = QString::number(jyear.toDouble()); } _reference["volume"] = jobj.value("volume").toString(); _reference["number"] = jobj.value("issue").toString(); _reference["pages"] = jobj.value("page").toString(); QStringList authors; const QJsonArray jauthors(jobj.value("author").toArray()); for (QJsonArray::const_iterator i = jauthors.constBegin(); i != jauthors.constEnd(); ++i) { const QJsonObject ja((*i).toObject()); authors.append(ja.value("given").toString() + ' ' + ja.value("family").toString()); } _reference["author"] = authors.join(", "); QStringList editors; const QJsonArray jeditors(jobj.value("editor").toArray()); for (QJsonArray::const_iterator i = jeditors.constBegin(); i != jeditors.constEnd(); ++i) { const QJsonObject je((*i).toObject()); editors.append(je.value("given").toString() + ' ' + je.value("family").toString()); } _reference["editor"] = editors.join(", "); QStringList titles; const QJsonArray jtitles(jobj.value("title").toArray()); for (QJsonArray::const_iterator i = jtitles.constBegin(); i != jtitles.constEnd(); ++i) titles.append((*i).toString()); _normalize_jtitles(&titles); QStringList subtitles; const QJsonArray jsubtitles(jobj.value("subtitle").toArray()); for (QJsonArray::const_iterator i = jsubtitles.constBegin(); i != jsubtitles.constEnd(); ++i) subtitles.append((*i).toString()); _normalize_jtitles(&subtitles); QStringList containertitles; const QJsonArray jcontainertitles(jobj.value("container-title").toArray()); for (QJsonArray::const_iterator i = jcontainertitles.constBegin(); i != jcontainertitles.constEnd(); ++i) containertitles.append((*i).toString()); _normalize_jtitles(&containertitles); const QString jisbn(jobj.value("ISBN").toArray().first().toString()); const QString jpublisher(jobj.value("publisher").toString()); const QString jabstract(jobj.value("abstract").toString()); _reference["abstract"] = _normalize_jabstract(jabstract); _reference["title"] = _bibtex_title(titles, subtitles); const QString jtype(jobj.value("type").toString()); if (jtype == "journal-article") { _reference.typeName = "article"; _reference["journal"] = containertitles.count() > 0 ? containertitles.first() : QString(); } else if (jtype == "proceedings-article") { _reference.typeName = "inproceedings"; _reference["booktitle"] = _bibtex_booktitle(containertitles); _reference["series"] = _bibtex_series(containertitles); _reference["isbn"] = jisbn; _reference["publisher"] = jpublisher; } else if (jtype == "book") { _reference.typeName = "book"; _reference["series"] = containertitles.count() > 0 ? containertitles.first() : QString(); _reference["isbn"] = jisbn; _reference["publisher"] = jpublisher; } else if (jtype == "book-chapter") { _reference.typeName = "inbook"; _reference["booktitle"] = _bibtex_booktitle(containertitles); _reference["series"] = _bibtex_series(containertitles); _reference["isbn"] = jisbn; _reference["publisher"] = jpublisher; } else { // jtype == "other" _reference.typeName = "misc"; _reference["booktitle"] = _bibtex_booktitle(containertitles); _reference["series"] = _bibtex_series(containertitles); _reference["isbn"] = jisbn; _reference["publisher"] = jpublisher; } if (_reference.value("series") == _reference.value("booktitle")) _reference["series"] = QString(); if (jtype == "book-chapter" && !_reference.value("series").isEmpty()) _reference.typeName = "incollection"; #ifdef C2B_DEBUG qDebug() << "[crjson] TITLES" << titles; qDebug() << "[crjson] SUBTITLES" << subtitles; qDebug() << "[crjson] CONTAINERTITLES" << containertitles; qDebug() << "[crjson] BIBTEX"; qDebug() << "[crjson] type " << _reference.typeName; qDebug() << "[crjson] title " << _reference.value("title"); qDebug() << "[crjson] booktitle " << _reference.value("booktitle"); qDebug() << "[crjson] series " << _reference.value("series"); qDebug() << "[crjson] publisher " << _reference.value("publisher"); qDebug() << "[crjson] isbn " << _reference.value("isbn"); qDebug() << "[crjson] year " << _reference.value("year"); #endif _has_error = false; } void crJson::_normalize_jtitles(QStringList* titles) { if (titles->count() == 0) return; titles->removeDuplicates(); for (int i = 0; i < titles->count(); ++i) { QString t(titles->at(i).simplified()); for (int j = 0; j < t.length(); ++j) if (t.at(j).category() == QChar::Punctuation_Dash) t[j] = '-'; t.replace(" - ", ": "); t.replace(" : ", ": "); (*titles)[i] = t; } } QString crJson::_normalize_jabstract(const QString& abstract) { if (abstract.isEmpty()) return abstract; QString na(abstract); na.replace("<", "<"); na.replace(">", ">"); c2bUtils::replace(na, QRegExp("<[^>]+>"), " "); c2bUtils::remove(na, QRegExp("^\\W*(abstract|synopsis|summary)\\.*", Qt::CaseInsensitive)); return na.simplified(); } QString crJson::_bibtex_title(const QStringList& titles, const QStringList& subtitles) { if (titles.count() > 0 && subtitles.count() > 0 && !titles.first().contains(": ")) { const int wt(_words(titles.first())); const int ws(_words(subtitles.first())); const int wu(_words(titles.first() + ' ' + subtitles.first())); const int s(100 * (wt + ws - wu) / sqrt(double(wt * ws))); if (s < 30) return titles.first() + ": " + subtitles.first(); } return titles.count() > 0 ? titles.first() : QString(); } QString crJson::_bibtex_booktitle(const QStringList& titles) { if (titles.count() == 0) return QString(); if (titles.count() == 2) return (QRegExp("(advances|series|lecture notes|studies in|topics in)", Qt::CaseInsensitive).indexIn(titles.at(1)) == -1) ? titles.at(1) : titles.at(0); return titles.first(); } QString crJson::_bibtex_series(const QStringList& titles) { if (titles.count() == 2) return (QRegExp("(advances|series|lecture notes|studies in|topics in)", Qt::CaseInsensitive).indexIn(titles.at(1)) >= 0) ? titles.at(1) : titles.at(0); return QString(); } int crJson::_words(const QString& s) { QStringList wl(c2bUtils::split(s, QRegExp("\\W"), _QT_6_SkipEmptyParts)); wl.removeDuplicates(); return wl.count(); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/stemmer.h�����������������������������������������������������������0000644�0000000�0000000�00000000126�15104461633�015005� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������28 mtime=1762812827.8427609 30 atime=1762812828.038759355 28 ctime=1762812827.8427609 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/stemmer.h����������������������������������������������������������������������0000644�0001750�0000144�00000021135�15104461633�016775� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef STEMMER_H #define STEMMER_H #include <QRegExp> #include <QString> struct stemmer { stemmer() : digits("\\d"), suffix_1_letter("(:?a|e|f|i|o|r|s|t|x|y)$", Qt::CaseInsensitive), suffix_2_letter("(:?as|ce|er|es|fs|ic|id|ie|is|on|os|se|sm|st|um|us|ys)$", Qt::CaseInsensitive), suffix_2_letter_inflected("(:?ed|en|er)$", Qt::CaseInsensitive), suffix_2_letter_length_5("(:?ed|er)$", Qt::CaseInsensitive), suffix_3_letter("(:?ers|ics|ies|ion|ish|ism|ist|ium|oes|ons|ora|sms|sts|ums|ves|xes)$", Qt::CaseInsensitive), suffix_3_letter_length_7("(:?ers|ies|ish|ora|sms|ums|ves|xes)$", Qt::CaseInsensitive), suffix_4_letter("(:?ical|ions|isms|ists)$", Qt::CaseInsensitive), suffix_double_esses("(:?sses|ssis|ssus)$", Qt::CaseInsensitive), suffix_isz("(:?ise|ised|iser|isers|ises|ising|isis|ize|ized|izer|izers|izes|izing)$", Qt::CaseInsensitive), suffix_man("(:?man|men)$", Qt::CaseInsensitive), suffix_misc("(:?mme|mmes|lty|lties|lity|lities)$", Qt::CaseInsensitive), suffix_ogues("(:?ogue|ogues)$", Qt::CaseInsensitive), suffix_ours("(:?or|ors|our|ours)$", Qt::CaseInsensitive), suffix_reer("(:?tre|tres|bre|bres)$", Qt::CaseInsensitive), suffix_sz("(:?isation|ization|ysation|yzation|isations|izations|ysations|yzations)$", Qt::CaseInsensitive), suffix_ysz("(:?yse|ysed|yser|ysers|yses|ysing|ysis|yze|yzed|yzer|yzers|yzes|yzing)$", Qt::CaseInsensitive) { dictionary.insert("alpha", QChar(913)); dictionary.insert("beta", QChar(914)); dictionary.insert("gamma", QChar(915)); dictionary.insert("delta", QChar(916)); dictionary.insert("epsilon", QChar(917)); dictionary.insert("zeta", QChar(918)); dictionary.insert("eta", QChar(919)); dictionary.insert("theta", QChar(920)); dictionary.insert("iota", QChar(921)); dictionary.insert("kappa", QChar(922)); dictionary.insert("lambda", QChar(923)); dictionary.insert("mu", QChar(924)); dictionary.insert("nu", QChar(925)); dictionary.insert("xi", QChar(926)); dictionary.insert("omicron", QChar(927)); dictionary.insert("pi", QChar(928)); dictionary.insert("rho", QChar(929)); dictionary.insert("sigma", QChar(931)); dictionary.insert("tau", QChar(932)); dictionary.insert("upsilon", QChar(933)); dictionary.insert("phi", QChar(934)); dictionary.insert("chi", QChar(935)); dictionary.insert("psi", QChar(936)); dictionary.insert("omega", QChar(937)); dictionary.insert("axes", "axis"); dictionary.insert("axis", "axes"); dictionary.insert("bases", "basis"); dictionary.insert("basis", "bases"); dictionary.insert("data", "datum"); dictionary.insert("datum", "data"); dictionary.insert("liked", "like"); dictionary.insert("infinity", QChar(8734)); } QString stem(const QString& word) const { const Qt::CaseSensitivity ci(Qt::CaseInsensitive); const int nl(word.length()); if (nl < 4) return word; if (digits.indexIn(word) >= 0) return word; if (nl == 4) { if (word.endsWith(QLatin1Char('s'), ci)) return word.left(3); return word; } if (suffix_man.indexIn(word) >= 0) return word.left(nl - 2); if (suffix_reer.indexIn(word) >= 0) return word.left(nl - suffix_reer.matchedLength() + 1); if (nl == 5) { if (suffix_2_letter_length_5.indexIn(word) >= 0) return word.left(3); if (suffix_1_letter.indexIn(word) >= 0) return word.left(4); return word; } if (suffix_isz.indexIn(word) >= 0) return word.left(nl - suffix_isz.matchedLength() + 1); if (suffix_ysz.indexIn(word) >= 0) return word.left(nl - suffix_ysz.matchedLength() + 1); if (suffix_2_letter_inflected.indexIn(word) >= 0) return word.at(nl - 3) == word.at(nl - 4) || word.at(nl - 3).toLower() == QLatin1Char('i') ? word.left(nl - 3) : word.left(nl - 2); if (suffix_ours.indexIn(word) >= 0) return word.left(nl - suffix_ours.matchedLength() + 1); if (suffix_misc.indexIn(word) >= 0) return word.left(nl - suffix_misc.matchedLength() + 1); if (nl == 6) { if (word.endsWith(QLatin1String("ing"), ci)) return word.left(3); if (suffix_2_letter.indexIn(word) >= 0) return word.left(4); if (suffix_1_letter.indexIn(word) >= 0) return word.left(5); return word; } if (word.endsWith(QLatin1String("est"), ci)) return word.at(nl - 4) == word.at(nl - 5) || word.at(nl - 4).toLower() == QLatin1Char('i') ? word.left(nl - 4) : word.left(nl - 3); if (word.endsWith(QLatin1String("ing"), ci)) return word.at(nl - 4) == word.at(nl - 5) || word.at(nl - 4).toLower() == QLatin1Char('y') ? word.left(nl - 4) : word.left(nl - 3); if (word.endsWith(QLatin1String("ices"), ci)) return word.left(nl - 3); if (word.endsWith(QLatin1String("uses"), ci)) return word.at(nl - 5).toLower() == QLatin1Char('f') ? word.left(nl - 2) : word.left(nl - 4); if (suffix_ogues.indexIn(word) >= 0) return word.left(nl - suffix_ogues.matchedLength() + 2); if (nl == 7) { if (suffix_3_letter_length_7.indexIn(word) >= 0) return word.left(4); if (suffix_2_letter.indexIn(word) >= 0) return word.left(5); if (suffix_1_letter.indexIn(word) >= 0) return word.left(6); return word; } if (word.endsWith(QLatin1String("ings"), ci)) return word.at(nl - 5) == word.at(nl - 6) || word.at(nl - 5).toLower() == QLatin1Char('y') ? word.left(nl - 5) : word.left(nl - 4); if (nl > 9 && suffix_sz.indexIn(word) >= 0) return word.left(nl - suffix_sz.matchedLength() + 1); if (nl > 8 && suffix_4_letter.indexIn(word) >= 0) return word.left(nl - 4); if (suffix_3_letter.indexIn(word) >= 0) return word.left(nl - 3); if (suffix_double_esses.indexIn(word) >= 0) return word.left(nl - 3); if (suffix_2_letter.indexIn(word) >= 0) return word.left(nl - 2); if (suffix_1_letter.indexIn(word) >= 0) return word.left(nl - 1); return word; } QStringList stems(const QString& word) const { QStringList sts; { QString stripped(word); c2bUtils::stripDiacritics(stripped); if (stripped != word) { sts.append(word); sts.append(stripped); return sts; } } { const QString lower(word.toLower()); if (dictionary.contains(lower)) { sts.append(word); sts.append(cased(word, dictionary.value(lower))); return sts; } } sts.append(stem(word)); return sts; } static QString cased(const QString& word, const QString& other) { const int n(std::min(word.length(), other.length())); QString wc(other); for (int i = 0; i < n; ++i) wc[i] = word.at(i).isUpper() ? wc.at(i).toUpper() : wc.at(i).toLower(); return wc; } QHash<QString, QString> dictionary; QRegExp digits; QRegExp suffix_1_letter; QRegExp suffix_2_letter; QRegExp suffix_2_letter_inflected; QRegExp suffix_2_letter_length_5; QRegExp suffix_3_letter; QRegExp suffix_3_letter_length_7; QRegExp suffix_4_letter; QRegExp suffix_double_esses; QRegExp suffix_isz; QRegExp suffix_man; QRegExp suffix_misc; QRegExp suffix_ogues; QRegExp suffix_ours; QRegExp suffix_reer; QRegExp suffix_sz; QRegExp suffix_ysz; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/heuristicBibParser.cpp����������������������������������������������0000644�0000000�0000000�00000000130�15104461633�017450� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1762812827.68676213 29 atime=1762812827.99875967 30 ctime=1762812827.690762099 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/heuristicBibParser.cpp���������������������������������������������������������0000644�0001750�0000144�00000105546�15104461633�021456� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "heuristicBibParser.h" #include "bibParser.h" #include "journalDB.h" #include <QDate> #include <cmath> heuristicBibParser::heuristicBibParser(bibParser* bp) : _bpP(bp), _current_reference(bp->_current_reference), _reliable_number(false), _reliable_pages(false), _reliable_volume(false), _abstract("abstract"), _addauthors("addauthors"), _author("author"), _isbn("isbn"), _keywords("keywords"), _number("number"), _pages("pages"), _title("title"), _volume("volume"), _year("year"), _bibliographic_fields(bp->_bibliographic_fields), _journal_db(*bp->_journal_dbP) { _leading_non_letters = QRegExp("^[^<\\w]+"); // Char 65533 appears many times in pdftotext outputs due to encoding errors _hyphens = QRegExp("\\s*[-" + QString(QChar(8211)) + QString(QChar(8722)) + QString(QChar(65533)) + "]+\\s*"); _hyphen_nums = "(?:\\d+|\\d+-\\d+)"; _hyphen_pages = "(?:\\d+|\\d+-\\d+p{0,2}|\\d+ \\d+pp)"; _max_year = 3 + QDate::currentDate().year(); // Setup author recognition // Implementation of author field extraction // P. Constans. A Simple Extraction Procedure for Bibliographical Author Field. // arXiv:0902.0755, 2009. _word_prefix_lexicon = c2bUtils::split(c2bUtils::fileToString(":/txt/txt/word_prefix_lexicon.txt"), c2bUtils::nonLetter, _QT_6_SkipEmptyParts); for (int i = 0; i < _word_prefix_lexicon.count(); ++i) { _word_prefix_lexicon[i].replace('_', ' '); _word_prefix_lexicon[i].squeeze(); } const QString author_lc_t("(?:n%1n|n%1%1n|%1n|%1nn|%1%1n|%1%1%1n|n%1nn|nn%1n|%1%1nn|%1n%1n|nn|nnn)"); const QString author_uc_t( "(?:[nN]%1N|[nN]%1%1N|%1N|%1[nN]N|%1%1N|%1%1%1N|[nN]%1[nN]N|[nN]N%1N|%1%1[nN]N|%1[nN]%1N|[nN]N|[nN][nN]N)"); const QString author_initial("Ip{0,1}"); const QString author_line("L%1(?:[,;&L]+%1)*(?=L)"); const QString author_lc(author_line.arg(author_lc_t.arg(author_initial))); const QString author_uc(author_line.arg(author_uc_t.arg(author_initial))); const QString author_address("(?:L[^L]*)"); _author_sb = QRegExp(QString("L%1(?:[,;&]+L{0,2}%1)*[,;&L]*L").arg(author_lc_t.arg(author_initial)), Qt::CaseInsensitive, QRegExp::RegExp); _author_sb_lc = QRegExp(QString("L%1(?:[,;&L]+%1)*(?=L)").arg(author_lc_t.arg(author_initial)), Qt::CaseSensitive, QRegExp::RegExp); _author_sb_uc = QRegExp(QString("L%1(?:[,;&L]+%1)*(?=L)").arg(author_uc_t.arg(author_initial)), Qt::CaseSensitive, QRegExp::RegExp); _author_sb.setMinimal(false); _author_sb_lc.setMinimal(false); _author_sb_uc.setMinimal(false); // Note: Syntax must be RegExp and not RegExp2. // If not, in cases as 'LnnL ... Lnn,nn,Lnn,&nnL' it will overextend addresses to include Lnn,nn,L. // This is not related to minimal/greedy. // Note also that Lnn,nn,L will not be taken, unless it is followed by another author line. This is a feature. _author_b2_lc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)").arg(author_lc, author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b2_uc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)").arg(author_uc, author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b3_lc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_lc, author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b3_uc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_uc, author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b4_lc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_lc, author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b4_uc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_uc, author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b5_lc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_lc, author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b5_uc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_uc, author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b2_lc_rx->setMinimal(true); _author_b2_uc_rx->setMinimal(true); _author_b3_lc_rx->setMinimal(true); _author_b3_uc_rx->setMinimal(true); _author_b4_lc_rx->setMinimal(true); _author_b4_uc_rx->setMinimal(true); _author_b5_lc_rx->setMinimal(true); _author_b5_uc_rx->setMinimal(true); } heuristicBibParser::~heuristicBibParser() { delete _author_b2_lc_rx; delete _author_b2_uc_rx; delete _author_b3_lc_rx; delete _author_b3_uc_rx; delete _author_b4_lc_rx; delete _author_b4_uc_rx; delete _author_b5_lc_rx; delete _author_b5_uc_rx; } void heuristicBibParser::guessFields(const QString& clean_text, const QString& tagged_text) { QString clean_num(clean_text); c2bUtils::replace(clean_num, _hyphens, "-"); // Order is important to increase the chances of a proper recognition guessJournal(clean_text); guessAbstract(tagged_text); guessAuthor(tagged_text); guessKeywords(tagged_text); guessYear(clean_num); _debug_guess("guessYear"); guessVolume(clean_num); _debug_guess("guessVolume"); guessNumber(clean_num); _debug_guess("guessNumber"); guessPages(clean_num); _debug_guess("guessPages"); guessTitle(tagged_text); guessISBN(clean_num); guessVolumeYearPages(clean_num); _debug_guess("guessVolumeYearPages"); guessYearVolumePages(clean_num); _debug_guess("guessYearVolumePages"); guessVolumePagesYear(clean_num); _debug_guess("guessVolumePagesYear"); guessFromMetadata(clean_text); } void heuristicBibParser::heuristicFields(const QString& text) { // Heuristics for reasonably secure extraction QRegExp rxdoi("(10\\.[\\d\\.]+/\\S+)"); if (rxdoi.indexIn(text) > -1) { QString cdoi(rxdoi.cap(1)); // This happens when publishers set doi to title in metadata: <title>doi:10. ... if (cdoi.endsWith("")) cdoi.chop(8); c2bUtils::remove(cdoi, QRegExp("[\\,\"\\}\\)]+$")); _current_reference["doi"] = _bpP->parse("doi", cdoi); } QRegExp rxarxiv("arXiv:([\\w\\./-]+)"); if (rxarxiv.indexIn(text) > -1) { // https://arxiv.org/hypertex/bibstyles/ QString aid(rxarxiv.cap(1)); c2bUtils::remove(aid, QRegExp("v\\d{1,2}$")); _current_reference["eprint"] = _bpP->parse("eprint", aid); _current_reference["journal"] = _bpP->parse("journal", "arXiv:" + aid); _current_reference["url"] = _bpP->parse("url", c2bUtils::arxivUrl.arg(aid)); } QRegExp rxhtml("((http://|https://|ftp://|www\\.|ftp\\.)(www\\.|ftp\\.){0,1}\\S+)"); if (rxhtml.indexIn(text) > -1) _current_reference["url"] = _bpP->parse("url", rxhtml.cap(1)); } /** \page heuristics Field Recognition Rules - Abstract - If Abstract\b is found. - If Summary\b is found. */ void heuristicBibParser::guessAbstract(const QString& text) { // Check whether text might come from a web page or from a PDF with new lines // Set line length to 93 // Check first for abstract, check later for summary if (text.contains("Abstract", Qt::CaseInsensitive)) { const QString crl(QChar(169)); // Avoid abstract overextending to copyright line. QRegExp rxH("(?:|)\\s*Abstract[\\s\\.:]*(.+)(?:" + crl + "| -1) if (rxH.cap(1).length() > 93) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Abstract[\\s\\.:]*(.+)(?:" + crl + "|\\s* -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Abstract\\b(.+)(?:" + crl + "| -1) if (rxH.cap(1).length() > 93) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Abstract\\b(.+)(?:" + crl + "|\\s* -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } } if (text.contains("Summary", Qt::CaseInsensitive)) { QRegExp rxH("(?:|)\\s*Summary[\\s\\.:]*(.+)(?: -1) if (rxH.cap(1).length() > 93) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Summary[\\s\\.:]*(.+)(?:\\s* -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Summary\\b(.+)(?: -1) if (rxH.cap(1).length() > 93) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Summary\\b(.+)(?:\\s* -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } } } /** \page heuristics Field Recognition Rules - Author - Check capitalization patterns. See \htmlonly A Simple Extraction Procedure for Bibliographical Author Field. \endhtmlonly */ void heuristicBibParser::guessAuthor(const QString& tagged_text) { // Prepare input stream QString simplified_text("| " + tagged_text + " |"); simplified_text.replace('|', ' '); simplified_text = "| " + simplified_text + " |"; c2bUtils::replace(simplified_text, QRegExp(""), " | "); c2bUtils::replace(simplified_text, QRegExp("(\\w)(\\w)"), "\\1 , \\2"); c2bUtils::replace(simplified_text, QRegExp(""), " "); c2bUtils::remove(simplified_text, QRegExp("author.{0,3}:{0,1}", Qt::CaseInsensitive)); c2bUtils::replace(simplified_text, QRegExp("(\\w{4,10})[a-z]\\)", Qt::CaseSensitive), "\\1 "); // Remove superscript, e. g. LASTNAMEa c2bUtils::replace(simplified_text, QRegExp("([A-Z]{2,10})[a-z]\\b", Qt::CaseSensitive), "\\1 "); // Remove superscript, e. g. LASTNAMEa) c2bUtils::replace(simplified_text, _hyphens, "-"); simplified_text.replace(QChar(183), ','); // Fancy author separator simplified_text.replace(' ' + QChar(198) + ' ', " , "); // Fancy author separator simplified_text.replace(QChar(8226), ','); // Fancy author separator simplified_text.replace(QChar(178), ' '); // Superscript dagger as sometimes translated by pdftotext _aencoder.aunifier.simplifyString(simplified_text); // Capitalize and encode for (int i = 0; i < _word_prefix_lexicon.count(); ++i) { const QString& wp = _word_prefix_lexicon.at(i); simplified_text.replace(wp, wp, Qt::CaseInsensitive); } simplified_text.replace(" by ", " "); _aencoder.encode(simplified_text); const QString sb_author(guessAuthor_single_block()); const int n_sb_author(authorCount(sb_author)); const QString mb_author(guessAuthor_multi_block()); const int n_mb_author(authorCount(mb_author)); if (n_mb_author > n_sb_author) _current_reference[_author] = mb_author; else _current_reference[_author] = sb_author; } QString heuristicBibParser::guessAuthor_single_block() { QString author; if (_author_sb_lc.indexIn(_aencoder.code) > -1) author = _bpP->parse(_author, _aencoder.decoded(_author_sb_lc.pos(0), _author_sb_lc.matchedLength())); else if (_author_sb_uc.indexIn(_aencoder.code) > -1) author = _bpP->parse(_author, _aencoder.decoded(_author_sb_uc.pos(0), _author_sb_uc.matchedLength())); else if (_author_sb.indexIn(_aencoder.code) > -1) // Few cases are extracted by _author_sb, keep it for cases 'A. Name,', with ',' usually coming // from a faulty plain text conversion. author = _bpP->parse(_author, _aencoder.decoded(_author_sb.pos(0), _author_sb.matchedLength())); return author; } QString heuristicBibParser::guessAuthor_multi_block() { QString author; if (_author_b5_uc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b5_uc_rx->capturedTexts().count(); ++i) author = _bpP->parse( _addauthors, _aencoder.decoded(_author_b5_uc_rx->pos(i), _author_b5_uc_rx->cap(i).length()), author); else if (_author_b5_lc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b5_lc_rx->capturedTexts().count(); ++i) author = _bpP->parse( _addauthors, _aencoder.decoded(_author_b5_lc_rx->pos(i), _author_b5_lc_rx->cap(i).length()), author); else if (_author_b4_uc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b4_uc_rx->capturedTexts().count(); ++i) author = _bpP->parse( _addauthors, _aencoder.decoded(_author_b4_uc_rx->pos(i), _author_b4_uc_rx->cap(i).length()), author); else if (_author_b4_lc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b4_lc_rx->capturedTexts().count(); ++i) author = _bpP->parse( _addauthors, _aencoder.decoded(_author_b4_lc_rx->pos(i), _author_b4_lc_rx->cap(i).length()), author); else if (_author_b3_uc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b3_uc_rx->capturedTexts().count(); ++i) author = _bpP->parse( _addauthors, _aencoder.decoded(_author_b3_uc_rx->pos(i), _author_b3_uc_rx->cap(i).length()), author); else if (_author_b3_lc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b3_lc_rx->capturedTexts().count(); ++i) author = _bpP->parse( _addauthors, _aencoder.decoded(_author_b3_lc_rx->pos(i), _author_b3_lc_rx->cap(i).length()), author); else if (_author_b2_uc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b2_uc_rx->capturedTexts().count(); ++i) author = _bpP->parse( _addauthors, _aencoder.decoded(_author_b2_uc_rx->pos(i), _author_b2_uc_rx->cap(i).length()), author); else if (_author_b2_lc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b2_lc_rx->capturedTexts().count(); ++i) author = _bpP->parse( _addauthors, _aencoder.decoded(_author_b2_lc_rx->pos(i), _author_b2_lc_rx->cap(i).length()), author); return author; } int heuristicBibParser::authorCount(const QString& authors) { if (authors.isEmpty()) return 0; return 1 + authors.count(" and "); } /** \page heuristics - Keywords - If Key\\s{0,1}words\b is found. */ void heuristicBibParser::guessKeywords(const QString& text) { QRegExp rxH("<(?:NewLine|Tab)\\d+>\\s*Key\\s{0,1}words and phrases[\\s\\.:]*(.+)( -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_keywords] = _bpP->parse(_keywords, val); return; } rxH = QRegExp("<(?:NewLine|Tab)\\d+>\\s*Key\\s{0,1}words and phrases\\b(.+)( -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_keywords] = _bpP->parse(_keywords, val); } rxH = QRegExp("<(?:NewLine|Tab)\\d+>\\s*Key\\s{0,1}words[\\s\\.:]*(.+)( -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_keywords] = _bpP->parse(_keywords, val); return; } rxH = QRegExp("<(?:NewLine|Tab)\\d+>\\s*Key\\s{0,1}words\\b(.+)( -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_keywords] = _bpP->parse(_keywords, val); } } /** \page heuristics - Volume - If Volume:{0,1} is found. - If Vol.{0,1} is found. - If \\b(\\d+)[,:]\\s*\\d+\\W+\\d+ is found. - If \\b(\\d+)\\s*\\(\\d+\\) is found. - If \\b(\\d+)[,:]\\s*\\d+\\b is found. */ void heuristicBibParser::guessVolume(const QString& text) { _reliable_volume = true; QRegExp rxH("Volumes{0,1}:{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("Vols{0,1}\\.{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)\\s*\\(" + _hyphen_nums + "\\)[,:]\\s*pp\\.{0,1}\\s*\\d+", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)[,:]\\s*pp\\.{0,1}\\s*\\d+", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } _reliable_volume = false; rxH = QRegExp("(\\d+)\\s*\\(" + _hyphen_nums + "\\)[,:]\\s*\\d+", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)\\s*\\(\\d+\\)"); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)[,:]\\s*" + _hyphen_nums, Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)[,:]\\s*\\d+\\b"); nH = rxH.indexIn(text); if (nH > -1) _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); } /** \page heuristics - Number - If Numbers{0,1}:{0,1}\\s*([\\d-]+) is found. - If No\\.{0,1}\\s*(\\d+) is found. - If Issue\\:{0,1}\\s*(\\d+) is found. - If \\d\\s*\\((\\d+)\\)[^\\.] is found. */ void heuristicBibParser::guessNumber(const QString& text) { _reliable_number = true; QRegExp rxH("Numbers{0,1}\\:{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_number] = _bpP->parse(_number, rxH.cap(1)); return; } rxH = QRegExp("Nos{0,1}\\.{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_number] = _bpP->parse(_number, rxH.cap(1)); return; } rxH = QRegExp("Issues{0,1}\\:{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_number] = _bpP->parse(_number, rxH.cap(1)); return; } _reliable_number = false; rxH = QRegExp("\\d\\s*\\((" + _hyphen_nums + ")\\)[^\\.]"); nH = rxH.indexIn(text); if (nH > -1) if (rxH.cap(1) != _current_reference.value(_year)) // Avoid confusing (number) and (year) _current_reference[_number] = _bpP->parse(_number, rxH.cap(1)); } /** \page heuristics - Pages - If \\bPages{0,1}[:\\.]{0,1}([\\d\\s-]+) is found. - If \\bp{1,2}\\.{0,1}\\s+(\\d+) is found. - If \\b(\\d+)\\s*-{1,2}\\s*(\\d+pp)\\b is found. - If \\b(\\d+)\\s*-{1,2}\\s*(\\d+)\\b is found. */ void heuristicBibParser::guessPages(const QString& text) { _reliable_pages = true; QRegExp rxH("\\bPages{0,1}[:\\.]{0,1}\\s*((?!\\()" + _hyphen_nums + "(?!\\)))", Qt::CaseInsensitive); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } rxH = QRegExp("(?!\\()(\\d+[\\s-]\\d+pp)(?!\\))", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } rxH = QRegExp("\\bpp\\.{0,1}\\s+(" + _hyphen_nums + ')', Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } _reliable_pages = false; rxH = QRegExp("\\bp\\.{0,1}\\s+(" + _hyphen_nums + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } rxH = QRegExp("\\d+\\s*\\(" + _hyphen_nums + "\\),{0,1}\\s*(" + _hyphen_nums + ')'); nH = rxH.indexIn(text); // 120 (1-3), 927 if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } rxH = QRegExp("(?!\\()(\\d+)\\s*-{1,2}\\s*(\\d+)\\b(?!\\))"); nH = 0; while (nH >= 0) { nH = rxH.indexIn(text, nH); if (nH > -1) { if (!rxH.cap(1).startsWith('0')) { const QString pp(_bpP->parse(_pages, QString("%1 %2").arg(rxH.cap(1), rxH.cap(2)))); const QStringList flpp(c2bUtils::split(pp, QRegExp("\\D"), _QT_6_SkipEmptyParts)); if (flpp.count() != 2) continue; const int fp(flpp.first().toInt()); const int lp(flpp.last().toInt()); if (fp < lp && lp - fp < 250) { _current_reference[_pages] = pp; return; } } nH += rxH.matchedLength(); } } } /** \page heuristics - Year - If \\b(19|20)(\\d\\d)\\b is found. */ void heuristicBibParser::guessYear(const QString& text) { QRegExp rxH("\\((19|20)(\\d\\d)\\)"); int nH(rxH.indexIn(text)); if (nH > -1) { const QString y(_bpP->parse(_year, rxH.cap(1) + rxH.cap(2))); if (y.toInt() < _max_year) { _current_reference[_year] = y; return; } } rxH = QRegExp("\\d+:" + _hyphen_nums + "[,\\s]+(19|20)(\\d\\d)\\b"); nH = rxH.indexIn(text); // 44:2077 – 2082, 2004. if (nH > -1) { const QString y(_bpP->parse(_year, rxH.cap(1) + rxH.cap(2))); if (y.toInt() < _max_year) { _current_reference[_year] = y; return; } } rxH = QRegExp("\\b(19|20)(\\d\\d)\\b"); nH = rxH.indexIn(text); if (nH > -1) { const QString y(_bpP->parse(_year, rxH.cap(1) + rxH.cap(2))); if (y.toInt() < _max_year) { _current_reference[_year] = y; return; } } } /** \page heuristics - Title - If \\bTitle:{0,1} is found. */ void heuristicBibParser::guessTitle(const QString& text) { QRegExp rxH("\\bTitle:{0,1}\\s*(.+)( -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_title] = _bpP->parse(_title, val); return; } rxH = QRegExp("\\bTitle:{0,1}(.+)( -1) { const QString val(c2bUtils::removed(rxH.cap(1), _leading_non_letters)); _current_reference[_title] = _bpP->parse(_title, val); } } /** \page heuristics - ISBN - If \\bISBN\\b(?:-\\d+){0,1}:{0,1}(?:-\\d+){0,1}\\s*(\\d+-[\\d-]+-\\d+) is found. - If \\bISBN\\b(?:-\\d+){0,1}:{0,1}(?:-\\d+){0,1}\\s*(\\d+) is found. */ void heuristicBibParser::guessISBN(const QString& text) { QRegExp rxH("\\bISBN\\b(?:[ -]\\d+){0,1}:{0,1}(?:-\\d+){0,1}\\s*(\\d+-[\\d-]+-\\d+)", Qt::CaseInsensitive); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_isbn] = _bpP->parse(_isbn, rxH.cap(1)); return; } rxH = QRegExp("\\bISBN\\b(?:[ -]\\d+){0,1}:{0,1}(?:-\\d+){0,1}\\s*(\\d+)", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_isbn] = _bpP->parse(_isbn, rxH.cap(1)); return; } } /** \page heuristics - Journal - Check cb2Bib internal database. */ void heuristicBibParser::guessJournal(const QString& text) { QString stext(text.toLower()); c2bUtils::remove(stext, c2bUtils::nonLetter); if (stext.length() < 3 || stext.length() > 10000) return; const int pheader(0); const int pfooter(stext.length()); double oscore(0); int oindex(-1); QStringMatcher blank(" "); for (int i = 0; i < _journal_db.count(); ++i) if (blank.indexIn(_journal_db.retrieveFull(i)) >= 0) { const int p(stext.indexOf(_journal_db.fullsimplifiedFull(i), 0, Qt::CaseSensitive)); if (p == -1) continue; const int jlength(_journal_db.fullsimplifiedFull(i).length()); const int d(1 + std::min(p - pheader, pfooter - p - jlength)); const double score(pow(double(jlength), 1.75) / double(d)); if (score > oscore) { oscore = score; oindex = i; } } for (int i = 0; i < _journal_db.count(); ++i) { const int p(stext.indexOf(_journal_db.fullsimplified(i), 0, Qt::CaseSensitive)); if (p == -1) continue; const int jlength(_journal_db.fullsimplified(i).length()); const int d(1 + std::min(p - pheader, pfooter - p - jlength)); const double score(pow(double(jlength), 1.75) / double(d)); if (score > oscore) { oscore = score; oindex = i; } } if (oscore > double(1) && oindex > -1) _current_reference["journal"] = _bpP->parse("journal", _journal_db.retrieve(oindex)); } void heuristicBibParser::guessFromMetadata(const QString& text) { if (!text.contains("[Bibliographic Metadata")) return; QRegExp bf; bf.setMinimal(true); bf.setCaseSensitivity(Qt::CaseSensitive); QString p("<%1>(.+)"); for (int i = 0; i < _bibliographic_fields.count(); ++i) { bf.setPattern(p.arg(_bibliographic_fields.at(i))); if (bf.indexIn(text) > -1) _current_reference[_bibliographic_fields.at(i)] = _bpP->parse(_bibliographic_fields.at(i), bf.cap(1)); } } void heuristicBibParser::guessVolumePagesYear(const QString& text) { // Does several volume pages year formats if (_reliable_pages && _reliable_volume && _reliable_number) return; // J. Sci., 108 (15), 3206, 2004 // J. Sci., 108 (15), 3206 2004 QRegExp rxH("(\\d+)\\s*\\((" + _hyphen_nums + ")\\)\\s*[,:]\\s*(" + _hyphen_pages + ")[,\\s]+(19|20)(\\d\\d)"); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_number] = _bpP->parse(_number, rxH.cap(2)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(3)); _current_reference[_year] = _bpP->parse(_year, rxH.cap(4) + rxH.cap(5)); return; } // J. Sci., 108 (15), 3206 (2004) rxH = QRegExp("(\\d+)\\s*\\((" + _hyphen_nums + ")\\)\\s*[,:]\\s*(" + _hyphen_pages + ")[,\\s]*\\((19|20)(\\d\\d)\\)"); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_number] = _bpP->parse(_number, rxH.cap(2)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(3)); _current_reference[_year] = _bpP->parse(_year, rxH.cap(4) + rxH.cap(5)); return; } if (_reliable_pages && _reliable_volume) return; // J. Sci. 124, 204109 2006 // J. Sci. 124, 204109, 2006 rxH = QRegExp("(\\d+)[,:]\\s*(" + _hyphen_pages + ")[,\\s]+(19|20)(\\d\\d)"); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); _current_reference[_year] = _bpP->parse(_year, rxH.cap(3) + rxH.cap(4)); return; } // 120, 8425 - 8433 (2004) // J. Sci. 30, 2745 (1984) rxH = QRegExp("(\\d+)[,:]\\s*(" + _hyphen_pages + ")[,\\s]*\\((19|20)(\\d\\d)\\)"); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); _current_reference[_year] = _bpP->parse(_year, rxH.cap(3) + rxH.cap(4)); return; } } void heuristicBibParser::guessVolumeYearPages(const QString& text) { // Does several volume year pages formats if (_reliable_number && _reliable_volume) return; // J. Sci. 203 (2003) 209. QRegExp rxH("(\\d+)\\s*\\(" + _current_reference.value(_year) + "\\)\\s*(" + _hyphen_pages + ')'); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); return; } } void heuristicBibParser::guessYearVolumePages(const QString& text) { // Does several year volume pages formats if (_reliable_pages && _reliable_volume && _reliable_number) return; // J. Sci. 1995 January 25; 247(4):536-40. // J. Sci. 1995, 247(4):536-40. QRegExp rxH(_current_reference.value(_year) + "[\\w ]{0,15}[,:; ]\\s*(\\d+)\\s*\\((" + _hyphen_nums + ")\\)\\s*[,:;]\\s*(" + _hyphen_pages + ')'); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_number] = _bpP->parse(_number, rxH.cap(2)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(3)); _reliable_pages = true; _reliable_volume = true; return; } // J. Sci. (1999), 86, 3, pp. 635-648 rxH = QRegExp("\\(" + _current_reference.value(_year) + "\\)" + "\\s*[,:;]\\s*(\\d+)\\s*[,:;]\\s*(" + _hyphen_nums + ")\\s*[,:;]\\s*(?:pp)?\\.?\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_number] = _bpP->parse(_number, rxH.cap(2)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(3)); _reliable_pages = true; _reliable_volume = true; return; } if (_reliable_volume) return; // J. Sci. 1995 January 25; 247:536-40. // J. Sci. 2005, 103, 818 // J. Sci. 2002;9:101–106.5. rxH = QRegExp(_current_reference.value(_year) + "\\s*[\\w ]{0,15}[,:;]\\s*(\\d+)\\s*[,:;]\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); _reliable_pages = true; _reliable_volume = true; return; } // J. Sci. 2005 103:818 rxH = QRegExp(_current_reference.value(_year) + "\\s+(\\d+)\\s*:\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); return; } // (2006) J. Sci. 39:3047 rxH = QRegExp("\\(" + _current_reference.value(_year) + "\\)\\D{5,30}(\\d+)\\s*[,:;]\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); return; } // 2006 J. Sci. 39 3047 rxH = QRegExp(_current_reference.value(_year) + "\\D{5,30}(\\d+)\\s*[,:; ]\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); return; } } cb2bib-2.0.3/src/c2b/PaxHeaders/searchPattern.cpp0000644000000000000000000000013215104461633016464 xustar0030 mtime=1762812827.718761878 30 atime=1762812828.038759355 30 ctime=1762812827.722761847 cb2bib-2.0.3/src/c2b/searchPattern.cpp0000644000175000001440000003051015104461633020454 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "searchPattern.h" #include "multipatternLengths.h" #include "triads.h" #include #ifndef __has_cpp_attribute #define __has_cpp_attribute(name) 0 #endif #if __has_cpp_attribute(fallthrough) #define FALLTHROUGH __attribute__((fallthrough)) #else #define FALLTHROUGH #endif /** Top level driver for calling cb2Bib search types */ searchPattern::searchPattern(const QString& pattern, const QString& patternType) : _matcher(pattern, typemap().value(patternType), Qt::CaseInsensitive) { _modifier.NOT = false; _modifier.string = _matcher.typedpattern; _rank = 0; } searchPattern::searchPattern(const bool NOT, const bool caseSensitive, const QString& patternType, const QString& scope, const QChar& yearScope, const QString& pattern) : _matcher(pattern, typemap().value(patternType), qtcase(caseSensitive)) { _modifier.NOT = NOT; _modifier.string = _matcher.typedpattern; _modifier.scope = scope; _modifier.yearScope = yearScope; if (_modifier.NOT) _formatted_string += "NOT."; _formatted_string += QString(" [%1][%2|case=%3]").arg(_modifier.string, patternType).arg(caseSensitive); if (_modifier.scope == "year") _formatted_string += QString(" IN [%1(%2)]").arg(_modifier.scope).arg(_modifier.yearScope); else _formatted_string += QString(" IN [%1]").arg(_modifier.scope); // Set an approximate ranking to speed up composite searches _rank = 0; if (_modifier.scope == "file") _rank += 200; else if (_modifier.scope == "all") _rank += 100; else if (_modifier.scope == "year" || _modifier.scope == "volume" || _modifier.scope == "pages") _rank += 50; else _rank += 1; if (!caseSensitive) _rank *= 2; if (_matcher.type == FixedStringAllWords || _matcher.type == FixedStringAnyWord) _rank *= 5; else if (_matcher.type == ApproximateString) _rank *= 10; else if (_matcher.type == RegularExpression) _rank *= 20; } const QStringList searchPattern::types() { return typemap().keys(); } const QString searchPattern::type(const Type t) { return typemap().key(t); } const QMap searchPattern::typemap() { QMap tm; tm.insert(QObject::tr("Approximate string"), ApproximateString); tm.insert(QObject::tr("Context"), Context); tm.insert(QObject::tr("Fixed string: All Words"), FixedStringAllWords); tm.insert(QObject::tr("Fixed string: Any Word"), FixedStringAnyWord); tm.insert(QObject::tr("Fixed string: Context"), FixedStringContext); tm.insert(QObject::tr("Fixed string"), FixedString); tm.insert(QObject::tr("Regular expression"), RegularExpression); tm.insert(QObject::tr("Wildcard"), Wildcard); return tm; } searchPattern::matcher::matcher(const QString& pattern, const Type t, const Qt::CaseSensitivity cs) : csensitivity(cs), type(t), alength(-1), mlength(-1), slength(-1) { const int plength(_set_typed_pattern(pattern)); switch (type) { default: c2bUtils::warn(QObject::tr("Internal Error: Invalid search pattern type. Set to 'Approximate string'")); FALLTHROUGH; case ApproximateString: { appexp.setPattern(typedpattern, cs); if (appexp.isMultipattern()) { signature = triads::textSignature(typedpattern); subsignatures = triads::textSignature(appexp.substrings()); } else // Skip signatures for regular expression case { regexp = appexp.regexp(); type = RegularExpression; } } break; case Context: { cstemexp.setPattern(typedpattern, cs); signature = triads::textSignature(cstemexp.signatureString()); } break; case FixedStringAnyWord: { wordexp.setPattern(typedpattern, wordPattern::AnyWord, cs); signature = triads::textSignature(typedpattern); subsignatures = triads::textSignature(wordexp.substrings()); } break; case FixedStringAllWords: { wordexp.setPattern(typedpattern, wordPattern::AllWords, cs); signature = triads::textSignature(typedpattern); subsignatures.fill(signature, wordexp.subpatternCount()); } break; case FixedStringContext: { cwordexp.setPattern(typedpattern, cs); signature = triads::textSignature(typedpattern); } break; case FixedString: { strexp.setPattern(typedpattern); strexp.setCaseSensitivity(cs); signature = triads::textSignature(typedpattern); } break; case RegularExpression: { #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) & QT_VERSION < QT_VERSION_CHECK(6, 0, 0) const QRegularExpression::PatternOptions po(QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::OptimizeOnFirstUsageOption); #else const QRegularExpression::PatternOptions po(QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption); #endif regexp.setPattern(typedpattern); regexp.setPatternOptions(cs == Qt::CaseSensitive ? po : po | QRegularExpression::CaseInsensitiveOption); } break; case Wildcard: { #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) & QT_VERSION < QT_VERSION_CHECK(6, 0, 0) const QRegularExpression::PatternOptions po( QRegularExpression::InvertedGreedinessOption | QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::OptimizeOnFirstUsageOption); #else const QRegularExpression::PatternOptions po(QRegularExpression::InvertedGreedinessOption | QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption); #endif regexp.setPattern(_wildcard_escaped(typedpattern)); regexp.setPatternOptions(cs == Qt::CaseSensitive ? po : po | QRegularExpression::CaseInsensitiveOption); signature = triads::textSignature(typedpattern); } break; } switch (type) { case Context: mscorer.setPattern(cstemexp.patternLengths()); break; case FixedStringContext: { const bool hasdot(typedpattern.contains(QLatin1Char('.'))); const int nblanks(typedpattern.count(QLatin1Char(' '))); mscorer.setPattern(multipatternLengths::scorerLengths(plength, nblanks, hasdot)); } break; default: mscorer.setPattern(plength); break; } #ifdef C2B_DEBUG_SEARCHING qDebug() << "searchPattern::matcher::mscorer pattern lengths " << mscorer.plengths; #endif } bool searchPattern::matcher::match(const QString& contents) const { alength = -1; mlength = -1; slength = -1; switch (type) { case ApproximateString: return appexp.matches(contents); case Context: return cstemexp.indexIn(contents) != -1; case FixedStringAnyWord: case FixedStringAllWords: return wordexp.matches(contents); case FixedStringContext: return cwordexp.indexIn(contents) != -1; case FixedString: return strexp.indexIn(contents) != -1; default: return regexp.match(contents).hasMatch(); } } bool searchPattern::matcher::match(const documentContents& contents) const { alength = -1; mlength = -1; slength = -1; switch (type) { case ApproximateString: return _match_any(appexp.subpatternCount(), appexp.submatchers(), contents); case Context: return _match(cstemexp, signature, contents); case FixedStringAnyWord: return _match_any(wordexp.subpatternCount(), wordexp.submatchers(), contents); case FixedStringAllWords: return _match_all(wordexp.subpatternCount(), wordexp.submatchers(), contents); case FixedStringContext: return _match(cwordexp, signature, contents); case FixedString: return _match(strexp, signature, contents); default: return _match(regexp, signature, contents); } } /** Context Matching There are ambiguities for a pattern |w1 w2| when matching a text being for instance either |...w1...w1 w2...| or |...w2...w1 w2...| with operators Context and FixedStringContext. Typical leftmost-longest-rule operators would match |w1...w1 w2| and |w2...w1|, respectively, while on text search usage the alternate match |w1 w2| is preferred because it is closer to the user supplied pattern. Since document ranking is based on the closeness pattern-match, the following function defines the advance length for Context and FixedStringContext as two chars instead of the full matched length. This is, match overlapping is permitted, and the match |w1 w2| will be obtained if present. In addition, excerpts are in this way closer to expectation. */ int searchPattern::matcher::index(const QString& contents, const int from) const { int i; switch (type) { case ApproximateString: i = appexp.indexIn(contents, from); mlength = appexp.matchedLength(); alength = mlength; slength = mlength; return i; case Context: i = cstemexp.indexIn(contents, from); mlength = cstemexp.matchedLength(); alength = std::min(2, mlength); slength = cstemexp.stemmedLength(); return i; case FixedStringAnyWord: case FixedStringAllWords: i = wordexp.indexIn(contents, from); mlength = wordexp.matchedLength(); alength = mlength; slength = mlength; return i; case FixedStringContext: i = cwordexp.indexIn(contents, from); mlength = cwordexp.matchedLength(); alength = std::min(2, mlength); slength = mlength; return i; case FixedString: i = strexp.indexIn(contents, from); mlength = strexp.pattern().length(); alength = mlength; slength = mlength; return i; default: regexp_match = regexp.match(contents, from); i = regexp_match.capturedStart(); mlength = regexp_match.capturedLength(); alength = mlength; slength = mlength; return i; } } int searchPattern::matcher::_set_typed_pattern(const QString& pattern) { const QRegExp rmors("\\|[^\\s]*"); const QRegExp rmnws("[\\W_]"); const QRegExp rmnls("[\\W\\d]"); QString stripped(pattern); switch (type) { case ApproximateString: case Context: case FixedStringAllWords: c2bUtils::replace(stripped, rmors, " "); c2bUtils::replace(stripped, rmnws, " "); break; case FixedStringAnyWord: c2bUtils::replace(stripped, rmnws, " "); break; case FixedStringContext: c2bUtils::replace(stripped, rmors, " "); break; case RegularExpression: c2bUtils::replace(stripped, rmnls, " "); break; default: break; } stripped = stripped.simplified(); const int plength(type == FixedStringAllWords || type == FixedStringAnyWord ? 0 : stripped.length()); switch (type) { case Context: case FixedString: case RegularExpression: case Wildcard: typedpattern = pattern.simplified(); break; default: typedpattern = stripped; break; } #ifdef C2B_DEBUG_SEARCHING qDebug() << "searchPattern::matcher::_set_typed_pattern pattern " << pattern << pattern.length(); qDebug() << "searchPattern::matcher::_set_typed_pattern stripped " << stripped << stripped.length() << plength; qDebug() << "searchPattern::matcher::_set_typed_pattern typedpattern " << typedpattern << typedpattern.length(); #endif return plength; } QString searchPattern::matcher::_wildcard_escaped(const QString& pattern) { QString scaped; for (int i = 0; i < pattern.length(); ++i) if (pattern.at(i) == '*') scaped += ".*"; else if (pattern.at(i) == '?') scaped += '.'; else scaped += QRegularExpression::escape(pattern.at(i)); return scaped; } cb2bib-2.0.3/src/c2b/PaxHeaders/idMaker.cpp0000644000000000000000000000013115104461633015234 xustar0030 mtime=1762812827.690762099 29 atime=1762812827.99875967 30 ctime=1762812827.694762067 cb2bib-2.0.3/src/c2b/idMaker.cpp0000644000175000001440000002417015104461633017232 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Improvements and modifications: * July 2009 - Added <>, (C) 2009 by Dayu Huang ***************************************************************************/ #include "idMaker.h" #include "settings.h" idMaker::idMaker(const QString& patternKey, QObject* parento) : QObject(parento), _pattern_key(patternKey) { loadSettings(); connect(settings::instance(), SIGNAL(newSettings()), this, SLOT(loadSettings())); } /** \page predefinedplaceholders Predefined Placeholders \section idplaceholders Cite and Document ID Placeholders - <> Takes first three letters of the last word of all authors's last name in cite, and converts to lowercase. - <> Takes capitalized initials of all authors in cite. - <> Takes first author last name. - <> Takes first author last name in lowercase. - <> This placeholder is meant to be used alone, and only for document IDs. It takes the pattern defined for the cite ID. If the cite ID is modified manually, the document ID is synchronized automatically. - <> Takes capitalized initials of journal name. - <> First page. - <> First page, written as, e. g., 'p125'. - <></tt> Title. To truncate titles exceeding a maximum length <tt>l</tt> use <tt><<title_l>></tt>, where <tt>l</tt> stands for an integer value. - <tt><<title_underscored>></tt> Title with blanks set to underscores. To truncate title to <tt>l</tt> characters use <tt><<title_underscored_l>></tt>. - <tt><<title_first_word>></tt> First word in title, in lowercase. - <tt><<volume>></tt> Volume number. - <tt><<year_abbreviated>></tt> Last two digits from year. - <tt><<year_full>></tt> All digits from year. <b>Note:</b> If <tt>author</tt> is empty, <tt>editor</tt> will be considered instead. On conference proceedings or monographs this situation is usual. Similarly, if <tt>title</tt> is empty, <tt>booktitle</tt> is considered. <b>Note:</b> Only one placeholder of a given field, e. g. <tt><<author_first>></tt> or <tt><<author_all_initials>></tt>, should be used to compose the ID patterns. cb2Bib only performs one substitution per field placeholder. <b>Note:</b> cb2Bib performs a series of string manipulations, such as stripping diacritics and ligatures, aimed to provide ID values suitable for BibTeX keys and platform independent filenames. Currently only ASCII characters are considered. \section citeplaceholders Cite Command Placeholders - <tt><<citeid>></tt> The <tt>citeid</tt> placeholder replicates the pattern for each citation in the selected citation list. For example, the pattern <tt>\\citenum{<<citeid>>}</tt> expands to <tt>\\citenum{cid1} \\citenum{cid2} ... </tt> - <tt><<prefix|citeids|separator>></tt> The <tt>citeids</tt> placeholder replaces the selected citation list by prepending <tt>prefix</tt> and appending <tt>separator</tt> within the pattern. For example, the markdown pattern <tt>[<<\@|citeids|;>>]</tt> expands to <tt>[\@cid1; \@cid2; ...]</tt>, and the LaTeX pattern <tt>\\citeauthor{<<|citeids|,>>}</tt> expands to <tt>\\citeauthor{cid1, cid2, ...}</tt>. <b>Note:</b> For additional information on cite commands see \htmlonly <a href="https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management" target="_blank">LaTeX Bibliography Management</a> \endhtmlonly and \htmlonly <a href="https://pandoc.org/MANUAL.html#citations" target="_blank">Pandoc User's Guide</a>. \endhtmlonly */ QString idMaker::makeID(const bibReference& reference) { if (_id_pattern.isEmpty()) return QString(); if (_id_pattern.contains(QLatin1String("<<citeid>>"))) return reference.citeidName; // Initialize fields _author = reference.anyAuthor(); _journal = reference.value(QLatin1String("journal")); _pages = reference.value(QLatin1String("pages")); _title = reference.anyTitle(); _volume = reference.value(QLatin1String("volume")); _year = reference.value(QLatin1String("year")); // Set cite ID QString id(_id_pattern); if (_id_pattern.contains(QLatin1String("<<author_first>>"))) make_author_first(&id); else if (_id_pattern.contains(QLatin1String("<<author_first_lowercase>>"))) make_author_first_lowercase(&id); else if (_id_pattern.contains(QLatin1String("<<author_all_abbreviated>>"))) make_author_all_abbreviated(&id); else if (_id_pattern.contains(QLatin1String("<<author_all_initials>>"))) make_author_all_initials(&id); if (_id_pattern.contains(QLatin1String("<<journal_initials>>"))) make_journal_initials(&id); if (_id_pattern.contains(QLatin1String("<<pages_first>>"))) make_pages_first(&id); else if (_id_pattern.contains(QLatin1String("<<ppages_first>>"))) make_ppages_first(&id); if (!_title_pattern.isEmpty()) if (_id_pattern.contains(_title_pattern)) make_title(&id); if (_id_pattern.contains(QLatin1String("<<title_first_word>>"))) make_title_first_word(&id); if (_id_pattern.contains(QLatin1String("<<volume>>"))) make_volume(&id); if (_id_pattern.contains(QLatin1String("<<year_abbreviated>>"))) make_year_abbreviated(&id); else if (_id_pattern.contains(QLatin1String("<<year_full>>"))) make_year_full(&id); return id; } void idMaker::make_author_first(QString* id) { QRegExp rx("([-'\\s\\w]+)(?:\\sand|$)"); rx.setMinimal(true); rx.indexIn(_author); _author = rx.cap(1); if (c2bUtils::nonAsciiLetter.indexIn(_author) >= 0) _author = c2bUtils::toAscii(_author, c2bUtils::Cleanup); id->replace(QLatin1String("<<author_first>>"), _author); } void idMaker::make_author_first_lowercase(QString* id) { QRegExp rx("([-'\\s\\w]+)(?:\\sand|$)"); rx.setMinimal(true); rx.indexIn(_author); _author = rx.cap(1).toLower(); if (c2bUtils::nonAsciiLetter.indexIn(_author) >= 0) _author = c2bUtils::toAscii(_author, c2bUtils::Cleanup); id->replace(QLatin1String("<<author_first_lowercase>>"), _author); } void idMaker::make_author_all_abbreviated(QString* id) { // If there is less than 3 letters in their last name's last word, // then use all the letters in the last name's last word QString temp_author; QRegExp rx("([-'\\w]{1,3})(?:[-'\\w]*)(?:\\sand|$)"); rx.setMinimal(true); rx.indexIn(_author); int pos(0); while ((pos = rx.indexIn(_author, pos)) != -1) { temp_author += rx.cap(1); pos += rx.matchedLength(); } _author = temp_author.toLower(); if (c2bUtils::nonAsciiLetter.indexIn(_author) >= 0) _author = c2bUtils::toAscii(_author, c2bUtils::Cleanup); id->replace(QLatin1String("<<author_all_abbreviated>>"), _author); } void idMaker::make_author_all_initials(QString* id) { c2bUtils::remove(_author, QRegExp("\\b\\w\\b")); _author.remove(" and "); if (c2bUtils::nonAsciiLetter.indexIn(_author) >= 0) _author = c2bUtils::toAscii(_author, c2bUtils::Cleanup); c2bUtils::remove(_author, QRegExp("[a-z]")); id->replace(QLatin1String("<<author_all_initials>>"), _author); } void idMaker::make_journal_initials(QString* id) { c2bUtils::remove(_journal, QRegExp("[^A-Z]")); id->replace(QLatin1String("<<journal_initials>>"), _journal); } void idMaker::make_pages_first(QString* id) { _pages = c2bUtils::firstPage(_pages); id->replace(QLatin1String("<<pages_first>>"), _pages); } void idMaker::make_ppages_first(QString* id) { _pages = c2bUtils::firstPage(_pages); if (!_pages.isEmpty()) if (_pages.at(0).isDigit()) _pages = 'p' + _pages; id->replace(QLatin1String("<<ppages_first>>"), _pages); } void idMaker::make_title(QString* id) { if (c2bUtils::nonAsciiLetter.indexIn(_title) >= 0) _title = c2bUtils::toAscii(_title, c2bUtils::FromBibTeX); _title = _title.left(_title_max_length).trimmed(); // Avoid possible trailing blank if (_is_title_underscored) _title.replace(QLatin1Char(' '), QLatin1Char('_')); id->replace(_title_pattern, _title); } void idMaker::make_title_first_word(QString* id) { if (c2bUtils::nonAsciiLetter.indexIn(_title) >= 0) _title = c2bUtils::toAscii(_title, c2bUtils::FromBibTeX); const QStringList ws(c2bUtils::split(_title.toLower(), c2bUtils::nonAsciiLetter, _QT_6_SkipEmptyParts)); _title.resize(0); for (int w = 0; w < ws.count(); ++w) if (ws.at(w).length() > 2 && ws.at(w) != QLatin1String("are") && ws.at(w) != QLatin1String("the")) { _title = ws.at(w); break; } id->replace(QLatin1String("<<title_first_word>>"), _title); } void idMaker::make_volume(QString* id) { _volume.remove(' '); id->replace(QLatin1String("<<volume>>"), _volume); } void idMaker::make_year_abbreviated(QString* id) { _year = _year.right(2); id->replace(QLatin1String("<<year_abbreviated>>"), _year); } void idMaker::make_year_full(QString* id) { id->replace(QLatin1String("<<year_full>>"), _year); } void idMaker::loadSettings() { _id_pattern = settings::instance()->value(_pattern_key).toString(); QRegExp title_pattern("(<<title(?:_underscored)?(?:_\\d+)?>>)"); if (title_pattern.indexIn(_id_pattern) > -1) { _title_pattern = title_pattern.cap(1); c2bUtils::remove(_title_pattern, QRegExp("\\D")); _title_max_length = _title_pattern.toInt(); if (_title_max_length == 0) _title_max_length = -1; _title_pattern = title_pattern.cap(1); _is_title_underscored = QRegExp("_underscored(?:_\\d+)?>>").indexIn(_title_pattern) >= 0; } else _title_pattern.clear(); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/txt�����������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013716� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.186766073 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/txt/���������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�015757� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/txt/PaxHeaders/suffixes.txt����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016370� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.186766073 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/txt/suffixes.txt���������������������������������������������������������������0000644�0001750�0000144�00000015732�15104461330�020364� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a abilities ability able abled ablely ableness ablenesses ables abling ably ac acea aceae acean acene aceous acousia acoustic acy ad ada addy ade adenia adic adiene adiyne adol ads aemia aesthesia aesthetic against age agnosia agog agogue agra al ales algesia algia aling alis alism alisms alities alitis ality alization alizations alize alized alizer alizers alizes alizing alli allied allies allis ally allying alness als amide amidine amidyl amine aminyl an ana ance ances ancies ancy ane angle ans ant anted anthema anting antness ants ar arch arche archy ard aria arian aries arion arit arity arities arium ary as ase asis ast aster asthenia ata ate ated ateful atefulness ately ateness ates ating atings ation ational ationals ations ative atively ativeness atives ativity ato ator atored atoring ators atory atresia atriene atriyne atrophia atum atus auxe basia bility biosis biotic biotics blast ble bleness blepharia blepsia blepsy bly boom bound bounds brachia bund bus cace caine calities cality cally calness capnia cara carbaldehyde carbonitrile carbonyl carboxamide carboximidamide carboxylate carboxylic carcinoma cardia cardiac carp catharic cele cene centesis centric cephalia cephalus cephaly cera cerca cerebral chesia chezia chirurgia chondria chorea chroia chromasia chromatic chrome chylia cidal cide clasia clasis clasm clast clastic cle cleisis clinous clonia clysm cnemia coccus coele cole comma cracy crania crasia crat cratia crine crotic cular cule culum culus current cusis cy cycle cyst cystic cyte cythemia d dactylia demic dendron dermia dermic desis desma diene diide diium diol dione dipsia diyl diylidene diylylidene dom donita dorsal drome duct dynamia dynamy dynia e eabilities eability eable eableness eables eably eae eal ealed ealing ealism eality ealization ealize ealized ealizing eally ealness eals ecane echia ecin ecine ecoia ectasia ectasis ectasy ectomy ectopia ed edema edly edness ee eement eements een eence eer eered eering eers ees eg egasia ein el ella elle ellum ema eme ement emented emently ementness ements emetic emia empyema en ence enceful encephalia encephaly enchyma ency ene ened ener eness enesses ent entative entatively entativeness entatives entativity ented entful entfulness enting ently entness ents eous eously eousness epane epin epine er erative eratively erativeness ered erful erfulness ergetic ergic ergy eries ering erings erness erotic ers ery es escence escense escent ese esis esp esque ess est esthesia et etane etc ete etene eth etic etidine etine ette etum eus facient faction fast febrile fer ferent ferous fibroma fic fication fid field fields fish fishes flect flex fluent fold food foot form forme found founds fuge ful fullness fully fulness fulnesses fuls fuse fy fying gamy gen gene genesia genesis genia genic gerous geusia geustia gine glossia glycaemia gnathia gnomy gnosia gnosis gon gony gram graph grapher graphia graphy gyne h hale hedron helminth herbicide hood hound hounds hydria hydride i ia iac ial ian iasis iatric iatrician iatry ible iblely ibleness ibles iblies ibly ic ical icalism icalities icality ically icals ice iced ician icing icities icitis icity ics icus id ida idae idan ide idea ides idin idine idines idium ido idyl ie ied ier ies iest iform iforme ify il ile iliac ility illa illus ily imidamide imide imine iminyl in ina inae inane ine ineae iness inesses ing ingly ings ingy ini initio io ion ional ioned ionful ioning ionings ions ior ious irane irene iridine irine iscus ise ised ish ishly ishness ishy ising isk isks ism isms ismus ist istic ists ite ited ites iti itiative itic ities itious itis itium itol ity ium iumyl ive ivelies ively iveness ives ivities ivitis ivity ization izations ize ized izer izers izes izing kijn kin kind kinds kinesia kinesis l labe labial labile lability lable labled lablely lableness lables lably lagnia lagny lalia land lapse lateral lates lating lation lational lations lative latively lativeness lator lators latry le leability leable leableness leal led lemma leness leous lepsy leptic ler lered lering lers les less lesses lessly lessness let lexia like likes lines ling lings lipsis lite lith lithiasis lithotomy lity lobe log logia logical logist logue logy long lucent lunar ly lying lymph lyse lysin lysis lyst lyte lytic lyze ma malacia man mancy mania maniac manic manship mark marks mastia masty mazia megaly melia men ment mentative mentatively mentativeness mented mentia menting mently ments mer mere meria meric merics meter metr metria metric metries metry mimesis mixis mnesia mo moria most motor mrs myelia neonatology nephric ness nessed nesses nessing neural neure neuria neuron nik nitrile node noia noid nom noma nome nomia nomy o oate ocane ocin ocine ock ode odonita oedema of ogen oic oid oidal oidea oin ol ola olane olate ole olene olic olics olidine oline ology ols olum olus oma ome on onane one ones onia onic onin onine onio onite onites onium oniumyl ons ont ope opia opsia opsy opy or orexia organic orial ories orium ors ory os oscopy ose oside osis osmia osteon osteum ostomy ote otia otic otomy ous oused ousing ously ousness oxemia oxia oyl pachy paedic paenia pagus pancreatic para partite path pathetic pathia pathic pathy ped pede penia pennate pepsia peptic pert petal pexia pexis pexy phagia phane phasia phemia phil phile philia philias philic phily phobe phobia phone phones phonia phonic phore phoresis phoria phragm phrasia phrenia phrenic phthongia phyll phyma physical physics physis phyte picrin plakia plania plasia plasm plast plastia plastic plasty plegia plegic plex plexia plexus plexy ploid pnea pnoea pod podia poetic poiesis poo pore post potent pragia praxia praxis privia proctia proof proofs prosopia prost pselaphesia psychic psychosis pterygium ptosis ptysis pubic pulsion pyrexia renal rhachia rhage rhagia rhaphy rhea rhexis rhoea room rooms rrh rrhachia rrhage rrhagia rrhaphy rrhea rrhexis rrhoea ry s scelia schisis sclerosis scope scopy scribe script se sect sector selenal selenoic selenol selone sepsis septic ship sia sion sis site sitia solve soma somatic some someness somenesses somia spasm spermia sphere sphygmia spire spore stabile stage stalsis stasis stat state staxis stenia stenosis ster sthenuria stichia stole stoma stome stomy stone stophy strongyle sts studies style sulfenic sulfinic sulfonate sulfonic sultam sultone surgery sy synthesis t tactic taxia technics technology ted tela tellurol tension tention tetrayl th thecium thelium therapeutic therapy therm thermia thermy thetic thioic thiol thiolate thione thymia thyrea tic tically tics tion tode tome tomic tomy tonia tonic tony topia topy toxin trauma trema tresia tribe trichia triene triide trione tripsis tripsy trix triyl tron trope trophia trophic trophy tropic tropics tropos tropy tude tumescence tuse ty typia uida uide uidyl ula ular ulation ule ulent ulose ulous ulum ulus um ums ura ure urgia urgy uria uris us uses valve venous ventral verge verse vert vertebral ville volute vore vorous ward wards way ways with wood worm y yl ylene ylia ylidene ylidyne ylium yliumyl ylylidene ylylidyne yne zoa zoite zoon zyme ��������������������������������������cb2bib-2.0.3/src/c2b/txt/PaxHeaders/prefixes.txt����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016361� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.186766073 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/txt/prefixes.txt���������������������������������������������������������������0000644�0001750�0000144�00000022160�15104461330�020346� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������a ab abdomin abs ac acanth acantho acar acet acetab aceto acou acous acouso acr acro actin acu ad add aden adeno adenoid adip adipo adren adreno aemia aer aero aesthesi aesthesio aeti af after ag agri al ala alb albi alg alge algesi algio algo ali aliment alkyl all allo alto alveol am amb ambi ambly ambyl ameb ametr amic amidino amino amm amni amnio amph amphi amphibi ampho amyl an ana ancylo andr andro anemo ang angi angio anis ankyl ankyle ankylo ano anomalo ant ante anter antero anth antho anthra anthro anthrop anthropo anti antr ap aph api apo aqu aqua aqui aquo ar arch archa archaeo arche archi argyr aristo arrhen arsa arshae arter arteri arterio arteriol arth arthr arthro arthron articul articulo as asco aster asthen astr at ate atel ather atm atmo atom atreto atri atrium atto audi aur auri auricul aut auto aux axi axilla aza azido azo azot bacill back bacter bacteri bacterio bactr balan bar barb baro bary basi baso bath be ben bene benzo ber bi bibli biblio bicyclo bin bio bis bisma blast blasto blenn bleph blephar blepharo bon bora brachi brachia brachio brachy brady branchi breph brev brevi brom bronch bronchi bry bryo bucc bucco cac caco caen calc calor cancer cancr canth capill capit caps caput carb carbamimidoyl carbamoyl carbox carboxy carboxylate carboxylato carcin carcino cardi cardio carn carnis carp carpal cary case cat cata cath cato cau caud caul caus cav cel cell cen cente centi centr centri cephal cephalo cer cerat cerebell cerebr cerebro cervic chalc chancr cheil cheir chel chele chem chemi chemico chemio chemo chil chir chlor chloro chloroformyl chol cholangi choledoch chondr chondrio chondro chord chori chrom chroma chromato chrome chromo chron chrono chyle chym cili cilia cine circa circum cirrho cirru cis citra clas clast cleid cleist clin clist co cocc coccyg coel coen col cole coll colo colono colp com con coni contra cor core corp corpus cort cortic cosmo cost cotyl counter crani cranio cresc cret cric crin crur cry cryo crypt cteno cucmul cumul cusp cut cuti cyan cyano cyber cyci cycl cyclo cymbo cyn cyrt cyst cysti cysto cyt cyte cytis cyto da dacrio dacry dacty dactyl dactylo de dea dec deca deci deka deliquesc dem demi demo dendr dent der derm dermato dermis des desm deuter deutero dextr dextro di dia diaza dicta dif differ digit diicosa dilia din dipl diplo dis dodec dodeca doheptaconta dohexaconta doicosa dolich dolicho dont dorm dors drom du duo duoden duodeno dur dy dynam dynamo dys e ec echin eco ect ecto ectro ef eka el ele electr electro elytr em embry emet emnea en encephal encephalo end endo ennea enneaconta ent enter entero ento entom eole ep eph epi episi equi erg ergy erot erythr erythro eso esthesio ethno ethoxy eu eury ev ex exa exo extra extro faci fasci febri femto ferr ferro feto fibr fibro fil fila fis fiss flagell flav flor flu fluct fluor foet foli for fore formyl fract front fus galact galacto gam gamet gangli gastr gastro ge gelat gemin gemm gen gene geni genu geny geo ger germa geront gibi giga giganto glia glob gloss glossa glosso glott glotto gluc gluco glut glyc glyco gn gnath gnatho gon goni gono gony granul graph grav gravid gravis gymno gyn gynae gynaeco gyne gyneco gyno gyr haem haema haemat haemato hal hallux halo halocarbonyl hapl haplo hapto hect hecta hecto hel helc heli helic hem hema hemat hemato hemi hemo hen hendeca hepar hepat hepatico hepato hept hepta heptacta heptadeca heptalia herb heter hetero hex hexa hexacta hexaicosa hexalia hibern hidr hidro hier hipp hist histio histo holo hom homeo homo horm hort hyal hybrid hydr hydro hydroperoxy hydrox hydroxy hygr hyl hymen hyp hyper hyph hypho hypno hypo hyps hypsi hyster hystero iatr ic ichthy icon icosa icosidi icosiocta icositri icter ide idea ideo idi idio ign il ile ileo ili ill im imino immuno in incret incud infero infra infro inguin ini insul inter intra intro intus iodo ir irid irido isch ischi ischio iso ite ithy ixodi jec jejun jug jugu juxta kak kali kaps kary karyo kat kata kel ken ker kerat kerato keraun kibi kilia kilo kin kine kinesi kinesio kino klept koilo kolp koly kon krym kym kyn kyph kypho kysth labi lac lachry lacri lacrim lacrimo lact lacti lacto laevo lal lamina lampro lan lapar lapis laryng laryngo lat later latero lecith lei leio lem lepid lepr lepto leuc leuco leuk leuko levo lex lien liga lign lim lin lingu linguo lio lip lipo liqu lith litho loc log loga logo longus loph loxo luc lue lumb lumi lumin lun lute ly lyc lymph lympho lys lyso lyss macr macro mag magn magna maj makro mal malac malar male malle mamm man mania marg mast masto maxilla maz mc meat mebi mechan mechano mecon med medi meg mega megal megalo meio mel mela melan melano meli men mening meningo menisc ment mer mercura mes mesa meso mesos met meta meteor meter meth metop metr metro micr micro mid migr mill mille milli mini minumus mio mis mit mito mnem mole moll mon mono mont morph morpho mort mot mov muc multi muscul musculo mut my myc mycel mycet myco myel myelo myl myo myria myring myringo myx myxo nano narc naris nas natr ne neco necr necro nem nema nemat neo neph nephr nephro ner nerv nesidi neur neuri neuro neutr niga noci noct nod nodus nomen non nona nonaconta nonacta nonadeca nonalia normo nos not novi nox nuc nucha nutri nyct nymph o oari oate ob oc occipit occlus oct octa octaconta octacta octadeca octaicosa octi octo octodeci ocul oculo odont odonto odyn odyno oedem oesophageal oesophago of oik ole olf olfact olig oligo om omni omphal onc oncho onco one oneir ont onych onycho onyx oo oophor oophoro oothec op ophidia ophthalm ophthalmo opistho ops opt opthal opthalm optic or ora orb orch orchi orchid orchido orchio organ organo ornith orrh orth ortho os osche oscu osm oss osseo ossi ost oste osteo ot oto ous out ov ovari ovario over ovi ovo oxa oxido oxo oxy pachy paed palat paleo pali palin palm palpebra palpit pan pant panto papilla par para part parvi path patho pebi pect pector ped pel pell pelv pelvi pelvo pene pent penta pentacta pentadeca pep per peri permea pero pes peta petal petr phac phaco phaeo phag phage phago phak phalan phall phan phaner phao pharmac pharmaco pharyng pharyngo phas phen pheno pheo pher phil philo phleb phlebo phleg phlogo phob phobo phon phono phor phos phospha phot photo phrag phren phreni phrenico phreno phthi phyc phyl phyll phylo phys physi phyt phyto pi pico picro piez pil pimel pinni pino pituit plan plankto plas plasm plasma plast plat platy pleo pleur pleura pleuro plex plic plumba pluri pne pneum pneuma pneumat pneumato pneumo pod podo poikilo poli polio pollex polples poly pom pon pont por porphyro port post postero prae pre presby presbyo prim primordis pro proct procto pronto pronus proprio pros prosop prot proto prox psamm pselaph pseud pseudo psor psych psyche psycho pter pterido ptoma ptyal pub puer pulm pulmo puls pur purpur py pyel pyelo pyg pyle pylor pyo pyon pyr pyret pyro quad quadr quadra quadri quarter quarti quasi quater quatr quin quinque quint r rachi radi radicul radio rami re rect recto red ren renes reno reptilis ret reticul reticulo retro revo rhabd rhabdo rhachi rhag rhe rhig rhin rhino rhiptid rhiz rhizo rhod rhodo rhyp rost rot roto rub rubr sacchar saccharo sacr salping salpingo sangui sanita sap sapr sapro sapros sarc sarco saturn saur scaph scat scel schis schist schisto schiz schizo sci scia scirrho scler sclero scolec scoli scolio scop scot scribe scrit scyt se sect secund sed selanyl selena selenocarboxy semei semi sens seps sept septa septe septi septic ser sesqui sess set sex sexdeci sexi sial sialo sicc sider sigmoid sigmoido sila sin sinap sinistr sinistro sit sito skia sol solv som soma somat somatico somato some somn son sonus sover spacel spano spasm spasmo spec spectr spectro sperm sperma spermato spermo sphaer sphen spher sphygm spic spin spinth spir spiro splanchn splanchni splanchno splen spleno spod spondyl spondylo spongi spor squam stann stanna staphyl stas stat steap stear steat stell sten steno sterc stere stereo stern steth sthen stheno stiba stom stoma stomat stomato strab strat strati strept stri strict stroph strum styl sub subter suc succ sud suf sug sulfanyl sulfeno sulfido sulfino sulfo sulfonato sum sup super supinus supra sur sursum sy syl sym syn syndesm syring sys system syto tabe tach tachy tact taenia tal talip taph tars tarso taut tax tebi techn tect teg tel tela tele tellanyl tellura telo temp tend tenia teno tenont tension tephr ter tera terat terr terti test tetan tetart tetr tetra tetraconta tetracta tetralia thall thanat thec their thel thelo thely thenar theo therap therm thermo thia thigm thio thiocarboxy thix thorac thoracico thoraco threp thrix thromb thrombo thym thyr thyro tibi toc toco ton tono top topo tors tox toxi toxico toxo tra trache trachel tracheo trachy trans tre tredo tri trich trichi trichia tricho tricta trideca triginta trigon trigono triicosa trilia tris trit trocho trop troph tub turb tuss twi tyman tympan tympano typ typhl tyr ul ula ultra un una undeci under ungu uni untriginta ur uran ureter urethro uri uric urico uro uron uter vagin valvul varic varico vas vascul vasculo vaso vect ven vent venter ventr ventricul verd vermi vertebr vesic vesico vice vig viginti vir viscer vit vita viv vivi volv vor vulv xanth xanthin xantho xen xeno xero xiph xyl yocto yotta zepto zetta zo zoa zoo zyg zygon zym zymo ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/txt/PaxHeaders/word_prefix_lexicon.txt�����������������������������������������0000644�0000000�0000000�00000000074�15104461330�020605� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.186766073 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/txt/word_prefix_lexicon.txt����������������������������������������������������0000644�0001750�0000144�00000006703�15104461330�022577� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������_about_ _abso _abstra _acces _accu _acety _acid _acta _actin _activ _adapt _adso _advanc _afte _agen _alert _algor _align _analys _and_ _anion _antib _antige _applic _appr _arabid _archiv _articl _assemb _asses _assoc _at_ _atom_ _atomic _atp _autom _bacil _bact _based _basis _behav _betw _bibli _bindi _bioc _bioi _biolog _biom _biosy _blood _bound _bovine _but_ _by_ _calci _calcul _campus_ _cataly _catio _ccs _cdn _cell_ _cells _cellul _center_ _centra _cereb _cerev _changes _channe _charac _chem_ _chemi _chlor _chrom _cien _citat _classi _clini _cloni _clust _collect _colleg _communic _compara _comparis _compl _compon _composi _compou _compu _conform _conse _consis _constr _contac _contai _continu _control _conversi _coord _copy _core_ _corpo _correla _couple _crystall _cubat _cult _cyc _cyt _data_ _datab _dehy _densi _depart _depen _deriv _descri _design _deskt _detai _detec _determi _devel _dft _differ _digg_ _digit _dimensi _direc _disea _dissoc _distanc _distr _diverg _divers _dna _doctora _domains _downl _droso _dyna _edite _editi _edito _effec _effi _eigenv _elec _elemen _emai _embry _enco _endot _energ _enh _enzy _epid _epit _equa _errat _escheri _estim _eval _evidenc _evol _exam _exch _exci _experi _expr _extra _facul _false_ _family _featu _federa _fibr _fluo _for_ _formal _format _formu _fract _fragm _from_ _funct _gaussi _generali _generat _geneti _genom _geolo _geom _gluco _gluta _glyc _granul _group _growt _hamiltoni _hepa _heter _highly _hist _homolo _hormon _htm _hybr _hydr _hyper _iden _image _imagi _immu _impl _improv _inc_ _index _indu _infe _infl _info _inhi _init _inst _integ _intera _interf _interm _inters _intro_ _introd _inves _invo _isolat _issu _items _journal _kinase _kinet _labora _lact _librarie _library _licens _ligan _linea _lipid _lipop _localiz _lymph _magnet _mammal _manusc _mappi _matchi _mathem _matric _matrix _measure_ _measurem _mechanis _mediat _medica _membe _membra _metab _metad _method _methy _metri _micr _mitoc _model_ _modeli _models _modif _modu _molec _morph _multi _muscl _mutant _mutati _myco _nanop _nanos _nanot _natu _nerve _netw _neural _neuron _new_ _nitr _nmr _nonp _normal _notes_ _novel_ _nucl _numer _obj _obse _of_ _on_ _onl _oper _optical _optim _orbi _organiz _origi _oxi _oxy _paper_ _papers _parall _paramet _partia _partic _patho _pathw _patients _pattern _pdf _peak_ _pept _perfo _permis _perox _pertur _phas _phos _phot _phylo _phys _plasm _polymer_ _polymera _popu _postin _potent _pract _predict _prepr _presen _primar _principl _probab _probl _proces _produ _profes _profi _progr _promo _prope _proteas _protei _proteo _proton _pseu _pub _purificat _putat _quadra _quantit _quantu _radical _reac _recep _recog _recom _recon _reduc _refere _regio _regr _regulat _relat _repl _report_ _reports _represe _requi _resea _resis _reso _resp _revea _review _ribos _rna _rotat _saccha _scale_ _scalin _scheme_ _school_ _scienc _scient _search _second _secret _segm _selec _sensit _sequen _series _sets_ _shell_ _signa _simila _simula _singu _sites _soft _solut _south_ _space_ _speci _spectr _sph _spin_ _stabili _standard_ _stati _stimu _strep _struct _studies _study _subject _subm _subsp _subst _subun _sulf _surf _syna _synth _syst _technic _techniq _techno _tempera _termina _tetr _the_ _theorem _theoreti _theori _theory _thermo _thesis _three _throu _tissu _to_ _tox _transc _transf _transi _transm _transp _treatm _tumo _type _ultr _unit _univ _usa_ _usi _variab _vesic _vibrat _virtua _visua _vitro _with_ _within _yeas �������������������������������������������������������������cb2bib-2.0.3/src/c2b/txt/PaxHeaders/triads.txt������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016022� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.186766073 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/txt/triads.txt�����������������������������������������������������������������0000644�0001750�0000144�00000005411�15104461330�020007� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������aeiloty ¦§³»¼ÀÂÉÍÑÛÜÝáþāĎďģıIJĵĶķĹļľĿŃńŅʼnƂƐƑƕƦƶǀdžǍǑǓǔǕǟǠǧǫǯǴǵȝȟȲȳȷȹȽɁɃɆɇɈɏɑɓɛɜɝɠɢɤɩɭɻɼ˙̪͍̒Ϳ΀΂ϛжџӜӫӳӷӾԁԐֱֶֻּ֭֩֯؈ؙؓؕؖآأؤحٹٽٿځچڌۋۘۙۚۛ۟ۡ۩۬ۮۯ۵ۻۿ܃܆܉܌܎܏ܘܙܧܳݣݥݧݫݰݱݵށޅދޏޚޥޱ޵޹޼߄ߜࡑࡕ࡛ࢄࢉࢍ࢓࢔࣓ࣜथ঍঒ণধফলৠਉਊਜਡਧਲਵ੉ੌੲ੺૱૵ૹૼ૾૿଀ଃ଄ଅଜଥ଩ଭଷୂୌ୙୛ଡ଼ଢ଼ୟୡ୥୧୪୫୬ୱ୵஄஑ஔச஠பயழஸு௅ே௉ௌ௎௓௔௕఑జశ఼౎ౖౠౡ౥౷౹౻಄ಅಈಭಯಲಳಶಷಸ಼ಽಾೃೈ೐೒೓ೖ೗೘೟ೡೢೣ೤೧೪೫೬೭೰ೲ೴೷೹೽ഄആഊഌഖഞതറാ෍෗ෛො฀กฐฑโ๭ແ໪໺ཏནབཛྷརལྠွ၀၁။ၓႳႴ폐ᅾᆋᆏᆖᆜᆩᆴሆቨጹᐍᐗᐠᐧᐨᐳᑍᑏᑡᑧᒙᒛᒜᒥᒳᓨᓬᔮᖅᖉᖌᖓᖔᖙᖟᖹᗇᗉᗑᗜᗞᗦᗩᗭᗱᗺᗻᗼᗾᘁᘔᘡᘪᘮᙄᙈᙉᙑᙔᙕᙗᙙᙜᙞᙢᙣᙥᙩᚱᚷᛖᛗᛞᛤᛥᛱᜋᜏ᜘᜚ᝌ᝙᝱ᝲ᝵᝷᝼᝽កជញឍទបលវឮ឴ᡡ᱂ᵱᵵᵿᶀᶒᶩᶬᶲᶴᷦᷨḋḖṃṈẲẸếểịốỒỡừἫἺὅὉὓ὞ὟὩὬὰήᾚᾶῺ ’‣‥⁅⁐₊₋ℱℳℷ℻⅀⅁⅂ⅆ⅖ⅣⅧⅫⅯⅰⅵⅶↁↅ←⇍⇒⇶∁∃∇∍∐−∗∙∝∡≳⊮⊸⊹⊽⋂⋉⋍⋭⌝⌟⌡⌣⌥〉⌬⌮⌯⌰⌲⍈⍤⎅⎉⎋⎍⎐⎒⎘⎙⎝⏖⏥⏦⏫⏭⏯⏱⏾␋␏␙␭␳␶⑙⑯⑲⑷⑺⒂⒇⒣⒥⒦⒧⒰⒱⒴⒵ⒶⒷⒽⓨ╝╡╤╦▀▆▜▞▴▸►◁◅◈◉◎◒◓◔◕◣◬☠☩☭☯☰☱☴☶☻☼♅⚃⚄⚍⚔⚜⚞⚤⚫⚭⚯⚽⛉⛍⛓⛗⛝⛣⛧⛬⛰⛱⛲✓✕✗✛✞✟✥✭✮✰✵✾✿❇❊❏❓❔❕❥❩❴➈➌⟗⠁⠱⠵⠶⠹⡂⡩⡭⡶⡷⣍⣏⣐⣑⣓⣕⣚⣟⣠⤝⤟⤨⤬⤮⥓⥗⥜⥩⥫⥭⥮⥱⥴⥷⥺⥼⥽⦷⦻⦿⧂⧃⧅⧉⧊⧋⧎⧙⧤⧯⧸⧼⧾⩵⪥⪩⪴⬋⬜⭱⭵ⵇⵉⵌⵍⵐⵓⵗⵘⵠⵢⵣ⵲⵼⵽ⶁⶄⶆⶋⶍⶕ⶗ⶭ⶯ⶱⶵⶼ⶿ⷀⷘⷡⷥⷮⷯⷴ⸌⸕⸙⸛⸝⸠⸢⸦⸧⸨⸩⸱⹶⺅⺊⺐⺙⺛⺜⺟⺢⺥⺩⺵⺹⺽⻃⻋⻏⻓⻜⻝⻩⻭⼙⼜⼝⼡⼤⼦⼧⼪⼵⼶⼷⼻⼿⽀⽁⽄⽆⽍⽐⽑⽔⽪⽺⾧⿫⿬⿭⿱⿴⿼〇〖〝〥〨〪えごすっつらろグスタチツテニネㄉㄋㄏㄙㄚㄥㄬㄴㄻㄿㅃㅆㅕㅘㅙㅝㅠㅡㅢㅧㅨㅽㆀㆍㆣㆤㆥㆧㆫㆰㆲㆶ㇁㇥㇩㇬ㇵㇹ㈂㈃㊑㊕㊘㊚㊟㊠㊫㋅㋌㋎㋵㋹㋽㌁㌂㌆㌇㌈㌩㌺㍡㍣㍥㍯㍰㍱㎞㏇㏐㏗㏘㏞㏟㏣㏧㏭㏱㏹㏽㏿㐁㐇㐋㐌㐍㑇㑉㑋㑏㑒㑔㑕㑙㑚㑛㑩㑽㒆㒉㒍㒎㒨㒺㓁㓂㔵㔹㕜㕭㖐㖡㖬㖵㘅㘇㘎㙢㙧㚇㚋㚎㚗㛈㛉㛸㛽㜅㜍㜟㜢㜣㜬㜭㜮㜰㝄㠗㣳㣷㤀㤂㥓㦏㦓㦕㦗㦚㧑㫥㭍㭐㱅㲄㲬㶍㶘㹠㹨㻩㿉䂑䄌䄵䆻䑡�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/triads.cpp����������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015147� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.734761752 30 atime=1762812828.038759355 30 ctime=1762812827.734761752 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/triads.cpp���������������������������������������������������������������������0000644�0001750�0000144�00000006113�15104461633�017141� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "triads.h" #include "cb2bib_utilities.h" #include <QHash> const QString triads::textSignature(const QString& str) { if (str.isEmpty()) return QString(); else return asciiTextSignature(c2bUtils::toAscii(str, c2bUtils::KeepWords)); } const QVector<QString> triads::textSignature(const QStringList& strs) { QVector<QString> s(strs.count()); for (int i = 0; i < strs.count(); ++i) s[i] = textSignature(strs.at(i)); return s; } const QString triads::asciiTextSignature(const QString& str) { QString s(str); c2bUtils::replace(s, c2bUtils::nonAsciiLetter, " "); s = s.toLower(); const int nletters(26); const int ngram(5); const int slength(s.length()); const int code0(QChar('a').unicode()); const QChar space(' '); QSet<int> triads; for (int i = 0; i <= slength - ngram; ++i) { if (s.mid(i, ngram).contains(space)) continue; const int t1(s.at(i).unicode() - code0); const int t2(s.at(i + 2).unicode() - code0); const int t3(s.at(i + 4).unicode() - code0); const int code(code0 + t1 * nletters * nletters + t2 * nletters + t3); if (!triads.contains(code)) triads.insert(code); } #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) QList<int> codes(triads.values()); #else QList<int> codes(triads.toList()); #endif std::sort(codes.begin(), codes.end()); s.resize(codes.count()); for (int i = 0; i < codes.count(); ++i) s[i] = QChar(codes.at(i)); return s; } int triads::textFrequency(const QString& str) { const QString sign(textSignature(str)); if (sign.length() == 0) return 1000 - str.length(); else return _rank(str, sign, c2bUtils::fileToString(":txt/txt/triads.txt")); } const QVector<int> triads::textFrequency(const QStringList& strs) { if (strs.count() == 0) return QVector<int>(); const QString ranks(c2bUtils::fileToString(":txt/txt/triads.txt")); QVector<int> fr(strs.count()); for (int i = 0; i < strs.count(); ++i) { const QString sign(textSignature(strs.at(i))); if (sign.length() == 0) fr[i] = 1000 - strs.at(i).length(); else fr[i] = _rank(strs.at(i), sign, ranks); } return fr; } int triads::_rank(const QString& str, const QString& sign, const QString& ranks) { const int m(sign.length()); const int n(ranks.length()); int counter(0); int j0(0); for (int i = 0; i < m; ++i) for (int j = j0; j < n; ++j) if (sign.at(i) == ranks.at(j)) { ++counter; j0 = j + 1; break; } counter = 100 * (m - counter) + str.length(); return 1000 - counter; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/documentParser.h����������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016320� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.798761247 29 atime=1762812827.99875967 30 ctime=1762812827.798761247 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/documentParser.h���������������������������������������������������������������0000644�0001750�0000144�00000003346�15104461633�020320� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef DOCUMENTPARSER_H #define DOCUMENTPARSER_H #include <QString> #include <QStringRef> class documentParser { public: documentParser(const QString& text, const int maximum); ~documentParser(); bool parses(); inline QStringRef subsentence() const { return QStringRef(&_text, _current_ssentence_origin, _current_ssentence_length); } inline int nlength() const { return _current_ssentence_length; } inline int nwords() const { return _current_nwords; } private: int nextWord(const int pos) const; static inline bool _is_letter(const QChar& c) { const ushort uc(c.unicode()); if ((uc > 96 && uc < 123) || uc == 95 || uc == 39) return true; else return c.isLetter(); } static inline bool _is_letter_or_number(const QChar& c) { const ushort uc(c.unicode()); if ((uc > 96 && uc < 123) || (uc > 47 && uc < 58) || uc == 95 || uc == 39) return true; else return c.isLetterOrNumber(); } bool _all_done; int _current_nwords; int _current_ssentence_length; int _current_ssentence_origin; int _nwords; int _position; int _ssentence_origin; const QChar _space; const QString _text; const int _maximum_words; const int _minimum_words; const int _text_length; }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/document.cpp��������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015476� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.678762193 29 atime=1762812827.99875967 30 ctime=1762812827.682762162 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/document.cpp�������������������������������������������������������������������0000644�0001750�0000144�00000041127�15104461633�017475� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "document.h" #include "cb2bib_utilities.h" #include "settings.h" #include <QProcess> document::document(const QString& fn, const Conversion mode) { _document_fn = fn.trimmed(); settings* settingsP = settings::instance(); _converter_output = settingsP->tempPath() + "/cb2bib_document_conversion_tmp_" + settingsP->applicationPid(); setConverter(mode); } QString document::fileToString(const QString& fn) { _document_fn = fn.trimmed(); return toString(); } QString document::toString() { _error_string.clear(); _log_string.clear(); if (_document_fn.isEmpty()) return QString(); QFileInfo fbin(_converter_bin); if (fbin.isAbsolute()) if (!fbin.exists() || !fbin.isFile()) { _error_string = QObject::tr("Converter %1 does not exist\n").arg(_converter_bin); return QString(); } QFileInfo fi(_document_fn); if (!fi.exists() || !fi.isFile()) { _error_string = QObject::tr("File %1 does not exist\n").arg(_document_fn); return QString(); } QProcess converter; QStringList args(_converter_arg.split(' ', _QT_6_SkipEmptyParts)); args.append(_document_fn); args.append(_converter_output); converter.start(_converter_bin, args); if (!converter.waitForStarted()) { _error_string += QObject::tr("Converter '%1 %2' could not be started. Check file permissions and path\n") .arg(_converter_bin, _converter_arg); return QString(); } if (!converter.waitForFinished(_conversion_mode == Complete ? -1 : 150000)) { converter.kill(); c2bUtils::warn(QObject::tr("Error: Document conversion timeout for file '%1'").arg(_document_fn)); } QString doc(c2bUtils::fileToString(_converter_output, true)); _log_string = QString::fromUtf8(converter.readAllStandardOutput().trimmed()); _log_string += '\n' + QString::fromUtf8(converter.readAllStandardError().trimmed()); if (converter.exitStatus() != QProcess::NormalExit || doc.isEmpty()) { _error_string += QObject::tr("[%1 %2] Conversion failed for file %3\n").arg(_converter_bin, _converter_arg, _document_fn); c2bUtils::warn(QObject::tr("Warning: Text conversion for file '%1' is empty").arg(_document_fn)); return QString(); } normalize(doc, _conversion_mode); // Recheck in case normalize reveals badly encoded PDFs if (doc.isEmpty()) c2bUtils::warn(QObject::tr("Warning: Text conversion for file '%1' is empty").arg(_document_fn)); return doc; } QString& document::normalize(QString& doc, const Conversion mode) { if (doc.length() == 0) return doc; const ushort unull(0); const ushort unl(10); const ushort uspace(32); const ushort uhyp(45); bool hgrave(false); bool hdieresis(false); bool haccute(false); bool hcedilla(false); bool hcircumflex(false); bool hcaron(false); bool hring(false); bool htilde(false); bool hreg(false); bool hligatures(false); ushort* const c0((ushort*)doc.data()); const ushort* const cn(c0 + doc.length()); ushort* c(c0 - 1); while (c < cn) { ++c; ushort& uc(*c); if (uc > 96 && uc < 127) continue; if (uc > 31 && uc < 94) continue; const QChar::Category ct(QChar::category(uc)); if (ct == QChar::Mark_NonSpacing) uc = unull; else if (ct == QChar::Mark_SpacingCombining) uc = uspace; else if (ct == QChar::Mark_Enclosing) uc = uspace; else if (ct == QChar::Separator_Space) uc = uspace; else if (ct == QChar::Separator_Paragraph) uc = unl; else if (ct == QChar::Other_Control) { if (uc == 10 || uc == 13) uc = unl; else uc = uspace; } else if (ct == QChar::Other_Format) uc = uc == 173 ? uhyp : unull; else if (ct == QChar::Other_PrivateUse) uc = uspace; else if (ct == QChar::Other_NotAssigned) uc = uspace; else if (uc == QChar::ReplacementCharacter) uc = uspace; else if (uc == 96) hgrave = true; else if (uc == 168) hdieresis = true; else if (uc == 180) haccute = true; else if (uc == 184) hcedilla = true; else if (uc == 710) hcircumflex = true; else if (uc == 711) hcaron = true; else if (uc == 730) hring = true; else if (uc == 732) htilde = true; // Normalize apostrophe else if (uc == 8216 || uc == 8217) uc = 39; // Normalize comma else if (uc == 65292) uc = 44; // Normalize quotation else if (uc == 8220 || uc == 8221 || uc == 65282) uc = 34; // Normalize separator else if ((uc > 8207 && uc < 8213) || uc == 8722) uc = uhyp; // Corrections else if (uc == 174) hreg = true; else if (uc == 305) uc = 105; else if (uc == 1001) uc = 43; else if (uc == 1002 || uc == 1003) uc = 45; else if (uc == 306 || uc == 307 || uc == 455 || uc == 460 || uc == 498 || uc == 64256 || uc == 64257 || uc == 64258 || uc == 64259 || uc == 64260) hligatures = true; } // Diacritics from legacy PDFs are set to text in several manners: // - an orphan diacritic is set either before or after the letter // - an orphan diacritic might be followed by one or more spaces, resulting in broken words // These deficiencies impact on indexing and searching // In the following // - an orphan diacritic is re-set to the most probably accented letters // - extra spaces are removed whenever the risk of joining two independent words is low if (haccute) { const ushort uaccute(180); c = c0 + 1; const ushort* const cm(cn - 2); while (c < cm) { if (*c == uaccute && *(c + 1) == uspace) { const QChar r(*(c - 1)); const QChar s(*(c + 2)); if (r.isLetter()) if ((r.isUpper() && s.isLetter()) || s.category() == QChar::Punctuation_Dash || s.category() == QChar::Punctuation_Other || s.isSpace()) *(c + 1) = unull; } ++c; } } // Revert hyphenation (skip for FirstPage mode to preserve layout) if (mode == Complete) { c = c0 + 1; const ushort* const cm(cn - 2); while (c < cm) { if (*c == uhyp) { const QChar r(*(c - 1)); if (r.isLetter()) { ushort* cs(c); bool h(false); while (cs < cn) if (QChar(*(++cs)).isLetter()) break; else if (*cs == unl) h = true; else if (*cs != uspace) { h = false; break; } if (h && cs < cn) { QString testw; for (ushort* cw = c - 1; cw > c0; --cw) if (QChar(*cw).isLetter()) testw.prepend(QChar(*cw)); else break; testw.append(QChar(uhyp)); for (ushort* cw = cs; cw < cn; ++cw) if (QChar(*cw).isLetter()) testw.append(QChar(*cw)); else break; const QChar s(*cs); // Avoid de-hyphenating 'divide-and-conquer' like cases by checking the word in document if (doc.contains(testw)) ++c; // Avoid de-hyphenating 'Hartree-Fock' like cases; replace hyphen by space else if ((r.isLower() && s.isUpper()) || (r.isUpper() && s.isLower())) *(c++) = uspace; for (ushort* z = c; z < cs; ++z) *z = unull; c = cs + 1; } } } ++c; } } // Clear extra spaces on enclosing marks { c = c0; while (c < cn) { ++c; ushort& uc(*c); if (uc < 40) continue; if (uc > 41 && uc < 91) continue; if (uc > 93 && uc < 123) continue; const QChar::Category ct(QChar::category(uc)); if (ct == QChar::Punctuation_Open) { for (ushort* co = c + 1; co < cn; ++co) if (*co == uspace || *co == unl || *co == unull) *co = unull; else break; } else if (ct == QChar::Punctuation_Close) { for (ushort* cc = c - 1; cc > c0; --cc) if (*cc == uspace || *cc == unl || *cc == unull) *cc = unull; else break; } } } // Remove null characters (djvutxt end of page, and other control characters) doc.remove(QChar(unull)); if (hreg) { // Correct frequent misencoding of "fi" as circle R in PDFs (Adobe Standard Encoding) c2bUtils::replace(doc, QRegExp(QString("%1([a-z])").arg(QChar(174))), "fi\\1"); } if (hligatures) { // Revert Latin ligatures doc.replace(QChar(306), "IJ"); doc.replace(QChar(307), "ij"); doc.replace(QChar(455), "LJ"); doc.replace(QChar(460), "nj"); doc.replace(QChar(498), "Dz"); doc.replace(QChar(64256), "ff"); doc.replace(QChar(64257), "fi"); doc.replace(QChar(64258), "fl"); doc.replace(QChar(64259), "ffi"); doc.replace(QChar(64260), "ffl"); } if (hgrave) { const QChar grave(96); doc.replace('a' + grave, QChar(224)); doc.replace(grave + 'a', QChar(224)); doc.replace('e' + grave, QChar(232)); doc.replace(grave + 'e', QChar(232)); doc.replace('o' + grave, QChar(242)); doc.replace('u' + grave, QChar(249)); doc.replace('y' + grave, QChar(7923)); doc.replace('A' + grave, QChar(192)); doc.replace('E' + grave, QChar(200)); doc.replace('O' + grave, QChar(210)); } if (hdieresis) { const QChar dieresis(168); c2bUtils::replace(doc, QRegExp(dieresis + ' ' + '+'), dieresis); doc.replace(dieresis + ' ', dieresis); doc.replace('a' + dieresis, QChar(228)); doc.replace('e' + dieresis, QChar(235)); doc.replace('i' + dieresis, QChar(239)); doc.replace('o' + dieresis, QChar(246)); doc.replace('u' + dieresis, QChar(252)); doc.replace('A' + dieresis, QChar(196)); doc.replace('E' + dieresis, QChar(203)); doc.replace('I' + dieresis, QChar(207)); doc.replace('O' + dieresis, QChar(214)); doc.replace('U' + dieresis, QChar(220)); doc.replace(dieresis + 'a', QChar(228)); doc.replace(dieresis + 'e', QChar(235)); doc.replace(dieresis + 'i', QChar(239)); doc.replace(dieresis + 'o', QChar(246)); doc.replace(dieresis + 'u', QChar(252)); doc.replace(dieresis + 'A', QChar(196)); doc.replace(dieresis + 'E', QChar(203)); doc.replace(dieresis + 'I', QChar(207)); doc.replace(dieresis + 'O', QChar(214)); doc.replace(dieresis + 'U', QChar(220)); } if (haccute) { const QChar accute(180); doc.replace('e' + accute, QChar(233)); doc.replace(accute + 'e', QChar(233)); doc.replace('A' + accute, QChar(193)); doc.replace(accute + 'A', QChar(193)); doc.replace('a' + accute, QChar(225)); doc.replace(accute + 'a', QChar(225)); doc.replace('o' + accute, QChar(243)); doc.replace(accute + 'o', QChar(243)); doc.replace('i' + accute, QChar(237)); doc.replace(accute + 'i', QChar(237)); doc.replace('E' + accute, QChar(201)); doc.replace(accute + 'E', QChar(201)); doc.replace('u' + accute, QChar(250)); doc.replace(accute + 'u', QChar(250)); doc.replace('O' + accute, QChar(211)); doc.replace(accute + 'O', QChar(211)); doc.replace('I' + accute, QChar(205)); doc.replace(accute + 'I', QChar(205)); doc.replace('U' + accute, QChar(218)); doc.replace(accute + 'U', QChar(218)); doc.replace('c' + accute, QChar(263)); doc.replace('C' + accute, QChar(262)); doc.replace('y' + accute, QChar(253)); doc.replace('Y' + accute, QChar(221)); } if (hcedilla) { const QChar cedilla(184); doc.replace('c' + cedilla, QChar(231)); doc.replace(cedilla + 'c', QChar(231)); doc.replace('C' + cedilla, QChar(199)); doc.replace(cedilla + 'C', QChar(199)); doc.replace('s' + cedilla, QChar(351)); doc.replace(cedilla + 's', QChar(351)); doc.replace('S' + cedilla, QChar(350)); doc.replace(cedilla + 'S', QChar(350)); doc.replace('e' + cedilla, QChar(553)); doc.replace(cedilla + 'e', QChar(553)); doc.replace('E' + cedilla, QChar(552)); doc.replace(cedilla + 'E', QChar(552)); } if (hcircumflex) { const QChar circumflex(710); doc.replace('a' + circumflex, QChar(226)); doc.replace(circumflex + 'a', QChar(226)); doc.replace('e' + circumflex, QChar(234)); doc.replace(circumflex + 'e', QChar(234)); doc.replace('i' + circumflex, QChar(238)); doc.replace(circumflex + 'i', QChar(238)); doc.replace('o' + circumflex, QChar(244)); doc.replace(circumflex + 'o', QChar(244)); } if (hcaron) { const QChar caron(711); doc.replace('c' + caron, QChar(269)); doc.replace(caron + 'c', QChar(269)); doc.replace('C' + caron, QChar(268)); doc.replace(caron + 'C', QChar(268)); doc.replace('z' + caron, QChar(382)); doc.replace(caron + 'z', QChar(382)); doc.replace('Z' + caron, QChar(381)); doc.replace(caron + 'Z', QChar(381)); doc.replace('s' + caron, QChar(353)); doc.replace(caron + 's', QChar(353)); doc.replace('S' + caron, QChar(352)); doc.replace(caron + 'S', QChar(352)); doc.replace('r' + caron, QChar(345)); doc.replace(caron + 'r', QChar(345)); doc.replace('R' + caron, QChar(344)); doc.replace(caron + 'R', QChar(344)); } if (hring) { const QChar ring(730); doc.replace('a' + ring, QChar(229)); doc.replace('A' + ring, QChar(197)); doc.replace(ring + 'a', QChar(229)); doc.replace(ring + 'A', QChar(197)); } if (htilde) { const QChar tilde(732); doc.replace('n' + tilde, QChar(241)); doc.replace('N' + tilde, QChar(209)); doc.replace('a' + tilde, QChar(227)); doc.replace('A' + tilde, QChar(195)); } // Simplify (skip for FirstPage mode to preserve layout) if (mode == Complete) c2bUtils::simplifyString(doc); return doc; } void document::setConverter(const Conversion mode) { _conversion_mode = mode; settings* s(settings::instance()); switch (_conversion_mode) { case Complete: setConverter(s->fileName("c2bBibSearcher/Pdf2TextBin"), s->value("c2bBibSearcher/Pdf2TextArg").toString()); break; case FirstPage: default: setConverter(s->fileName("c2bPdfImport/Pdf2TextBin"), s->value("c2bPdfImport/Pdf2TextArg").toString()); break; } } void document::setConverter(const QString& bin, const QString& args) { _converter_bin = bin.trimmed(); _converter_arg = args.simplified(); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/posTagger.cpp�������������������������������������������������������0000644�0000000�0000000�00000000130�15104461633�015612� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1762812827.71476191 30 atime=1762812828.038759355 29 ctime=1762812827.71476191 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/posTagger.cpp������������������������������������������������������������������0000644�0001750�0000144�00000007234�15104461633�017613� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "posTagger.h" #include "cb2bib_utilities.h" #include "settings.h" posTagger::posTagger() : _period('.'), _space(' '), _pos_a("A"), _pos_g("G"), _pos_n("N"), _pos_o("O"), _pos_r("R"), _pos_s("S"), _suffix_able("able"), _suffix_ae("ae"), _suffix_al("al"), _suffix_apostrophes("'s"), _suffix_ar("ar"), _suffix_ed("ed"), _suffix_ful("ful"), _suffix_ic("ic"), _suffix_ics("ics"), _suffix_ing("ing"), _suffix_is("is"), _suffix_ive("ive"), _suffix_lent("lent"), _suffix_less("less"), _suffix_like("like"), _suffix_ly("ly"), _suffix_ous("ous"), _suffix_s("s"), _suffix_ss("ss"), _suffix_us("us") {} bool posTagger::loadLexicon() { const QString lexfn(settings::instance()->fileName("cb2Bib/PosLexiconFile")); QFile lexf(lexfn); if (!lexf.open(QIODevice::ReadOnly | QIODevice::Text)) { c2bUtils::warn(QObject::tr("Could not open POS lexicon file %1 for reading").arg(lexfn)); return false; } QTextStream lex(&lexf); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) lex.setEncoding(QStringConverter::Utf8); #else lex.setCodec("UTF-8"); #endif lex.setAutoDetectUnicode(true); const QChar comment('#'); QString line; while (!lex.atEnd()) { line = lex.readLine(); if (line.isEmpty() || line.startsWith(comment)) continue; const int n(line.toInt()); for (int i = 0; i < n; ++i) _sentence_patterns.insert(lex.readLine(), QString()); break; } while (!lex.atEnd()) { line = lex.readLine(); if (line.isEmpty() || line.startsWith(comment)) continue; const int n(line.toInt()); const QString tag(lex.readLine()); for (int i = 0; i < n; ++i) _lexicon.insert(lex.readLine(), tag); } lexf.close(); return _sentence_patterns.size() > 0 && _lexicon.size() > 0; } QString posTagger::tagged(const QString& text) const { const QStringList words(text.split(_space, _QT_6_SkipEmptyParts)); const int nw(words.count()); QString t(_period); for (int i = 0; i < nw; ++i) { const QString& w(words.at(i)); if (_lexicon.contains(w)) t += _lexicon.value(w) + _period; else t += ruletag(w) + _period; } return t; } QString posTagger::ruletag(const QString& word) const { if (word.length() < 3) return _pos_s; if (word.endsWith(_suffix_ed) || word.endsWith(_suffix_ar) || word.endsWith(_suffix_ive) || word.endsWith(_suffix_able) || word.endsWith(_suffix_ic) || word.endsWith(_suffix_al) || word.endsWith(_suffix_ous) || word.endsWith(_suffix_lent) || word.endsWith(_suffix_like) || word.endsWith(_suffix_ful) || word.endsWith(_suffix_less)) return _pos_a; if (word.endsWith(_suffix_ing)) return _pos_g; if (word.endsWith(_suffix_ly)) return _pos_r; if (word.endsWith(_suffix_ss) || word.endsWith(_suffix_is) || word.endsWith(_suffix_ics) || word.endsWith(_suffix_apostrophes) || word.endsWith(_suffix_us)) return _pos_n; if (word.endsWith(_suffix_ae)) return _pos_o; if (word.endsWith(_suffix_s)) return _pos_o; return _pos_n; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/cb2bib_parameters.h�������������������������������������������������0000644�0000000�0000000�00000000127�15104461633�016700� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������28 mtime=1762812827.7667615 29 atime=1762812827.99875967 30 ctime=1762812827.770761468 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/cb2bib_parameters.h������������������������������������������������������������0000644�0001750�0000144�00000007416�15104461633�020675� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef CB2BIB_PARAMETERS_H #define CB2BIB_PARAMETERS_H #include <QString> const int C2B_MESSAGE_TIME(6000); const QLatin1String C2B_APPLICATION("cb2Bib"); const QLatin1String C2B_CITE_COMMAND_PATTERN("\\cite{<<|citeids|,>>}"); const QLatin1String C2B_CITE_ID_PATTERN("<<author_first>><<year_abbreviated>><<ppages_first>>"); const QLatin1String C2B_DOCUMENT_ID_PATTERN("<<citeid>>"); const QLatin1String C2B_FIND_REPLACE_LIST("Corresponding Author Contact Information||ScienceDirect alt tag^e" "E-mail The Corresponding Author||ScienceDirect alt tag^e" "small pi, Greek|$\\pi$|ScienceDirect alt tag^e" "{sect}||PNAS - Author String^e" "{dagger}||PNAS - Author String"); const QLatin1String C2B_ICON_ABOUT_B_BACK("back_cb2bib_32.png"); const QLatin1String C2B_ICON_ABOUT_B("cb2bib.png"); const QLatin1String C2B_ICON_CONNECT_B("connect_established.png"); const QLatin1String C2B_ICON_DIR(":/icons/icons/"); const QLatin1String C2B_ICON_DISCONNECT_B("connect_no.png"); const QLatin1String C2B_ICON_VIEWBIB_B("viewbib.png"); const QLatin1String C2B_ICON_VIEWC2B_B("viewcb.png"); const QLatin1String C2B_ORGANIZATION("MOLspaces"); const QLatin1String C2B_VERSION("2.0.3"); #if defined(Q_OS_WIN) const QLatin1String C2B_DATA_DIR("C:/Documents and Settings"); #else const QLatin1String C2B_DATA_DIR("/usr/share/cb2bib"); #endif // File Manager Client #if defined(Q_OS_WIN) const QLatin1String C2B_FM_CLIENT_COPY_ARG(""); const QLatin1String C2B_FM_CLIENT_COPY_BIN(""); const QLatin1String C2B_FM_CLIENT_MOVE_ARG(""); const QLatin1String C2B_FM_CLIENT_MOVE_BIN(""); #elif defined(Q_OS_MACOS) const QLatin1String C2B_FM_CLIENT_COPY_ARG(""); const QLatin1String C2B_FM_CLIENT_COPY_BIN(""); const QLatin1String C2B_FM_CLIENT_MOVE_ARG(""); const QLatin1String C2B_FM_CLIENT_MOVE_BIN(""); #else // Q_OS_UNIX const QLatin1String C2B_FM_CLIENT_COPY_ARG("copy"); const QLatin1String C2B_FM_CLIENT_COPY_BIN("kfmclient"); const QLatin1String C2B_FM_CLIENT_MOVE_ARG("move"); const QLatin1String C2B_FM_CLIENT_MOVE_BIN("kfmclient"); #endif // To text converter #if defined(Q_OS_WIN) const QLatin1String C2B_METADATAPARSER_EXIFTOOL_BIN("C:\\Windows\\exiftool.exe"); const QLatin1String C2B_PDFIMPORT_PDF2TXT_BIN("C:\\Program Files\\xpdf-3.04-win32\\pdf2cb.exe"); const QLatin1String C2B_BIBSEARCHER_PDF2TXT_BIN("C:\\Program Files\\xpdf-3.04-win32\\pdf2cb.exe"); #elif defined(Q_OS_MACOS) const QLatin1String C2B_METADATAPARSER_EXIFTOOL_BIN("exiftool"); const QLatin1String C2B_BIBSEARCHER_PDF2TXT_BIN("pdftotext"); const QLatin1String C2B_PDFIMPORT_PDF2TXT_BIN("pdftotext"); #else // Q_OS_UNIX const QLatin1String C2B_METADATAPARSER_EXIFTOOL_BIN("exiftool"); const QLatin1String C2B_BIBSEARCHER_PDF2TXT_BIN("pdftotext"); const QLatin1String C2B_PDFIMPORT_PDF2TXT_BIN("pdftotext"); #endif // BibTeX postprocessing #if defined(Q_OS_WIN) const QLatin1String C2B_POSTPROCESS_BIBTEX_BIN("c2btools\\bib2end.bat"); const QLatin1String C2B_POSTPROCESS_BIBTEX_ARG("%finput %foutput"); const QLatin1String C2B_POSTPROCESS_BIBTEX_EXT("end"); #elif defined(Q_OS_MACOS) const QLatin1String C2B_POSTPROCESS_BIBTEX_BIN("c2btools/bib2pdf"); const QLatin1String C2B_POSTPROCESS_BIBTEX_ARG("%finput %foutput"); const QLatin1String C2B_POSTPROCESS_BIBTEX_EXT("bib.pdf"); #else // Q_OS_UNIX const QLatin1String C2B_POSTPROCESS_BIBTEX_BIN("c2btools/bib2pdf"); const QLatin1String C2B_POSTPROCESS_BIBTEX_ARG("%finput %foutput"); const QLatin1String C2B_POSTPROCESS_BIBTEX_EXT("bib.pdf"); #endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/compositePattern.cpp������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�017220� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.670762256 29 atime=1762812827.99875967 30 ctime=1762812827.674762225 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/compositePattern.cpp�����������������������������������������������������������0000644�0001750�0000144�00000003514�15104461633�021215� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "compositePattern.h" #include "cb2bib_utilities.h" namespace { template <typename T> class descending { public: explicit descending(const T& data) : _data(data) {} inline bool operator()(const int i, const int j) { return _data.at(i) > _data.at(j); } private: const T& _data; }; } // namespace compositePattern::compositePattern() : _case_sensitivity(Qt::CaseSensitive), _is_multipattern(false), _subpattern_count(0), _matched_length(-1) {} compositePattern::compositePattern(const QString& pattern, const Qt::CaseSensitivity cs) : _string(pattern), _case_sensitivity(cs), _is_multipattern(false), _subpattern_count(0), _matched_length(-1) {} QString compositePattern::escape(const QString& str, const Qt::CaseSensitivity cs) { if (cs == Qt::CaseSensitive) return QRegularExpression::escape(str); QString scaped; for (int i = 0; i < str.length(); ++i) if (str.at(i).isLetter()) scaped += QString("[%1%2]").arg(str.at(i).toUpper()).arg(str.at(i).toLower()); else scaped += QRegularExpression::escape(str.at(i)); return scaped; } void compositePattern::set_sort_index() { Q_ASSERT_X(_ranks.count() == _subpattern_count, "compositePattern", "Mismatch in subexpression initialization"); _index.resize(_subpattern_count); for (int i = 0; i < _subpattern_count; ++i) _index[i] = i; descending<QList<double>> sort(_ranks); std::sort(_index.begin(), _index.end(), sort); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/approximatePattern.cpp����������������������������������������������0000644�0000000�0000000�00000000132�15104461633�017550� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.646762446 30 atime=1762812828.042759324 30 ctime=1762812827.646762446 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/approximatePattern.cpp���������������������������������������������������������0000644�0001750�0000144�00000027074�15104461633�021553� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Class implementation of the approximate search algorithm * P. Constans. Approximate textual retrieval. arXiv:0705.0751, 2007. ***************************************************************************/ #include "approximatePattern.h" #include "cb2bib_utilities.h" #include "triads.h" namespace { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) static const QRegularExpression::PatternOptions _qre_pattern_options(QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption); #elif QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) static const QRegularExpression::PatternOptions _qre_pattern_options(QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::OptimizeOnFirstUsageOption); #else static const QRegularExpression::PatternOptions _qre_pattern_options(QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption); #endif } // namespace approximatePattern::approximatePattern() : compositePattern() {} approximatePattern::approximatePattern(const QString& pattern, const Qt::CaseSensitivity cs) : compositePattern(pattern, cs) { setPattern(pattern, cs); } void approximatePattern::setPattern(const QString& pattern, const Qt::CaseSensitivity cs) { _string = pattern; _subpatterns = c2bUtils::split(pattern, c2bUtils::nonLetter, _QT_6_SkipEmptyParts); _case_sensitivity = cs; _is_multipattern = false; _matched_length = -1; _subpattern_count = 0; // Exact match if (_string.length() < 5) { _regexp.setPattern(escape(_string, _case_sensitivity)); _regexp.setPatternOptions(_qre_pattern_options); return; } // Single word: Allow 1 error (1 missing / 3 excess), anywhere if (wordCount(_string) == 1) { _regexp.setPattern(wordPattern(_string, _case_sensitivity)); _regexp.setPatternOptions(_qre_pattern_options); return; } // Multiple words _prefixes = c2bUtils::split(c2bUtils::fileToString(":/txt/txt/prefixes.txt"), c2bUtils::nonLetter, _QT_6_SkipEmptyParts); _suffixes = c2bUtils::split(c2bUtils::fileToString(":/txt/txt/suffixes.txt"), c2bUtils::nonLetter, _QT_6_SkipEmptyParts); splitPattern(); if (_string_pieces.count() < 3) // Cases: "qq pp", "qqq pp", etc { _regexp.setPattern(wordPattern(_string, _case_sensitivity)); _regexp.setPatternOptions(_qre_pattern_options); // Avoid rare cases triggering 'too large regular expression' by just composing prefix and suffix if (!_regexp.isValid()) { _regexp.setPattern("(?:" + _string_pieces.join('|') + ')'); _regexp.setPatternOptions(_qre_pattern_options); } return; } _is_multipattern = true; // Set parameters const double percent_scan(50.); const double scan_factor(100. / percent_scan); const int max_blocks(_string_pieces.count() / 2); const int requested_blocks(c2bUtils::nearInteger(scan_factor)); const int blocks(std::min(max_blocks, 1 + requested_blocks)); int pieces_per_block(_string_pieces.count() / blocks); // Ceiling if ((_string_pieces.count() % blocks) > 0) ++pieces_per_block; #if C2B_DEBUG_APPROXIMATEPATTERN qDebug() << _string_pieces << max_blocks << scan_factor << requested_blocks << pieces_per_block << _string_pieces.count() % blocks; for (int b = 0; b < blocks; ++b) for (int i = 0; i < pieces_per_block; ++i) if (b + (i * blocks) < _string_pieces.count()) qDebug() << "block# " << b << "pick item " << b + (i * blocks) << _string_pieces.at(b + (i * blocks)); #endif _ranks.clear(); QStringList submatcher; QStringList subpattern; QStringList substring; const QString sp_stretch(".{0,%1}%2"); for (int b = 0; b < blocks; ++b) { int ii(b); QString sm(_string_pieces.at(ii)); QString sp(escape(_string_pieces.at(ii), _case_sensitivity)); QString ss(_string_pieces.at(ii)); double stretch_product(1.); for (int j = 1; j < pieces_per_block; ++j) { int jj(b + (j * blocks)); if (jj < _string_pieces.count()) { const int st(stretch(ii, jj)); sm += sp_stretch.arg(st).arg(_string_pieces.at(jj)); sp += sp_stretch.arg(st).arg(escape(_string_pieces.at(jj), _case_sensitivity)); ss += ' ' + _string_pieces.at(jj); stretch_product *= st; ii = jj; } } submatcher.append(sm); subpattern.append(sp); substring.append(ss); // Rank according expectation (arXiv:0705.0751, Eq. 6) _ranks.append(stretch_product * triads::textFrequency(ss)); ++_subpattern_count; } set_sort_index(); _regexp.setPattern(QString("(?:%1)").arg(subpattern.join("|"))); _submatchers.resize(_subpattern_count); _subregexps.resize(_subpattern_count); _substrings.clear(); for (int i = 0; i < _subpattern_count; ++i) { const int ii(_index.at(i)); _submatchers[i] = substringMatcher(submatcher.at(ii), _case_sensitivity); _subregexps[i].setPattern(subpattern.at(ii)); _substrings.append(substring.at(ii)); } _p0.resize(_subpattern_count); _pn.resize(_subpattern_count); } void approximatePattern::splitPattern() { if (_string.isEmpty()) return; QStringList wordList; QList<int> wordStarts; QList<int> wordEnds; splitPattern(_string, &wordList, &wordStarts, &wordEnds); for (int i = 0; i < wordList.count(); ++i) { const QStringList pieces(splitWord(wordList.at(i))); const QString prefix(pieces.at(0)); if (prefix.length() > 2) { _string_pieces.append(prefix); _piece_starts.append(wordStarts.at(i)); _piece_ends.append(wordStarts.at(i) + prefix.length()); } const QString suffix(pieces.at(1)); if (suffix.length() > 2) { _string_pieces.append(suffix); _piece_starts.append(wordEnds.at(i) - suffix.length()); _piece_ends.append(wordEnds.at(i)); } } } void approximatePattern::splitPattern(const QString& p, QStringList* w, QList<int>* ws, QList<int>* we) { w->clear(); ws->clear(); we->clear(); QString str(p); c2bUtils::replace(str, c2bUtils::nonLetter, " "); str.append(' '); int w_starts(0); int w_ends(0); bool in_word(false); for (int i = 0; i < str.length(); ++i) if (str.at(i) == ' ') { if (in_word) { // Word actually ends at i - 1. However, this convention simplifies things. w_ends = i; w->append(str.mid(w_starts, w_ends - w_starts)); ws->append(w_starts); we->append(w_ends); } in_word = false; } else { if (!in_word) w_starts = i; in_word = true; } } const QStringList approximatePattern::splitWord(const QString& word) const { // Returns the pair "prefix+root root+suffix" const int minimum_length(5); const int wlen(word.length()); if (wlen < minimum_length) return QStringList() << word << word; QString w(word.toLower()); int plen_min(wlen); int slen_min(wlen); int plen_max(0); int slen_max(0); for (int i = 0; i < _prefixes.count(); ++i) if (w.startsWith(_prefixes.at(i))) { const int plen(_prefixes.at(i).length()); if (plen < plen_min) plen_min = plen; if (plen > plen_max) plen_max = plen; } for (int i = 0; i < _suffixes.count(); ++i) if (w.endsWith(_suffixes.at(i))) { const int slen(_suffixes.at(i).length()); if (slen < slen_min) slen_min = slen; if (slen > slen_max) slen_max = slen; } if (plen_min == wlen) plen_min = 0; if (slen_min == wlen) slen_min = 0; w = word; const int wlenMp_min(std::max(plen_min, wlen - slen_min)); const int wlenMs_min(std::max(slen_min, wlen - plen_min)); const int wlenMp_max(std::max(plen_max, wlen - slen_max)); const int wlenMs_max(std::max(slen_max, wlen - plen_max)); #if C2B_DEBUG_APPROXIMATEPATTERN qDebug() << wlenMp_min << wlenMs_min << w.left(wlenMp_min) << w.right(wlenMs_min); qDebug() << wlenMp_max << wlenMs_max << w.left(wlenMp_max) << w.right(wlenMs_max); #endif if (wlenMp_max >= minimum_length && wlenMs_max >= minimum_length) return QStringList() << w.left(wlenMp_max) << w.right(wlenMs_max); else if (wlenMp_min >= minimum_length && wlenMs_min >= minimum_length) return QStringList() << w.left(wlenMp_min) << w.right(wlenMs_min); else return QStringList() << word << word; } QString approximatePattern::wordPattern(const QString& word, Qt::CaseSensitivity cs) { const int len(word.length()); const QString ord(word.right(len - 1)); QStringList possible; possible.append(escape(ord.left(len - 2), cs)); for (int i = 1; i < len - 2; ++i) possible.append(QString("%1.{0,2}%2").arg(escape(ord.left(len - i - 3), cs), escape(ord.right(i), cs))); #if C2B_DEBUG_APPROXIMATEPATTERN qDebug() << "WordPattern: " << QString("(?:%1(?:%2)|%3)").arg(escape(word.at(0), cs), possible.join("|"), escape(ord, cs)); #endif return QString("(?:%1(?:%2)|%3)").arg(escape(word.at(0), cs), possible.join("|"), escape(ord, cs)); } int approximatePattern::wordCount(const QString& str) { const QString tstr(c2bUtils::replaced(str, c2bUtils::nonLetter, " ")); return 1 + tstr.simplified().count(' '); } int approximatePattern::stretch(int piece_i, int piece_j) const { const int minStretch(3); const int maxStretch(20); if (_string_pieces.at(piece_j).length() > 4) return std::max((maxStretch * (piece_j - piece_i)), minStretch * (_piece_starts.at(piece_j) - _piece_ends.at(piece_i))); else return minStretch * (_piece_starts.at(piece_j) - _piece_ends.at(piece_i)); // Estimated error ratio only } void approximatePattern::mergeIndices(int* index_in, const QString& str) const { int index = str.length(); for (int i = 0; i < _subpattern_count; ++i) if (_p0.at(i) != -1 && _p0.at(i) < index) index = _p0.at(i); if (index == str.length()) index = -1; else { int pn(0); for (int i = 0; i < _subpattern_count; ++i) if (_pn.at(i) > pn && _p0.at(i) == index) pn = _pn.at(i); for (int m = 0; m < _subpattern_count; ++m) for (int i = 0; i < _subpattern_count; ++i) if (_pn.at(i) > pn && _p0.at(i) < pn) pn = _pn.at(i); // Beautify match by including whole words for (int w = index - 1; w > std::max(0, index - 13); --w) if (!str.at(w).isLetter()) { index = w + 1; break; } for (int w = pn; w < std::min(pn + 13, int(str.length())); ++w) if (!str.at(w).isLetter()) { pn = w; break; } _matched_length = pn - index; } *index_in = index; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/collectionIndex.h���������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016450� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.774761437 29 atime=1762812827.99875967 30 ctime=1762812827.774761437 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/collectionIndex.h��������������������������������������������������������������0000644�0001750�0000144�00000004303�15104461633�020442� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef COLLECTIONINDEX_H #define COLLECTIONINDEX_H #include <QMap> #include <QString> class bibParser; class settings; class QTextStream; class collectionIndex { public: explicit collectionIndex(bibParser* bp); ~collectionIndex(); int index(const QString& dir); private: struct KeysentenceData { inline KeysentenceData() : ndocuments(0) {} inline explicit KeysentenceData(const int document) : ndocuments(1) { documents.append(document); } inline void update(const int document) { ++ndocuments; documents.append(document); } int ndocuments; QList<int> documents; }; static inline bool _last_equals_first(const QString& text) { const ushort* r((const ushort*)text.constData()); const ushort* const cn(r + text.length()); const ushort* s; for (s = cn - 1; s > r; --s) if (*s == 32) break; ++s; while (s < cn) if (*(s++) != *(r++)) return false; return *r == 32; } KeysentenceData* _digest_sentence(KeysentenceData* ksd, KeysentenceData* ksdndmax, int* ndmax) const; QString preprocessedText(const QString& journal, const QString& text) const; QString& replace(QString& str, const QChar& a, const QChar& b) const; bool isValidKeySentence(const QString& text) const; void analyzeKeySentences(); void cleanupKeySentences(); void digestKeySentences(); void setKeySentences(const int documentid, const QString& text); QTextStream& _out; bibParser* _bpP; const QChar _space_char; int _nerrors; settings* _settingsP; QMap<QString, KeysentenceData> _keysentences; QMultiMap<int, QString> _document_sentences; QMultiMap<int, int> _document_sentenceids; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/documentCache.h�����������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016067� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.790761311 29 atime=1762812827.99875967 30 ctime=1762812827.794761279 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/documentCache.h����������������������������������������������������������������0000644�0001750�0000144�00000002302�15104461633�020056� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef DOCUMENTCACHE_H #define DOCUMENTCACHE_H #include "documentContents.h" #include <QHash> class settings; class documentCache { public: documentCache(); ~documentCache(); bool setCurrent(const QString& fn); bool setCurrent(const QString& fn, int* pdfCounter, QString* logString, int* errorCounter); void load(const QString& fn, const documentContents::Type type); void unload(); inline const documentContents& current() const { return _current; } inline const QHash<QString, QByteArray>& cacheData() const { return _cache; } private: QHash<QString, QByteArray> _cache; QString _cache_filename; QString _load_filename; documentContents _current; documentContents::Type _content_type; int _cache_load_size; settings* _settingsP; void save(); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/substringMatcher.h��������������������������������������������������0000644�0000000�0000000�00000000130�15104461633�016650� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������28 mtime=1762812827.8427609 30 atime=1762812828.038759355 30 ctime=1762812827.846760869 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/substringMatcher.h�������������������������������������������������������������0000644�0001750�0000144�00000006660�15104461633�020653� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef SUBSTRINGMATCHER_H #define SUBSTRINGMATCHER_H #include "txtmatcher.h" #include <QVector> #define C2B_DEBUG_SUBSTRINGMATCHER 0 class substringMatcher { public: substringMatcher(); explicit substringMatcher(const QString& pattern, const Qt::CaseSensitivity cs = Qt::CaseSensitive); inline ~substringMatcher() {} int indexIn(const QString& str, const int from = 0) const; inline int matchedLength() const { return _matched_length; } private: inline int _index_in(const int s, const QString& str, const int p0) const { return _substrings.at(s).indexIn(str, p0); } inline int _index_in(const int s, const QString& str, const int p0, const int pn) const { #if C2B_DEBUG_SUBSTRINGMATCHER qDebug() << "Search for substring:" << _substrings.at(s).pattern() << "in interval" << p0 << pn; int i; if (p0 >= pn) i = -1; else i = _substrings.at(s).indexIn(str.unicode(), std::min(_pn, pn), p0); qDebug() << "substringMatcher: returned index:" << i; return i; #else return _substrings.at(s).indexIn(str.unicode(), std::min(_pn, pn), p0); #endif } inline int _p_back(const int s, const int p0) const { return std::max(_p0 + _acc_lengths.at(s), p0 - _stretches.at(s + 1) - _lengths.at(s)); } inline int _p_forth(const int s, const int p0) const { return std::min(_pn, p0 + _stretches.at(s) + _lengths.at(s)); } inline int _index_back(const int s, const QString& str, int p0, const int pn) const { while ((p0 = _index_in(s, str, p0, pn)) != -1) { if (s == 0) return p0; const int i(_index_back(s - 1, str, _p_back(s - 1, p0), p0)); if (i != -1) return i; p0 += _lengths.at(s); } return -1; } inline int _index_forth(const int s, const QString& str, int p0, const int pn) const { while ((p0 = _index_in(s, str, p0, pn)) != -1) { p0 += _lengths.at(s); if (s + 1 == _substring_count) return p0; const int i(_index_forth(s + 1, str, p0, _p_forth(s + 1, p0))); if (i != -1) return i; } return -1; } inline int _index_around(const QString& str, const int phook) const { int bp(phook); if (_hook > 0) { bp = _index_back(_hook - 1, str, _p_back(_hook - 1, bp), bp); if (bp == -1) return -1; } int fp(phook + _lengths.at(_hook)); if (_hook + 1 < _substring_count) { fp = _index_forth(_hook + 1, str, fp, _p_forth(_hook + 1, fp)); if (fp == -1) return -1; } _matched_length = fp - bp; return bp; } QVector<txtmatcher> _substrings; QVector<int> _acc_lengths; QVector<int> _lengths; QVector<int> _stretches; int _hook; int _substring_count; mutable int _matched_length; mutable int _p0; mutable int _pn; }; #endif ��������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/wordPattern.h�������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015637� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.854760806 30 atime=1762812828.042759324 30 ctime=1762812827.858760774 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/wordPattern.h������������������������������������������������������������������0000644�0001750�0000144�00000003456�15104461633�017640� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef WORDPATTERN_H #define WORDPATTERN_H #include "compositePattern.h" #include "txtmatcher.h" class wordPattern : public compositePattern { public: enum Type { AllWords, AnyWord }; wordPattern(); wordPattern(const QString& pattern, const Type type, const Qt::CaseSensitivity cs); inline ~wordPattern() {} void setPattern(const QString& pattern, const Type type, const Qt::CaseSensitivity cs = Qt::CaseSensitive); inline bool matches(const QString& str) const override { _matched_length = -1; if (str.length() == 0) return false; if (_type == AllWords) { for (int i = _subpattern_count - 1; i >= 0; --i) if (_submatchers.at(i).indexIn(str) == -1) return false; return true; } else { for (int i = 0; i < _subpattern_count; ++i) if (_submatchers.at(i).indexIn(str) != -1) return true; return false; } } inline int indexIn(const QString& str, const int from = 0) const override { const QRegularExpressionMatch rem(_regexp.match(str, from)); _matched_length = rem.capturedLength(); return rem.capturedStart(); } inline const QVector<txtmatcher>& submatchers() const { return _submatchers; } private: QVector<txtmatcher> _submatchers; Type _type; }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/triads.h������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014614� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.850760837 30 atime=1762812828.038759355 30 ctime=1762812827.850760837 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/triads.h�����������������������������������������������������������������������0000644�0001750�0000144�00000001624�15104461633�016610� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef TRIADS_H #define TRIADS_H #include <QStringList> class triads { public: static const QString asciiTextSignature(const QString& str); static const QString textSignature(const QString& str); static const QVector<QString> textSignature(const QStringList& strs); static const QVector<int> textFrequency(const QStringList& strs); static int textFrequency(const QString& str); private: inline triads() {} inline ~triads() {} static int _rank(const QString& str, const QString& sign, const QString& ranks); }; #endif ������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/bibExtractor.cpp����������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016310� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.654762382 29 atime=1762812827.99875967 30 ctime=1762812827.654762382 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/bibExtractor.cpp���������������������������������������������������������������0000644�0001750�0000144�00000020560�15104461633�020305� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bibExtractor.h" #include "bibParser.h" #include "cb2bib_utilities.h" #include "document.h" #include "metadataParser.h" #include "network.h" #include "networkQuery.h" #include "settings.h" #include <QEventLoop> bibExtractor::bibExtractor(QObject* parento) : QObject(parento), cout(*(new QTextStream(stdout))) { _settingsP = settings::instance(); _bpP = new bibParser(this); _mpP = new metadataParser(_bpP, this); _networkQP = new networkQuery(_bpP, this); init(); } bibExtractor::bibExtractor(bibParser* bp, metadataParser* mp, networkQuery* nq, QObject* parento) : QObject(parento), cout(*(new QTextStream(stdout))), _bpP(bp), _mpP(mp), _networkQP(nq) { _settingsP = settings::instance(); Q_ASSERT_X(_bpP, "bibExtractor", "bibParser was not instantiated"); Q_ASSERT_X(_networkQP, "bibExtractor", "networkQuery was not instantiated"); init(); } bibExtractor::~bibExtractor() { delete &cout; } void bibExtractor::init() { connect(_networkQP, SIGNAL(queryEnded(bool,QString,QString)), this, SLOT(queryEnded(bool,QString,QString)), Qt::QueuedConnection); connect(_networkQP->networkPtr(), SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), this, SLOT(proxyLogMessage())); _event_loop = new QEventLoop(this); } /** Extracts a bibliographic reference from files input_fns and writes it to the BibTeX file output_fn */ int bibExtractor::extract(const QStringList& input_fns, const QString& output_fn, const InputType& type) { _input_type = type; QString bibtex; for (int i = 0; i < input_fns.count(); ++i) { const QString& input_fn = input_fns.at(i); if (!QFileInfo::exists(input_fn)) { logMessage(tr("Error: File %1 does not exist.").arg(input_fn)); continue; } logMessage(tr("Processing %1...").arg(input_fn)); if (_input_type == Document) { _document_fn = input_fn; const QString text(documentToString(input_fn)); extract(text); } else { _document_fn.clear(); const QString text(c2bUtils::fileToString(input_fn)); extract(text); } if (_settingsP->value("cb2Bib/MovePdf").toBool() && !_document_fn.isEmpty() && isReliable()) { const QString file(_bpP->documentFilename(_document_fn, output_fn)); const QString target_doc_fn( c2bUtils::documentAbsoluteName(_settingsP->value("cb2Bib/RelativePdfDirectory").toBool(), output_fn, _settingsP->fileName("cb2Bib/PdfDirectory"), file)); const QString doc_dirname(QFileInfo(target_doc_fn).absolutePath()); QDir doc_dir(doc_dirname); if (!doc_dir.exists()) if (!doc_dir.mkpath(doc_dirname)) logMessage(tr("Error: Unable to create directory %1.").arg(doc_dirname)); if (doc_dir.exists()) { const network::Action action(network::actionType(_settingsP->value("cb2Bib/CopyMovePdf").toString())); logMessage(tr("Copying/moving to %1...").arg(target_doc_fn)); _networkQP->networkPtr()->getFile(_document_fn, target_doc_fn, action, this, SLOT(copyMoveEnded(bool))); _event_loop->exec(); if (_is_copymove_ok) { if (_settingsP->value("cb2Bib/InsertMetadata").toBool()) { QString mp_error; if (!_mpP->insertMetadata(_bpP->currentReference(), target_doc_fn, &mp_error)) { logMessage(tr("Warning: Unable to insert metadata to file %1.").arg(target_doc_fn)); logMessage(mp_error); } } _document_fn = file; } else { if (_settingsP->cl_sloppy) { logMessage(tr("Warning: Skipping file field %1.").arg(_document_fn)); _document_fn.clear(); } else _bpP->clearCurrentReference(); } } } if (isReliable()) { if (!_document_fn.isEmpty()) _bpP->setField("file", _document_fn); bibtex += _bpP->toBibTeX(); } else logMessage(tr("Warning: Skip writing reference for file %1.").arg(input_fn)); logMessage(QString()); } if (bibtex.isEmpty()) logMessage(tr("Warning: No reference extracted.")); else { logMessage(tr("Writing %1...").arg(output_fn)); if (c2bUtils::stringToFile(bibtex, output_fn)) return 0; else logMessage(tr("Error: Unable to write file %1.").arg(output_fn)); } return 1; } /** Extracts a bibliographic reference from input string text writes it to the output string bibtex */ int bibExtractor::extract(const QString& text, QString* bibtex) { _document_fn.clear(); _input_type = PlainText; extract(text); *bibtex = _bpP->toBibTeX(); if (_bpP->isAutoRecognized()) return 0; else if (_bpP->fieldCount() > 0) return 1; else return 2; } void bibExtractor::extract(const QString& text) { _extract(text); if (_settingsP->value("cb2Bib/AutomaticQuery").toBool()) if (!_bpP->autoRecognizedString().contains("BibTeX") && _bpP->fieldCount() > 0) { logMessage(tr("Submitting query...")); _settingsP->setValue("networkQuery/isSupervised", false); _networkQP->submitQuery(_bpP->currentReference(), text, _input_type == PlainText); _event_loop->exec(); _settingsP->setValue("networkQuery/isSupervised", true); } _bpP->setCiteID(); } void bibExtractor::_extract(const QString& text) { _bpP->clearCurrentReference(); _bpP->setReferenceType("unknown"); if (text.trimmed().isEmpty()) { logMessage(tr("Warning: Empty input string.")); return; } QString out_text, out_tagtext; if (_settingsP->value("cb2Bib/PreparserAutomatic").toBool()) _bpP->preparse(text, &out_text); _bpP->parse(text, &out_text, &out_tagtext); if (_bpP->fieldCount() > 0) _bpP->setReferenceType("article"); logMessage(_bpP->autoRecognizedString()); } void bibExtractor::queryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib) { if (succeeded) { _extract(targetBib); if (_input_type == PlainText && _bpP->isAutoRecognized() && !targetPDF.isEmpty()) _document_fn = targetPDF; } _event_loop->exit(); } void bibExtractor::copyMoveEnded(bool ok) { _is_copymove_ok = ok; if (!_is_copymove_ok) logMessage(tr("Error: Copy/move failed. %1").arg(_networkQP->networkPtr()->errorString())); _event_loop->exit(); } void bibExtractor::proxyLogMessage() const { _networkQP->networkPtr()->cancelDownload(); logMessage(tr("Warning: Proxy authentication dialog is disabled in command line mode.")); } void bibExtractor::logMessage(const QString& ms) const { cout << "[cb2bib] " << ms << _QT_6_endl; } bool bibExtractor::isReliable() const { if (_settingsP->cl_sloppy) return true; else return _bpP->isAutoRecognized(); } QString bibExtractor::documentToString(const QString& fn) const { document doc(fn, document::FirstPage); const QString text(doc.toString()); if (!doc.errorString().isEmpty()) logMessage("Error: " + doc.errorString()); if (_settingsP->value("cb2Bib/AddMetadata").toBool()) { // Add metadata to document text const QString metadata(_mpP->metadata(fn)); if (_settingsP->value("cb2Bib/PreAppendMetadata").toString() == "prepend") return metadata + text; else return text + '\n' + metadata; } else return text; } ������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/networkQuery.h������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016045� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.814761121 30 atime=1762812828.038759355 30 ctime=1762812827.814761121 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/networkQuery.h�����������������������������������������������������������������0000644�0001750�0000144�00000005663�15104461633�020050� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef NETWORKQUERY_H #define NETWORKQUERY_H #include <QDateTime> #include <QObject> #include <QRegExp> class bibParser; class bibReference; class network; class settings; /** cb2Bib Network Queries @author Pere Constans */ class networkQuery : public QObject { Q_OBJECT public: explicit networkQuery(bibParser* bp, QObject* parento = 0); networkQuery(bibParser* bp, network* net, QObject* parento = 0); inline virtual ~networkQuery() {} bool hasSsl(); void submitQuery(const bibReference& reference, const QString& raw_reference, const bool check_document); inline QString errorString() const { return _error_string; } inline network* networkPtr() const { return _networkP; } signals: void queryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib); void statusMessage(const QString& ms); protected: virtual bool checkQueryFile(const QString& fn) const; virtual inline QString fromHtmlString(const QString& str, const bool /* addMetadata */ = false) const { // Note: fromHtmlString in c2bUtils uses QTextDocument to perform HTML to text // conversions. c2bUtils::fromHtmlString is not set in the c2blib because GUI classes // are excluded from the core library. return str; } virtual bool openFile(const QString& /* fn */) const { // Reimplement to open files in GUI mode return false; } private: bool areQueryParametersValid() const; bool setQueryParameters(); const QString encodeUrl(const QString& url) const; void init(); void updateQueryPlaceholders(); QDateTime _timing; QList<uint> _query_parameter_count; QString _Qauthor; QString _Qdoi; QString _Qeprint; QString _Qexcerpt; QString _Qjournal; QString _QjournalCode; QString _Qpage; QString _Qtitle; QString _Qvolume; QString _action; QString _captionQ; QString _error_string; QString _networkquery_tmp_fn1; QString _networkquery_tmp_fn2; QString _pdfurl_prefix; QString _pdfurl_sufix; QString _raw_metadata; QString _raw_reference; QString _referenceurl_prefix; QString _referenceurl_sufix; QString _targetBib; QString _targetPDF; QString _targetQ; bibParser* _bpP; bool _check_document; bool _is_end_of_file; bool _pdfurl_is_captured; network* _networkP; settings* _settingsP; private slots: void queryDone(bool succeeded); void submitQuery1(); void submitQuery2(bool succeeded); void submitQuery3(bool succeeded); }; #endif �����������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/texParser.h���������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015303� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.846760869 30 atime=1762812828.038759355 30 ctime=1762812827.846760869 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/texParser.h��������������������������������������������������������������������0000644�0001750�0000144�00000003671�15104461633�017303� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef TEXPARSER_H #define TEXPARSER_H #include <QString> #include <QTextStream> /** Minimalist TeX parser */ class texParser { public: inline texParser() : _stop_parsing(false) {} inline virtual ~texParser() {} protected: virtual void parseComment(const QString& /* p */) {} virtual void parseElement(const QString& /* p */, const QString& /* e */, const QString& /* v */) {} virtual void parseEmptyLine() {} virtual void parseLaTeXMarkup(const QString& /* p */, const QString& /* e */) {} virtual void parseTextParagraph(const QString& /* p */) {} void parse(QString tex); inline void stop() { _stop_parsing = true; } private: QString _element; QString _line; QString _paragraph; QTextStream _stream; bool _stop_parsing; void doElement(); void gotoEnd(const QString& e); void gotoEndBraces(const QString& e); void gotoEndMacro(const QString& e); inline const QString& readLine(const bool trim = false) { if (trim) _line = _stream.readLine().trimmed(); else _line = _stream.readLine(); return _line; } inline void flushElement(const QString& e, const QString& v) { flush(); parseElement(_element, e, v); } inline void flushLaTeXMarkup(const QString& e) { _element = _line; flush(); parseLaTeXMarkup(_element, e); } inline void flush() { if (_paragraph.isEmpty()) return; parseTextParagraph(_paragraph.mid(1)); _paragraph.clear(); } }; #endif �����������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/scorer.h������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014623� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.826761026 30 atime=1762812828.038759355 30 ctime=1762812827.830760995 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/scorer.h�����������������������������������������������������������������������0000644�0001750�0000144�00000004600�15104461633�016614� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef SCORER_H #define SCORER_H #include <QVector> #ifdef C2B_DEBUG_SEARCHING #include <QtDebug> #endif struct scorer { scorer() : memweight(0.9), memstarts(300), memends(2300), tscore(0), mscore(0), nscores(0), mempos(-1) {} void setPattern(const QVector<int>& patternlengths) { plengths = patternlengths; } void setPattern(const int length) { plengths.clear(); if (length > 0) plengths.append(length); } void initialize() { tscore = double(0); mscore = double(0); nscores = 0; mempos = -1; } void update(const int pos, const int mlength) { ++nscores; if (plengths.count() == 0) { // FixedStringAllWords and FixedStringAnyWord cases tscore += double(1); return; } // Combine the two parallel processes (P. Constans. Relevance ranking for online text matching. 2021): // - working memory in tscore // - refreshing activation in mscore if (plengths.contains(mlength)) { tscore += double(1); if (mempos >= 0 && pos >= mempos + memstarts && pos <= mempos + memends) mscore += double(1); mempos = pos; } else tscore += localScore(mlength); } double localScore(const int mlength) const { double ls(0); for (int i = 0; i < plengths.count(); ++i) ls = std::max(ls, double(std::min(plengths.at(i), mlength)) / double(std::max(plengths.at(i), mlength))); return ls; } double score() const { #ifdef C2B_DEBUG_SEARCHING qDebug() << "scorer: n tscore mscore score" << nscores << tscore << mscore << " " << (double(1) - memweight) * tscore + memweight* mscore; #endif return (double(1) - memweight) * tscore + memweight * mscore; } double memweight; int memstarts, memends; double tscore, mscore; int nscores, mempos; QVector<int> plengths; }; #endif ��������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/txtmatcher.cpp������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016043� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.734761752 30 atime=1762812828.038759355 29 ctime=1762812827.73876172 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/txtmatcher.cpp�����������������������������������������������������������������0000644�0001750�0000144�00000036204�15104461633�020042� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "txtmatcher.h" #ifdef C2B_USE_TXTMATCHER_AVX2 #include <immintrin.h> #endif #ifdef C2B_USE_TXTMATCHER_SSE2 #include <emmintrin.h> #endif static const double _upper_case_letter_frequency[] = { // A B C D E F G H I 0.0461215, 0.0219791, 0.0542205, 0.0247118, 0.0243137, 0.0249272, 0.0155418, 0.0318637, 0.0319445, // J K L M N O P Q R 0.0185178, 0.0110203, 0.0211695, 0.0345829, 0.0251332, 0.0222969, 0.0335058, 0.0034723, 0.0278396, // S T U V W X Y Z 0.0433791, 0.0483445, 0.0070459, 0.0108463, 0.0114125, 0.0053894, 0.0057301, 0.0039877 }; static const double _lower_case_letter_frequency[] = { // a b c d e f g h i 0.6139480, 0.1124940, 0.3052070, 0.2845240, 0.9756860, 0.1816290, 0.1361380, 0.3223960, 0.6192860, // j k l m n o p q r 0.0084664, 0.0315632, 0.3386540, 0.2145900, 0.5768830, 0.5937770, 0.1803630, 0.0162243, 0.5046140, // s t u v w x y z 0.4905200, 0.6968060, 0.2104950, 0.0785456, 0.0858753, 0.0380061, 0.1229070, 0.0193867 }; /** Specialized substring search for English texts */ txtmatcher::txtmatcher() : _case_sensitive(true), _chook(-1), _frequency(10000) {} txtmatcher::txtmatcher(const QString& spattern, const Qt::CaseSensitivity cs, const int chook) { setPattern(spattern, cs, chook); } void txtmatcher::setPattern(const QString& spattern, const Qt::CaseSensitivity cs, const int chook) { _pattern = spattern; _case_sensitive = cs == Qt::CaseSensitive; const int m(_pattern.size()); #ifdef C2B_USE_TXTMATCHER_SCALAR _padded_pattern = _pattern; #else #ifdef C2B_USE_TXTMATCHER_SSE2 _padded_pattern.fill(QChar(65535), std::max(m, 8)); #endif #ifdef C2B_USE_TXTMATCHER_AVX2 _padded_pattern.fill(QChar(65535), std::max(m, 16)); #endif for (int i = 0; i < m; ++i) _padded_pattern[i] = _pattern.at(i); #endif if (_case_sensitive) { _lcp.clear(); _ucp.clear(); } else { // Safe character case folding _lcp = _padded_pattern; for (int i = 0; i < m; ++i) _lcp[i] = _padded_pattern.at(i).toLower(); _ucp = _padded_pattern; for (int i = 0; i < m; ++i) _ucp[i] = _padded_pattern.at(i).toUpper(); } if (chook < 0 || chook >= m) _set_lowest_frequency_character(_pattern, _case_sensitive); else { _chook = chook; _frequency = 0; } } int txtmatcher::indexIn(const QChar* const text, const int length, const int from) const { if (from + _pattern.size() > length) return -1; if (_pattern.size() == 0) // Convention return from; #ifdef C2B_USE_TXTMATCHER_SCALAR if (_case_sensitive) return _find_case_sensitive(reinterpret_cast<const ushort*>(text), length, from); else return _find_case_insensitive(reinterpret_cast<const ushort*>(text), length, from); #endif #ifdef C2B_USE_TXTMATCHER_SSE2 if (_pattern.size() > 8 || length - from < 5 * 8) { if (_case_sensitive) return _find_case_sensitive(reinterpret_cast<const ushort*>(text), length, from); else return _find_case_insensitive(reinterpret_cast<const ushort*>(text), length, from); } else { if (_case_sensitive) return _find_case_sensitive_sse2(reinterpret_cast<const ushort*>(text), length, from); else return _find_case_insensitive_sse2(reinterpret_cast<const ushort*>(text), length, from); } #endif #ifdef C2B_USE_TXTMATCHER_AVX2 if (_pattern.size() > 16 || length - from < 5 * 16) { if (_case_sensitive) return _find_case_sensitive(reinterpret_cast<const ushort*>(text), length, from); else return _find_case_insensitive(reinterpret_cast<const ushort*>(text), length, from); } else { if (_case_sensitive) return _find_case_sensitive_avx2(reinterpret_cast<const ushort*>(text), length, from); else return _find_case_insensitive_avx2(reinterpret_cast<const ushort*>(text), length, from); } #endif } void txtmatcher::_set_lowest_frequency_character(const QString& spattern, const bool cs) { const int n(spattern.length()); int lfc(-1); double lf(2); if (cs) for (int l = 0; l < n; ++l) { const ushort lcs(spattern.at(l).unicode()); double cf(0); if (lcs > 96 && lcs < 123) cf = _lower_case_letter_frequency[lcs - 97]; else if (lcs > 64 && lcs < 91) cf = _upper_case_letter_frequency[lcs - 65]; if (cf < lf) { lf = cf; lfc = l; } } else for (int l = 0; l < n; ++l) { const ushort lcu(spattern.at(l).toLower().unicode()); double cf(0); if (lcu > 96 && lcu < 123) cf = _lower_case_letter_frequency[lcu - 97] + _upper_case_letter_frequency[lcu - 97]; if (cf < lf) { lf = cf; lfc = l; } } _chook = lfc; _frequency = 1 + int(1000 * lf); } int txtmatcher::_find_case_sensitive(const ushort* const t, const int length, const int from) const { const int sp(_pattern.size()); const int ch(_chook); const ushort* const p(reinterpret_cast<const ushort*>(_pattern.unicode())); const ushort pch(p[ch]); const int a(from + ch), b(length - sp + ch + 1); for (int i = a; i < b; ++i) if (t[i] == pch) { for (int j = 0; j < sp; ++j) if (t[i - ch + j] != p[j]) goto next; return i - ch; next: continue; } return -1; } int txtmatcher::_find_case_insensitive(const ushort* const t, const int length, const int from) const { const int sp(_pattern.size()); const int ch(_chook); const ushort* const lp(reinterpret_cast<const ushort*>(_lcp.unicode())); const ushort* const up(reinterpret_cast<const ushort*>(_ucp.unicode())); const ushort lpch(lp[ch]); const ushort upch(up[ch]); const int a(from + ch), b(length - sp + ch + 1); for (int i = a; i < b; ++i) if (t[i] == lpch || t[i] == upch) { for (int j = 0; j < sp; ++j) if (t[i - ch + j] != lp[j] && t[i - ch + j] != up[j]) goto next; return i - ch; next: continue; } return -1; } /* SIMD implementations for _find_case_sensitive and _find_case_insensitive Optimizes short substring pattern matching (words and stemmed words) required in context and approximate searches The _find_case_sensitive and _find_case_insensitive routines use effective skipping provided by lowest frequency letters See B Smyth, Computing Patterns in Strings (2003), chapter 8, for a review on search techniques and letter frequency specialization See W Muła, SIMD-friendly algorithms for substring searching (2016), for generic SIMD implementations */ #ifdef C2B_USE_TXTMATCHER_SSE2 static const uint16_t _zpattern_sse2[] = { 0x0, 0x3, 0xf, 0x3f, 0xff, 0x3ff, 0xfff, 0x3fff, 0xffff }; int txtmatcher::_find_case_sensitive_sse2(const ushort* const t, const int length, const int from) const { const int sp(_pattern.size()); const int ch(_chook); const ushort* const p(reinterpret_cast<const ushort*>(_padded_pattern.unicode())); const ushort pch(p[ch]); const uint16_t zpattern(_zpattern_sse2[sp]); const __m128i ppattern(_mm_loadu_si128(reinterpret_cast<const __m128i*>(p))); const __m128i spattern(_mm_set1_epi16(pch)); const int tposition(length - 8 - 7 + 1); int cposition(from + ch); while (cposition < tposition) { __m128i text(_mm_loadu_si128(reinterpret_cast<const __m128i*>(t + cposition))); const uint16_t zsp(_mm_movemask_epi8(_mm_cmpeq_epi16(text, spattern))); if (zsp == uint16_t(0)) cposition += 8; else { const int ctz(__builtin_ctz(zsp) / 2); cposition += ctz; text = _mm_loadu_si128(reinterpret_cast<const __m128i*>(t + cposition - ch)); const uint16_t zp(_mm_movemask_epi8(_mm_cmpeq_epi16(text, ppattern))); if (zp == zpattern) return cposition - ch; ++cposition; } } for (int i = cposition; i < length - sp + ch + 1; ++i) if (t[i] == pch) { for (int j = 0; j < sp; ++j) if (t[i - ch + j] != p[j]) goto next; return i - ch; next: continue; } return -1; } int txtmatcher::_find_case_insensitive_sse2(const ushort* const t, const int length, const int from) const { const int sp(_pattern.size()); const int ch(_chook); const ushort* const lp(reinterpret_cast<const ushort*>(_lcp.unicode())); const ushort* const up(reinterpret_cast<const ushort*>(_ucp.unicode())); const ushort lpch(lp[ch]); const ushort upch(up[ch]); const uint16_t zpattern(_zpattern_sse2[sp]); const __m128i lcpattern(_mm_loadu_si128(reinterpret_cast<const __m128i*>(lp))); const __m128i ucpattern(_mm_loadu_si128(reinterpret_cast<const __m128i*>(up))); const __m128i lspattern(_mm_set1_epi16(lpch)); const __m128i uspattern(_mm_set1_epi16(upch)); const int tposition(length - 8 - 7 + 1); int cposition(from + ch); while (cposition < tposition) { __m128i text(_mm_loadu_si128(reinterpret_cast<const __m128i*>(t + cposition))); const uint16_t zlsp(_mm_movemask_epi8(_mm_cmpeq_epi16(text, lspattern))); const uint16_t zusp(_mm_movemask_epi8(_mm_cmpeq_epi16(text, uspattern))); const uint16_t zsp(zlsp | zusp); if (zsp == uint16_t(0)) cposition += 8; else { const int ctz(__builtin_ctz(zsp) / 2); cposition += ctz; text = _mm_loadu_si128(reinterpret_cast<const __m128i*>(t + cposition - ch)); const uint16_t zlp(_mm_movemask_epi8(_mm_cmpeq_epi16(text, lcpattern))); const uint16_t zup(_mm_movemask_epi8(_mm_cmpeq_epi16(text, ucpattern))); const uint16_t zp(zlp | zup); if (zp == zpattern) return cposition - ch; ++cposition; } } for (int i = cposition; i < length - sp + ch + 1; ++i) if (t[i] == lpch || t[i] == upch) { for (int j = 0; j < sp; ++j) if (t[i - ch + j] != lp[j] && t[i - ch + j] != up[j]) goto next; return i - ch; next: continue; } return -1; } #endif #ifdef C2B_USE_TXTMATCHER_AVX2 static const uint32_t _zpattern_avx2[] = { 0x0, 0x3, 0xf, 0x3f, 0xff, 0x3ff, 0xfff, 0x3fff, 0xffff, 0x3ffff, 0xfffff, 0x3fffff, 0xffffff, 0x3ffffff, 0xfffffff, 0x3fffffff, 0xffffffff }; int txtmatcher::_find_case_sensitive_avx2(const ushort* const t, const int length, const int from) const { const int sp(_pattern.size()); const int ch(_chook); const ushort* const p(reinterpret_cast<const ushort*>(_padded_pattern.unicode())); const ushort pch(p[ch]); const uint32_t zpattern(_zpattern_avx2[sp]); const __m256i ppattern(_mm256_loadu_si256(reinterpret_cast<const __m256i*>(p))); const __m256i spattern(_mm256_set1_epi16(pch)); const int tposition(length - 16 - 15 + 1); int cposition(from + ch); while (cposition < tposition) { __m256i text(_mm256_loadu_si256(reinterpret_cast<const __m256i*>(t + cposition))); const uint32_t zsp(_mm256_movemask_epi8(_mm256_cmpeq_epi16(text, spattern))); if (zsp == uint32_t(0)) cposition += 16; else { const int ctz(__builtin_ctz(zsp) / 2); cposition += ctz; text = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(t + cposition - ch)); const uint32_t zp(_mm256_movemask_epi8(_mm256_cmpeq_epi16(text, ppattern))); if (zp == zpattern) return cposition - ch; ++cposition; } } for (int i = cposition; i < length - sp + ch + 1; ++i) if (t[i] == pch) { for (int j = 0; j < sp; ++j) if (t[i - ch + j] != p[j]) goto next; return i - ch; next: continue; } return -1; } int txtmatcher::_find_case_insensitive_avx2(const ushort* const t, const int length, const int from) const { const int sp(_pattern.size()); const int ch(_chook); const ushort* const lp(reinterpret_cast<const ushort*>(_lcp.unicode())); const ushort* const up(reinterpret_cast<const ushort*>(_ucp.unicode())); const ushort lpch(lp[ch]); const ushort upch(up[ch]); const uint32_t zpattern(_zpattern_avx2[sp]); const __m256i lcpattern(_mm256_loadu_si256(reinterpret_cast<const __m256i*>(lp))); const __m256i ucpattern(_mm256_loadu_si256(reinterpret_cast<const __m256i*>(up))); const __m256i lspattern(_mm256_set1_epi16(lpch)); const __m256i uspattern(_mm256_set1_epi16(upch)); const int tposition(length - 16 - 15 + 1); int cposition(from + ch); while (cposition < tposition) { __m256i text(_mm256_loadu_si256(reinterpret_cast<const __m256i*>(t + cposition))); const uint32_t zlsp(_mm256_movemask_epi8(_mm256_cmpeq_epi16(text, lspattern))); const uint32_t zusp(_mm256_movemask_epi8(_mm256_cmpeq_epi16(text, uspattern))); const uint32_t zsp(zlsp | zusp); if (zsp == uint32_t(0)) cposition += 16; else { const int ctz(__builtin_ctz(zsp) / 2); cposition += ctz; text = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(t + cposition - ch)); const uint32_t zlp(_mm256_movemask_epi8(_mm256_cmpeq_epi16(text, lcpattern))); const uint32_t zup(_mm256_movemask_epi8(_mm256_cmpeq_epi16(text, ucpattern))); const uint32_t zp(zlp | zup); if (zp == zpattern) return cposition - ch; ++cposition; } } for (int i = cposition; i < length - sp + ch + 1; ++i) if (t[i] == lpch || t[i] == upch) { for (int j = 0; j < sp; ++j) if (t[i - ch + j] != lp[j] && t[i - ch + j] != up[j]) goto next; return i - ch; next: continue; } return -1; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/journalDB.cpp�������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015541� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.694762067 30 atime=1762812828.038759355 30 ctime=1762812827.698762036 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/journalDB.cpp������������������������������������������������������������������0000644�0001750�0000144�00000022543�15104461633�017540� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "journalDB.h" #include "cb2bib_utilities.h" #include <QFile> #include <QObject> #include <QTextStream> journalDB::journalDB(const QString& dbfile) { if (dbfile.isEmpty()) { c2bUtils::warn(QObject::tr("No journal file especified")); return; } _nitems = 0; QFile file(dbfile); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { c2bUtils::warn(QObject::tr("Could not open journal file %1 for reading").arg(dbfile)); return; } QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); QString line; int line_number(0); while (!stream.atEnd()) { line = stream.readLine(); ++line_number; if (line.isEmpty() || line.startsWith('#')) continue; const QStringList spLine(line.split('|', _QT_6_SkipEmptyParts)); if (spLine.count() != 3) { c2bUtils::warn(QObject::tr("Syntax error in journal file at line %1").arg(line_number)); continue; } const QStringList spAbbreviated(spLine.at(1).split('=', _QT_6_SkipEmptyParts)); const int na(spAbbreviated.count()); if (na < 1 || na > 2) { c2bUtils::warn(QObject::tr("Syntax error in journal file at line %1").arg(line_number)); continue; } const QStringList spExtended(spLine.at(2).split('=', _QT_6_SkipEmptyParts)); const int ne(spExtended.count()); if (ne < 1 || ne > 2) { c2bUtils::warn(QObject::tr("Syntax error in journal file at line %1").arg(line_number)); continue; } for (int e = 0, c = 0; e < ne; ++e) for (int a = 0; a < na; ++a) { _nitems++; JCode += (c++ == 0) ? spLine.at(0).toLower() : QString(); JAbbrev += spAbbreviated.at(a); JExtended += spExtended.at(e); } } file.close(); JAbbrev_simp.resize(_nitems); JExtended_simp.resize(_nitems); for (int i = 0; i < _nitems; ++i) { JAbbrev_simp[i] = JAbbrev.at(i).toLower(); c2bUtils::remove(JAbbrev_simp[i], c2bUtils::nonLetter); JExtended_simp[i] = JExtended.at(i).toLower(); c2bUtils::remove(JExtended_simp[i], c2bUtils::nonLetter); } } /** \page journalproc Processing of Journal Names cb2Bib processes journal names according to its editable database, stored at <tt>abbreviations.txt</tt>. This file contains a list of journal names equivalences: a capital-letter acronym, the abbreviated form, and the title of the journal, all three on one single line. The <tt>abbreviations.txt</tt> file has the following structure: \verbatim JA|J. Abbrev.|Journal of Abbreviations AN|Am. Nat.=Amer. Naturalist|American Naturalist=The American Naturalist \endverbatim The first field, the capital-letter acronym, is a user-defined shorthand to access a journal title by typing it at the extraction panel. The second field is the abbreviated form of the journal. To adapt to multiple abbreviations in use, cb2Bib allows one alternate version of the abbreviation, indicated with an equal sign <tt>=</tt>. In the above example, the ISO 4 abbreviation 'Am. Nat.' is the primary one and 'Amer. Naturalist' is the alternate one. Finally, the third field is the full title of the journal. As for the abbreviations, the full title also admits one alternate form. Abbreviated and full title alternates serve two purposes: journal recognition and citation styling. The former is performed internally by cb2Bib as part of a bibliographic reference extraction, and the latter is accomplished in the embedded BibTeX editor by replacing back and forth abbreviated-full forms, in order to set journals in accordance to the guidelines of a particular publication. <p> </p> Journal names processing is performed whenever a string is recognized as 'journal', and, additionally, when pressing <tt>Intro Key</tt> at the journal edit line. <p> </p> - Retrieves Journal name in <b>abbreviated form</b> if found. - If Journal name is not found in the database, returns input Journal name. - Search is case insensitive. - **Warning:** Journal codes can be duplicated. If duplicated, returns input Journal name. <p> </p> - Retrieves Journal name in <b>full form</b> if found. - If Journal name is not found in the database, returns input Journal name. - Search is case insensitive. - **Warning:** Journal codes can be duplicated. If duplicated, returns input Journal name. <p> </p> See \ref c2bconf_files, \ref c2bconf_bibtex, and \ref c2beditor_menu. */ QString journalDB::retrieve(const QString& JQuery) const { const QString query(c2bUtils::removed(JQuery.toLower(), c2bUtils::nonLetter)); if (query.isEmpty()) return QString(); for (int i = 0; i < _nitems; ++i) { if (JAbbrev_simp.at(i) == query) { if (i > 0 && JExtended_simp.at(i) == JExtended_simp.at(i - 1)) return JAbbrev.at(i - 1); else return JAbbrev.at(i); } if (JExtended_simp.at(i) == query) return JAbbrev.at(i); } int journal_found(0); int journal_found_at(-1); for (int i = 0; i < _nitems; ++i) if (JCode.at(i) == query) { journal_found++; journal_found_at = i; } if (journal_found == 1) return JAbbrev.at(journal_found_at); else return JQuery; } QString journalDB::retrieveFull(const QString& JQuery) const { const QString query(c2bUtils::removed(JQuery.toLower(), c2bUtils::nonLetter)); if (query.isEmpty()) return QString(); for (int i = 0; i < _nitems; ++i) { if (JAbbrev_simp.at(i) == query) return JExtended.at(i); if (JExtended_simp.at(i) == query) { if (i > 0 && JAbbrev_simp.at(i) == JAbbrev_simp.at(i - 1)) return JExtended.at(i - 1); else if (i > 1 && JAbbrev_simp.at(i) == JAbbrev_simp.at(i - 2)) return JExtended.at(i - 2); else return JExtended.at(i); } } int journal_found(0); int journal_found_at(-1); for (int i = 0; i < _nitems; ++i) if (JCode.at(i) == query) { journal_found++; journal_found_at = i; } if (journal_found == 1) return JExtended.at(journal_found_at); else return JQuery; } QString journalDB::retrieveAlternate(const QString& JQuery) const { const QString query(c2bUtils::removed(JQuery.toLower(), c2bUtils::nonLetter)); if (query.isEmpty()) return QString(); for (int i = _nitems - 1; i >= 0; --i) { if (JAbbrev_simp.at(i) == query) { if (i + 1 < _nitems && JExtended_simp.at(i) == JExtended_simp.at(i + 1)) return JAbbrev.at(i + 1); else return JAbbrev.at(i); } if (JExtended_simp.at(i) == query) return JAbbrev.at(i); } int journal_found(0); int journal_found_at(-1); for (int i = 0; i < _nitems; i++) if (JCode.at(i) == query) { journal_found++; journal_found_at = i; } if (journal_found == 1) { if (journal_found_at + 1 < _nitems && JCode.at(journal_found_at + 1).isEmpty()) return JAbbrev.at(journal_found_at + 1); else return JAbbrev.at(journal_found_at); } else return JQuery; } QString journalDB::retrieveAlternateFull(const QString& JQuery) const { const QString query(c2bUtils::removed(JQuery.toLower(), c2bUtils::nonLetter)); if (query.isEmpty()) return QString(); for (int i = _nitems - 1; i >= 0; --i) { if (JAbbrev_simp.at(i) == query) return JExtended.at(i); if (JExtended_simp.at(i) == query) { if (i + 2 < _nitems && JAbbrev_simp.at(i) == JAbbrev_simp.at(i + 2)) return JExtended.at(i + 2); else if (i + 1 < _nitems && JAbbrev_simp.at(i) == JAbbrev_simp.at(i + 1)) return JExtended.at(i + 1); else return JExtended.at(i); } } int journal_found(0); int journal_found_at(-1); for (int i = 0; i < _nitems; ++i) if (JCode.at(i) == query) { journal_found++; journal_found_at = i; } if (journal_found == 1) { if (journal_found_at + 2 < _nitems && JCode.at(journal_found_at + 1).isEmpty() && JCode.at(journal_found_at + 2).isEmpty()) return JExtended.at(journal_found_at + 2); else if (journal_found_at + 1 < _nitems && JCode.at(journal_found_at + 1).isEmpty()) return JExtended.at(journal_found_at + 1); else return JExtended.at(journal_found_at); } else return JQuery; } �������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/settings.cpp��������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015521� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.722761847 30 atime=1762812828.038759355 30 ctime=1762812827.722761847 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/settings.cpp�������������������������������������������������������������������0000644�0001750�0000144�00000065556�15104461633�017533� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "settings.h" #include "cb2bib_utilities.h" #include <QCoreApplication> #include <QDir> /** Global settings for cb2Bib */ settings::settings(const QString& organization, const QString& application, QObject* parento) : QSettings(organization, application, parento) { _init(); } settings::settings(const QString& fn, QObject* parento) : QSettings(fn, QSettings::IniFormat, parento) { _init(); } settings::settings(QObject* parento) : QSettings(C2B_ORGANIZATION, C2B_APPLICATION, parento) { _init(); init(false); } settings::~settings() { _c2b_global_settings = 0; } void settings::init(bool command_line) { if (command_line) readCommandLine(); if (cl_user_configured) _is_usb_configured_mode = QDir::toNativeSeparators(QDir::cleanPath(QSettings::fileName())) == QDir::toNativeSeparators(QDir::cleanPath(_c2bApp->applicationDirPath() + '/' + "cb2bib.conf")); else _is_usb_configured_mode = false; if (_is_usb_configured_mode) { _c2bAppDir = QDir(_c2bApp->applicationDirPath()); _tmp_dir_path = _c2bApp->applicationDirPath(); } else { // Use user's home as tmp_dir since tmp files are more accessible if they are needed, // for instance, for debugging netqinf // Using cb2bib remotely causes tmp_dir not being writable, fallback to machine's tmp const QFileInfo hpi(QDir::homePath()); if (hpi.exists() && hpi.isWritable()) _tmp_dir_path = QDir::homePath(); else _tmp_dir_path = QDir::tempPath(); } setDefaults(); // Set relative to BibTeX file in USB mode, overriding defaults. if (_is_usb_configured_mode) setValue("cb2Bib/RelativePdfDirectory", true); } void settings::_init() { _c2bApp = QCoreApplication::instance(); Q_ASSERT_X(_c2bApp, "settings", "application was not instantiated"); Q_ASSERT_X(!_c2b_global_settings, "settings", "settings already instantiated"); settings::_c2b_global_settings = this; _application_pid = QString::number(_c2bApp->applicationPid()); _is_loaded = true; cl_bibedit = false; cl_cb2bib_import_mode = false; cl_cb2bib_information = false; cl_cb2bib_tests = false; cl_citer = false; cl_configure = false; cl_doc2bib = false; cl_html_annote = false; cl_import = false; cl_index = false; cl_sloppy = false; cl_txt2bib = false; cl_user_configured = false; cl_view_annote = false; } void settings::setDefaultValue(const QString& key, const QVariant& defaulValue) { // Makes sure a key is initialized setValue(key, value(key, defaulValue)); } void settings::setDefaults() { QHash<QString, QVariant> defaults; const QString dsep(QDir::separator()); // Files defaults["cb2Bib/BibTeXFile"] = QDir::cleanPath(QDir::homePath() + dsep + "references.bib"); defaults["cb2Bib/CacheDirectory"] = QDir::cleanPath(QDir::homePath() + dsep + "PdfDocuments" + dsep + "c2b.tmp"); defaults["cb2Bib/PdfDirectory"] = QDir::cleanPath(QDir::homePath() + dsep + "PdfDocuments"); #if defined(Q_OS_WIN) const QString C2B_APP_DIR(_c2bApp->applicationDirPath() + dsep); defaults["c2bAnnote/AnnoteCssFile"] = C2B_APP_DIR + "data\\tex2html.css"; defaults["c2bAnnote/MathJaxHeaderFile"] = C2B_APP_DIR + "data\\tex2html_mathjax_header.html"; defaults["c2bBibSearcher/Pdf2TextBin"] = C2B_APP_DIR + "externtools\\xpdf\\pdf2cb.exe"; defaults["c2bPdfImport/LastFile"] = C2B_APP_DIR + "testPDFImport\\nomeaning1.pdf"; defaults["c2bPdfImport/Pdf2TextBin"] = C2B_APP_DIR + "externtools\\xpdf\\pdf2cb.exe"; defaults["cb2Bib/BrowserCssFile"] = C2B_APP_DIR + "data\\references.css"; defaults["cb2Bib/JournalFile"] = C2B_APP_DIR + "data\\abbreviations.txt"; defaults["cb2Bib/NetworkFile"] = C2B_APP_DIR + "data\\netqinf.txt"; defaults["cb2Bib/PosLexiconFile"] = C2B_APP_DIR + "data\\lexicon.pos"; defaults["cb2Bib/PostprocessBibTeXBin"] = C2B_APP_DIR + C2B_POSTPROCESS_BIBTEX_BIN; defaults["cb2Bib/PreparserBin"] = C2B_APP_DIR + "c2btools\\ris2bib.bat"; defaults["cb2Bib/RegularExpressionFile"] = C2B_APP_DIR + "data\\regexps.txt"; #elif defined(Q_OS_MACOS) QString C2B_DATA_DIR_MAC(C2B_DATA_DIR); if (QDir(C2B_DATA_DIR + "/data/").exists()) C2B_DATA_DIR_MAC = QDir::cleanPath(C2B_DATA_DIR + '/'); else if (QDir(_c2bApp->applicationDirPath() + "/../Resources/data/").exists()) C2B_DATA_DIR_MAC = QDir::cleanPath(_c2bApp->applicationDirPath() + "/../Resources/"); defaults["c2bAnnote/AnnoteCssFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/tex2html.css"); defaults["c2bAnnote/MathJaxHeaderFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/tex2html_local_mathjax_header.html"); defaults["c2bBibSearcher/Pdf2TextBin"] = QDir::cleanPath(C2B_BIBSEARCHER_PDF2TXT_BIN); defaults["c2bPdfImport/LastFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/testPDFImport/nomeaning1.pdf"); defaults["c2bPdfImport/Pdf2TextBin"] = QDir::cleanPath(C2B_PDFIMPORT_PDF2TXT_BIN); defaults["cb2Bib/BrowserCssFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/references.css"); defaults["cb2Bib/ExifToolBin"] = QDir::cleanPath(C2B_METADATAPARSER_EXIFTOOL_BIN); defaults["cb2Bib/JournalFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/abbreviations.txt"); defaults["cb2Bib/NetworkFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/netqinf.txt"); defaults["cb2Bib/PosLexiconFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + dsep + "data/lexicon.pos"); defaults["cb2Bib/PostprocessBibTeXBin"] = QDir::cleanPath(C2B_DATA_DIR_MAC + C2B_POSTPROCESS_BIBTEX_BIN); defaults["cb2Bib/PreparserBin"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/c2btools/ris2bib"); defaults["cb2Bib/RegularExpressionFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/regexps.txt"); #else // Q_OS_UNIX defaults["c2bAnnote/AnnoteCssFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/tex2html.css"); defaults["c2bAnnote/MathJaxHeaderFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/tex2html_local_mathjax_header.html"); defaults["c2bBibSearcher/Pdf2TextBin"] = QDir::cleanPath(C2B_BIBSEARCHER_PDF2TXT_BIN); defaults["c2bPdfImport/LastFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "testPDFImport/nomeaning1.pdf"); defaults["c2bPdfImport/Pdf2TextBin"] = QDir::cleanPath(C2B_PDFIMPORT_PDF2TXT_BIN); defaults["cb2Bib/BrowserCssFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/references.css"); defaults["cb2Bib/ExifToolBin"] = QDir::cleanPath(C2B_METADATAPARSER_EXIFTOOL_BIN); defaults["cb2Bib/JournalFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/abbreviations.txt"); defaults["cb2Bib/NetworkFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/netqinf.txt"); defaults["cb2Bib/PosLexiconFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/lexicon.pos"); defaults["cb2Bib/PostprocessBibTeXBin"] = QDir::cleanPath(C2B_DATA_DIR + dsep + C2B_POSTPROCESS_BIBTEX_BIN); defaults["cb2Bib/PreparserBin"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "c2btools/ris2bib"); defaults["cb2Bib/RegularExpressionFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/regexps.txt"); #endif // External file manager defaults["cb2Bib/FmClient"] = false; defaults["cb2Bib/FmClientCopyArg"] = C2B_FM_CLIENT_COPY_ARG; defaults["cb2Bib/FmClientCopyBin"] = QDir::cleanPath(C2B_FM_CLIENT_COPY_BIN); defaults["cb2Bib/FmClientMoveArg"] = C2B_FM_CLIENT_MOVE_ARG; defaults["cb2Bib/FmClientMoveBin"] = QDir::cleanPath(C2B_FM_CLIENT_MOVE_BIN); // Proxy defaults["cb2Bib/UseProxy"] = false; defaults["cb2Bib/ProxyPort"] = 8080; defaults["cb2Bib/ProxyType"] = 0; // Postprocess BibTeX defaults["cb2Bib/PostprocessBibTeXArg"] = C2B_POSTPROCESS_BIBTEX_ARG; defaults["cb2Bib/PostprocessBibTeXExt"] = C2B_POSTPROCESS_BIBTEX_EXT; // Misc defaults["c2bAnnote/IncludeCSS"] = true; defaults["c2bAnnote/UseRelativeLinks"] = false; defaults["cb2Bib/AddMetadata"] = true; defaults["cb2Bib/AutomaticPdfDownload"] = false; defaults["cb2Bib/AutomaticQuery"] = false; defaults["cb2Bib/CheckRepeatedOnSave"] = false; defaults["cb2Bib/CiteCommandPattern"] = C2B_CITE_COMMAND_PATTERN; defaults["cb2Bib/CiteIdPattern"] = C2B_CITE_ID_PATTERN; defaults["cb2Bib/ConvertReferenceToLaTeX"] = true; defaults["cb2Bib/CopyMovePdf"] = "copy"; defaults["cb2Bib/DoHeuristicGuess"] = true; defaults["cb2Bib/DocumentIdPattern"] = C2B_DOCUMENT_ID_PATTERN; defaults["cb2Bib/FindReplaceInput"] = true; defaults["cb2Bib/FindReplaceInputList"] = QString(C2B_FIND_REPLACE_LIST).split("^e"); defaults["cb2Bib/InsertMetadata"] = false; defaults["cb2Bib/KeepTmpNQFiles"] = false; defaults["cb2Bib/MovePdf"] = false; defaults["cb2Bib/PageNumberSeparator"] = " - "; defaults["cb2Bib/PostprocessMonth"] = false; defaults["cb2Bib/PreAppendMetadata"] = "prepend"; defaults["cb2Bib/PreparserAutomatic"] = false; defaults["cb2Bib/PreparserShowLog"] = true; defaults["cb2Bib/RelativePdfDirectory"] = false; defaults["cb2Bib/SetJournalsToFullname"] = false; defaults["cb2Bib/UseDoubleBraces"] = true; defaults["cb2Bib/UseFullNames"] = false; // Pdf2Text arguments defaults["c2bBibSearcher/Pdf2TextArg"] = "-q"; defaults["c2bPdfImport/Pdf2TextArg"] = "-q -f 1 -l 1"; // Construct current settings const QStringList keys(defaults.keys()); for (int i = 0; i < keys.count(); ++i) setValue(keys.at(i), value(keys.at(i), defaults.value(keys.at(i)))); } QString settings::applicationDataDir() const { // Base application data dir containing ./data/ ./doc/ ./c2btools/ #if defined(Q_OS_WIN) const QString app_data_dir(_c2bApp->applicationDirPath()); #elif defined(Q_OS_MACOS) QString app_data_dir(C2B_DATA_DIR); if (!QDir(app_data_dir).exists()) app_data_dir = _c2bApp->applicationDirPath() + "/../Resources/"; #else // Q_OS_UNIX const QString app_data_dir(C2B_DATA_DIR); #endif if (QDir(app_data_dir + "/data/").exists()) return QDir::cleanPath(app_data_dir); else return QString(); } settings* settings::_c2b_global_settings = 0; /*************************************************************************** * Command line processing ***************************************************************************/ /** \page commandline cb2Bib Command Line The complete listing of command line uses follows. \htmlonly <pre style="font-size: xx-small;"> Usage: cb2bib cb2bib [action] [filename1 [filename2 ... ]] [--conf [filename.conf]] Actions: --configure [filename.conf] Edit configuration --bibedit [filename1.bib [filename2.bib ... ]] Edit/browse BibTeX files --citer [filename1.bib [filename2.bib ... ]] Start cb2Bib citer --import tmp_reference_filename Import reference, usually from ad hoc websites --doc2bib fn1.doc [fn2.doc ... ] reference.bib Extract reference from document file --txt2bib fn1.txt [fn2.txt ... ] reference.bib Extract reference from text file --index [bibdirname] Extract keywords from document files --html-annote filename.tex Convert annote file to HTML --view-annote filename.tex Convert and visualize annote file --view-annote filename.tex.html Visualize annote file Switches: --conf [filename.conf] Use configuration file --sloppy Accept guesses in automatic reference extraction Examples: cb2bib Start cb2Bib extraction panel cb2bib --import tmp_reference_filename Import reference cb2bib --bibedit filename.bib Edit BibTeX filename.bib cb2bib --conf Start cb2Bib in USB mode cb2bib --doc2bib *.pdf references.bib Extract references from PDF title pages Notes: -Use switch --conf to particularize specific settings for specific actions. -The file cb2bib.conf must be readable and writable. If it does not exist, cb2Bib will create one based on predefined defaults. -If starting cb2Bib from a removable media, use the command 'cb2bib --conf' without configuration filename. Settings will be read from and written to /cb2bib/full/path/cb2bib.conf, being therefore independent of the mounting address that the host computer will provide. -To import references from a browser select when asked c2bimport, which expands to 'cb2bib --import %f'. The browser will provide the temporary reference filename. -A number of factors influence the reliability of automatic extractions. Consider writing customized regular expressions and network queries, and use metadata when available. Important: -The commands --doc2bib and --txt2bib do not append the references to the references.bib. They create a new file, or silently overwrite it if already exists. </pre> \endhtmlonly - <b>Note:</b> On Windows use <tt>c2bconsole</tt> instead of <tt>cb2bib</tt>. See \ref relnotes130. - <b>Note:</b> If using reference extraction command, see \ref faq_automatic_extraction. */ bool settings::isConsoleCheckMode(const int argc, char** argv) { for (int i = 0; i < argc; ++i) if (strcmp(argv[i], "--c2binfo") == 0 || strcmp(argv[i], "--test") == 0) return true; return false; } bool settings::isConsoleMode(const int argc, char** argv) { for (int i = 0; i < argc; ++i) if (strcmp(argv[i], "--html-annote") == 0 || strcmp(argv[i], "--doc2bib") == 0 || strcmp(argv[i], "--txt2bib") == 0 || strcmp(argv[i], "--index") == 0) return true; return false; } bool settings::isSingleApplicationMode(const int argc, char** argv) { for (int i = 0; i < argc; ++i) if (strcmp(argv[i], "--citer") == 0) return true; return false; } bool settings::isConfiguredMode() { const QCoreApplication* capp = QCoreApplication::instance(); const QStringList argv(capp->arguments()); const int argc(argv.count()); if (argc > 1) { for (int i = 1; i < argc; ++i) if (argv.at(i) == "--conf") return true; for (int i = 1; i < argc; ++i) if (argv.at(i) == "--configure") { const int j(i + 1); if (j < argc) if (!argv.at(j).startsWith('-')) return true; return false; } } return false; } const QString settings::configuredFilename() { const QCoreApplication* capp = QCoreApplication::instance(); QStringList arguments(capp->arguments()); arguments.removeAll(QString()); const int argc(arguments.count()); QString filename; for (int i = 1; i < argc - 1; ++i) if (arguments.at(i) == "--conf" || arguments.at(i) == "--configure") { const int j(i + 1); if (!arguments.at(j).startsWith('-')) filename = QFile::decodeName(arguments.at(j).toLocal8Bit()); break; } if (filename.isEmpty()) filename = capp->applicationDirPath() + QDir::separator() + "cb2bib.conf"; QFileInfo fi(filename); if (fi.isDir()) { c2bUtils::warn(QObject::tr("Error: Could not open %1 configuration file for reading/writing").arg(filename)); c2bUtils::warn(QObject::tr("Error: Filename is a directory")); exit(1); } QFile file(filename); if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) { c2bUtils::warn(QObject::tr("Error: Could not open %1 configuration file for reading/writing").arg(filename)); c2bUtils::warn(QObject::tr("Error: %1.").arg(file.errorString())); exit(1); } return filename; } void settings::readCommandLine() { QStringList arguments(_c2bApp->arguments()); arguments.removeAll(QString()); int actions(0); for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i).startsWith('-')) { // switches if (arguments.at(i) == "--conf") { checkCommand(&cl_user_configured, &actions); _conf_command_flags.append("--conf"); const int j(i + 1); if (j < arguments.count() && !arguments.at(j).startsWith('-')) _conf_command_flags.append(arguments.at(j)); --actions; } else if (arguments.at(i) == "--sloppy") { checkCommand(&cl_sloppy, &actions); --actions; } // actions else if (arguments.at(i) == "--configure") checkCommand(&cl_configure, &actions); else if (arguments.at(i) == "--bibedit") checkCommand(&cl_bibedit, &actions); else if (arguments.at(i) == "--citer") checkCommand(&cl_citer, &actions); else if (arguments.at(i) == "--import") checkCommand(&cl_import, &actions); else if (arguments.at(i) == "--html-annote") checkCommand(&cl_html_annote, &actions); else if (arguments.at(i) == "--view-annote") checkCommand(&cl_view_annote, &actions); else if (arguments.at(i) == "--doc2bib") checkCommand(&cl_doc2bib, &actions); else if (arguments.at(i) == "--txt2bib") checkCommand(&cl_txt2bib, &actions); else if (arguments.at(i) == "--index") checkCommand(&cl_index, &actions); else if (arguments.at(i) == "--c2binfo") cl_cb2bib_information = true; else if (arguments.at(i).startsWith("--test")) cl_cb2bib_tests = true; else _is_loaded = false; } if (actions > 1) _is_loaded = false; if (cl_user_configured && cl_configure) _is_loaded = false; if (cl_sloppy && !(cl_doc2bib || cl_txt2bib)) _is_loaded = false; if (cl_index && (cl_bibedit || cl_citer || cl_import || cl_html_annote || cl_view_annote || cl_doc2bib || cl_txt2bib)) _is_loaded = false; if (!_is_loaded) { printUsage(); return; } cl_console_mode = cl_html_annote || cl_cb2bib_information || cl_cb2bib_tests || cl_doc2bib || cl_txt2bib || cl_index; cl_cb2bib_mode = !(cl_console_mode || cl_configure || cl_view_annote); // Check for cl_user_configured if (cl_configure) for (int i = 1; i < arguments.count() - 1; ++i) if (arguments.at(i) == "--configure") { if (!arguments.at(i + 1).startsWith('-')) cl_user_configured = true; break; } // Check for --bibedit files if (cl_bibedit) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--bibedit") { for (int j = i + 1; j < arguments.count(); ++j) if (arguments.at(j).startsWith('-')) break; else cl_bibedit_filenames.append(decodeFilename(arguments.at(j))); break; } if (cl_bibedit_filenames.count() == 0) cl_bibedit = false; else setValue("cb2Bib/BibTeXFile", cl_bibedit_filenames.first()); } // Check for --citer files else if (cl_citer) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--citer") { for (int j = i + 1; j < arguments.count(); ++j) if (arguments.at(j).startsWith('-')) break; else cl_citer_filenames.append(decodeFilename(arguments.at(j))); break; } } // Check for --index BibTeX dirname else if (cl_index) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--index") { const int j(i + 1); if (j < arguments.count() && !arguments.at(j).startsWith('-')) cl_index_dirname.append(decodeFilename(arguments.at(j))); break; } } // Check for annote file else if (cl_html_annote || cl_view_annote) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--html-annote" || arguments.at(i) == "--view-annote") { const int j(i + 1); if (j < arguments.count()) if (!arguments.at(j).startsWith('-')) cl_annote_filename = decodeFilename(arguments.at(j)); if (cl_annote_filename.isEmpty()) _is_loaded = false; } } // Check for extraction files else if (cl_doc2bib || cl_txt2bib) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--doc2bib" || arguments.at(i) == "--txt2bib") { for (int j = i + 1; j < arguments.count(); ++j) if (arguments.at(j).startsWith('-')) break; else cl_extract_input_filenames.append(decodeFilename(arguments.at(j))); break; } if (cl_extract_input_filenames.count() < 2) _is_loaded = false; else cl_extract_output_filename = cl_extract_input_filenames.takeLast(); } // Check for import reference file else if (cl_import) { if (arguments.count() > 2) if (!arguments.at(2).startsWith('-')) { cl_import_filename = QFileInfo(QFile::decodeName(arguments.at(2).toLocal8Bit())).absoluteFilePath(); return; } cl_import = false; _is_loaded = false; } // Accept also 'cb2bib filename' as '--import' to ease import on Windows else if (arguments.count() > 1) if (!arguments.at(1).startsWith('-')) { cl_import_filename = QFileInfo(QFile::decodeName(arguments.at(1).toLocal8Bit())).absoluteFilePath(); cl_import = true; return; } if (!_is_loaded) printUsage(); } void settings::checkCommand(bool* action, int* actions) { if (*action) _is_loaded = false; *action = true; *actions += 1; } QString settings::decodeFilename(const QString& fn) const { // This function is meant for fn given by the command shell and that will end up being visible return QDir::toNativeSeparators(QFileInfo(QFile::decodeName(fn.toLocal8Bit())).absoluteFilePath()); } void settings::printUsage() { fprintf(stdout, "Usage: cb2bib\n"); fprintf(stdout, " cb2bib [action] [filename1 [filename2 ... ]] [--conf [filename.conf]]\n"); fprintf(stdout, "\n"); fprintf(stdout, "Actions:\n"); fprintf(stdout, " --configure [filename.conf] Edit configuration\n"); fprintf(stdout, "\n"); fprintf(stdout, " --bibedit [filename1.bib [filename2.bib ... ]] Edit/browse BibTeX files\n"); fprintf(stdout, " --citer [filename1.bib [filename2.bib ... ]] Start cb2Bib citer\n"); fprintf( stdout, " --import tmp_reference_filename Import reference, usually from ad hoc websites\n"); fprintf(stdout, "\n"); fprintf(stdout, " --doc2bib fn1.doc [fn2.doc ... ] reference.bib Extract reference from document file\n"); fprintf(stdout, " --txt2bib fn1.txt [fn2.txt ... ] reference.bib Extract reference from text file\n"); fprintf(stdout, "\n"); fprintf(stdout, " --index [bibdirname] Extract keywords from document files\n"); fprintf(stdout, "\n"); fprintf(stdout, " --html-annote filename.tex Convert annote file to HTML\n"); fprintf(stdout, " --view-annote filename.tex Convert and visualize annote file\n"); fprintf(stdout, " --view-annote filename.tex.html Visualize annote file\n"); fprintf(stdout, "\n"); fprintf(stdout, "Switches:\n"); fprintf(stdout, " --conf [filename.conf] Use configuration file\n"); fprintf( stdout, " --sloppy Accept guesses in automatic reference extraction\n"); fprintf(stdout, "\n"); fprintf(stdout, "Examples:\n"); fprintf(stdout, " cb2bib Start cb2Bib extraction panel\n"); fprintf(stdout, " cb2bib --import tmp_reference_filename Import reference\n"); fprintf(stdout, " cb2bib --bibedit filename.bib Edit BibTeX filename.bib\n"); fprintf(stdout, " cb2bib --conf Start cb2Bib in USB mode\n"); fprintf(stdout, " cb2bib --doc2bib *.pdf references.bib Extract references from PDF title pages\n"); fprintf(stdout, "\n"); fprintf(stdout, "Notes:\n"); fprintf(stdout, " -Use switch --conf to particularize specific settings for specific actions.\n"); fprintf(stdout, " -The file cb2bib.conf must be readable and writable. If it does not exist, cb2Bib will create one\n"); fprintf(stdout, " based on predefined defaults.\n"); fprintf(stdout, " -If starting cb2Bib from a removable media use, the command 'cb2bib --conf' without configuration\n"); fprintf(stdout, " filename. Settings will be read from and written to /cb2bib/full/path/cb2bib.conf, being therefore\n"); fprintf(stdout, " independent of the mounting address that the host computer will provide.\n"); fprintf( stdout, " -To import references from a browser select when asked c2bimport, which expands to 'cb2bib --import %%f'.\n"); fprintf(stdout, " The browser will provide the temporary reference filename.\n"); fprintf(stdout, " -A number of factors influence the reliability of automatic extractions. Consider writing customized\n"); fprintf(stdout, " regular expressions and network queries, and use metadata when available.\n"); fprintf(stdout, "\n"); fprintf(stdout, "Important:\n"); fprintf(stdout, " -The commands --doc2bib and --txt2bib do not append the references to the references.bib. They create\n"); fprintf(stdout, " a new file, or silently overwrite it if already exists.\n"); fprintf(stdout, "\n"); } ��������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/texToHtml.h���������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015256� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.846760869 30 atime=1762812828.038759355 30 ctime=1762812827.850760837 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/texToHtml.h��������������������������������������������������������������������0000644�0001750�0000144�00000005711�15104461633�017253� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef TEXTOHTML_H #define TEXTOHTML_H #include "texParser.h" #include "coreBibParser.h" /** Minimalist TeX to HTML converter */ class texToHtml : public texParser { public: texToHtml(); inline ~texToHtml() {} QString toHtml(const QString& tex); void toHtml(const QString& tex, const QString& fn); private: QDir _current_dir; QHash<QString, bibReference> _references; QHash<QString, int> _cites; QList<QRegExp> _tex_macro_names_rx; QRegExp _extern_url_rx; QRegExp _macro_arguments_rx; QRegExp _named_extern_url_rx; QRegExp _named_url_rx; QRegExp _url_rx; QString _bibtex_directory; QString _html; QString _html_filename; QString _index; QString _tex_macros; QString _title; bool _close_subsection; bool _close_subsubsection; bool _make_index; bool _use_mathjax_rendering; bool _use_relative_links; coreBibParser _cbp; int _index_anchors; settings* _settingsP; void citesToHtml(QString* html); void extractCites(const QString& p); void extractMacro(const QString& v); void parseComment(const QString& p) override; void parseElement(const QString& p, const QString& e, const QString& v) override; void parseTextParagraph(const QString& p) override; void referencesToHtml(QString* reference_list_html); void retrieveReferences(); inline void urlToHtml(QString* str) const { c2bUtils::replace(*str, _named_url_rx, "<a href=\"\\1\">\\2</a>"); c2bUtils::replace(*str, _url_rx, "<a href=\"\\1\">\\1</a>\\2"); c2bUtils::replace(*str, _named_extern_url_rx, "<a href=\"\\1\" target=\"_blank\">\\2</a>"); c2bUtils::replace(*str, _extern_url_rx, "<a href=\"\\1\" target=\"_blank\">\\1</a>\\2"); } inline QString toHtmlString(QString str, const bool do_macros = true) const { // Move LaTeX to Unicode c2bUtils::bibToC2b(str); // Encode some symbols to HTML for proper browser display str.replace('<', "<"); str.replace('>', ">"); str.replace('%', "%"); if (!_use_mathjax_rendering) { c2bUtils::replace(str, QRegExp("_\\{([^\\}]*)\\}"), "<sub>\\1</sub>"); c2bUtils::replace(str, QRegExp("\\^\\{([^\\}]*)\\}"), "<sup>\\1</sup>"); } // Insert $$ into LaTeX macros provided it can be reasonably assumed they are // outside a match environment if (do_macros) for (int i = 0; i < _tex_macro_names_rx.count(); ++i) c2bUtils::replace(str, _tex_macro_names_rx.at(i), "$\\1$"); return str; } }; #endif �������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/documentParser.cpp��������������������������������������������������0000644�0000000�0000000�00000000127�15104461633�016660� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1762812827.68676213 29 atime=1762812827.99875967 29 ctime=1762812827.68676213 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/documentParser.cpp�������������������������������������������������������������0000644�0001750�0000144�00000005427�15104461633�020655� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "documentParser.h" documentParser::documentParser(const QString& text, const int maximum) : _space(QChar(' ')), _text(text), _maximum_words(maximum), _minimum_words(2), _text_length(text.length()) { _current_nwords = 0; _current_ssentence_length = 0; _current_ssentence_origin = 0; _nwords = 0; _position = 0; if (_text_length > 0) { if (_is_letter(_text.at(0))) { _ssentence_origin = 0; _all_done = false; } else { _ssentence_origin = nextWord(0); _position = _ssentence_origin; _all_done = (_ssentence_origin == _text_length); } } else _all_done = true; } documentParser::~documentParser() {} bool documentParser::parses() { if (_all_done) return false; // Assumed 0-terminated string, i.e., text[_text_length] = 0 const QChar* const text(_text.constData()); int i(_position); while (i++ < _text_length) { const QChar& c(text[i]); if (_is_letter_or_number(c)) continue; ++_nwords; // Contiguous words within a subsentence if (c == _space && _is_letter(text[i + 1])) { if (_nwords < _minimum_words) continue; if (_nwords < _maximum_words) { _position = i + 1; _current_nwords = _nwords; _current_ssentence_origin = _ssentence_origin; _current_ssentence_length = i - _ssentence_origin; return true; } } // Subsentence terminated at c else if (_nwords < _minimum_words) { // Too few words in subsentence, move forward to next subsentence _ssentence_origin = nextWord(i); i = _ssentence_origin; _nwords = 0; continue; } _position = nextWord(_ssentence_origin); _current_nwords = _nwords; _current_ssentence_origin = _ssentence_origin; _current_ssentence_length = i - _ssentence_origin; _nwords = 0; _ssentence_origin = _position; return true; } _all_done = true; return false; } int documentParser::nextWord(const int pos) const { for (int i = pos + 1; i < _text_length; ++i) if (_is_letter(_text.at(i)) && !_is_letter_or_number(_text.at(i - 1))) return i; return _text_length; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/bibParser.cpp�������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015571� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.658762351 29 atime=1762812827.99875967 30 ctime=1762812827.658762351 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/bibParser.cpp������������������������������������������������������������������0000644�0001750�0000144�00000063427�15104461633�017577� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bibParser.h" #include "arxivXml.h" #include "bibPreparser.h" #include "crJson.h" #include "document.h" #include "heuristicBibParser.h" #include "idMaker.h" #include "preprocess.h" #include "pubmedXml.h" #include "settings.h" #include <QCoreApplication> #include <QUrl> bibParser::bibParser(QObject* parento) : coreBibParser(parento) { // Creating journal name database _journal_dbP = new journalDB(_settingsP->fileName("cb2Bib/JournalFile")); // Creating month list _month_dbP = new monthDB(); // Creating cite and document ID makers _cite_idmP = new idMaker("cb2Bib/CiteIdPattern", this); _file_idmP = new idMaker("cb2Bib/DocumentIdPattern", this); // Creating (external) reference preparser _preparserP = new bibPreparser(this); connect(_preparserP, SIGNAL(statusMessage(QString)), this, SIGNAL(statusMessage(QString))); // Creating stream preprocess object _preprocessP = new preprocess(this); // Creating heuristic bibliographic parser _heuristic_parserP = new heuristicBibParser(this); } bibParser::~bibParser() { delete _journal_dbP; delete _month_dbP; delete _heuristic_parserP; } /** Process each field and set its final format */ QString bibParser::parse(const QString& field, const QString& value, const QString& init_value) { QString v(value); if (field == QLatin1String("file")) return v.trimmed(); if (field == "abstract") document::normalize(v, document::Complete); v = removeTags(v); if (v.isEmpty()) return v; c2bUtils::fullBibToC2b(v); if (field == QLatin1String("author")) { c2bUtils::debug(v); v = _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); } else if (field == QLatin1String("addauthors")) { c2bUtils::debug(v); if (init_value.isEmpty()) v = _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); else v = init_value + " and " + _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); } else if (field == QLatin1String("editor")) { c2bUtils::debug(v); c2bUtils::remove(v, QRegExp("\\((Editor|Editors|Ed|Eds)\\.{0,1}\\)", Qt::CaseInsensitive)); v = _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); } else if (field == QLatin1String("addeditors")) { c2bUtils::debug(v); c2bUtils::remove(v, QRegExp("\\((Editor|Editors|Ed|Eds)\\.{0,1}\\)", Qt::CaseInsensitive)); if (init_value.isEmpty()) v = _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); else v = init_value + " and " + _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); } else if (field == QLatin1String("doi")) { c2bUtils::remove(v, QRegExp("^.+(?=10\\.[\\d\\.]+/\\S+)")); if (v.endsWith(QLatin1Char('.')) || v.endsWith(QLatin1Char(',')) || v.endsWith(QLatin1Char(';'))) v.chop(1); } else if (field == QLatin1String("url")) { // Remove redundant DOI URLs if (v.contains("doi.org/10.")) v.clear(); } else if (field == QLatin1String("isbn")) v.remove(' '); else if (field == QLatin1String("journal")) { if (_settingsP->value("cb2Bib/SetJournalsToFullname").toBool()) v = fullJournal(v); else v = abbreviatedJournal(v); } else if (field == QLatin1String("keywords")) { v.replace(" - ", ","); QStringList kl(c2bUtils::split(v, QRegExp("[^\\w\\s-']"), _QT_6_SkipEmptyParts)); kl.removeAll(" "); kl.removeDuplicates(); v = kl.join(", "); c2bUtils::replace(v, QRegExp("\\s+,"), ","); v = v.toLower(); } else if (field == QLatin1String("month")) v = _month_dbP->retrieve(v); // Fields edition and note require first letter capitalization else if (field == QLatin1String("edition")) v = c2bUtils::setCapitalization(v); else if (field == QLatin1String("note")) v = c2bUtils::setCapitalization(v); // Process pages, volume, number, and year to set hyphenation else if (field == QLatin1String("pages")) v = adjacentNumbers(v); else if (field == QLatin1String("volume")) v = adjacentNumbers(v); else if (field == QLatin1String("number")) v = adjacentNumbers(v); else if (field == QLatin1String("year")) v = adjacentNumbers(v); else if (field == QLatin1String("title") || field == QLatin1String("booktitle")) v = c2bUtils::setCapitalization(v); else if (field == QLatin1String("addtitle")) { if (!init_value.isEmpty()) v = init_value + QLatin1String(": ") + v; v = c2bUtils::setCapitalization(v); } return c2bUtils::simplifyString(v); } /** Process each field and set its final format for a complete reference */ bibReference& bibParser::parse(bibReference& reference) { QMutableHashIterator<QString, QString> i(reference); while (i.hasNext()) { i.next(); const QString v(parse(i.key(), i.value())); i.setValue(v); } return reference; } QString bibParser::setJournalsToFull(const QString& text, const bool alternate) { const bool ConvertReferenceToLaTeX(_settingsP->value("cb2Bib/ConvertReferenceToLaTeX").toBool()); QString substituted_text(text); QRegExp jnre("\\bjournal\\s*=\\s*[\\{\"]", Qt::CaseInsensitive); QString jn; int pos(0); uint nj(0); while (pos >= 0) { pos = jnre.indexIn(substituted_text, pos); if (pos > 0 && c2bUtils::inBraces(pos + jnre.matchedLength(), substituted_text, &jn)) { const int jnlength(jn.length()); c2bUtils::bibToC2b(jn); jn = alternate ? alternateFullJournal(jn) : fullJournal(jn); if (ConvertReferenceToLaTeX) c2bUtils::c2bToBib(jn); pos += jnre.matchedLength(); substituted_text.replace(pos, jnlength, jn); nj++; } else if (pos >= 0) ++pos; } emit statusMessage(tr("Processed %1 journal names.").arg(nj)); return substituted_text; } QString bibParser::setJournalsToAbbreviated(const QString& text, const bool alternate) { const bool ConvertReferenceToLaTeX(_settingsP->value("cb2Bib/ConvertReferenceToLaTeX").toBool()); QString substituted_text(text); QRegExp jnre("\\bjournal\\s*=\\s*[\\{\"]", Qt::CaseInsensitive); QString jn; int pos(0); uint nj(0); while (pos >= 0) { pos = jnre.indexIn(substituted_text, pos); if (pos > 0 && c2bUtils::inBraces(pos + jnre.matchedLength(), substituted_text, &jn)) { const int jnlength(jn.length()); c2bUtils::bibToC2b(jn); jn = alternate ? alternateAbbreviatedJournal(jn) : abbreviatedJournal(jn); if (ConvertReferenceToLaTeX) c2bUtils::c2bToBib(jn); pos += jnre.matchedLength(); substituted_text.replace(pos, jnlength, jn); nj++; } else if (pos >= 0) ++pos; } emit statusMessage(tr("Processed %1 journal names.").arg(nj)); return substituted_text; } QString bibParser::excerpt(const QString& text, const QStringList& hints) const { QString txt(removeTags(text)); c2bUtils::replace(txt, QRegExp("\\[Bibliographic Metadata.+/Bibliographic Metadata\\]"), " "); c2bUtils::replace(txt, QRegExp("(http://|https://|ftp://|www\\.|ftp\\.)(www\\.|ftp\\.){0,1}\\S+"), " "); c2bUtils::replace(txt, QRegExp("\\b[A-Z]+\\b"), " "); c2bUtils::replace(txt, QRegExp("\\d"), " "); c2bUtils::replace(txt, c2bUtils::nonLetter, " "); c2bUtils::replace(txt, QRegExp("\\b\\w{1,2}\\b"), " "); c2bUtils::replace(txt, QRegExp("\\b(about|and|are|com|for|from|how|into|that|the|their|this|where|with|www)\\b", Qt::CaseInsensitive), " "); c2bUtils::replace(txt, QRegExp("\\b(january|february|march|april|may|june|july|august|september|october|november|december)\\b", Qt::CaseInsensitive), " "); txt = hints.join(" ") + ' ' + txt; txt = c2bUtils::simplifyString(txt); const QStringList txtlist(txt.split(' ', _QT_6_SkipEmptyParts)); QStringList txtlistSimp; for (int i = 0; i < std::min(15, int(txtlist.count())); ++i) txtlistSimp.append(txtlist.at(i)); return txtlistSimp.join(" "); } void bibParser::setField(const QString& name, const QString& value) { _current_reference[name] = parse(name, value); } void bibParser::setReferenceType(const QString& type) { _current_reference.typeName = type; } void bibParser::setCiteID() { _current_reference.citeidName = _cite_idmP->makeID(_current_reference); } QString bibParser::documentFilename(const QString& base_fn, const QString& bibtex_fn) { if (base_fn.isEmpty()) return base_fn; if (!_settingsP->value("cb2Bib/MovePdf").toBool()) { const QUrl u(base_fn); const QString scheme(u.scheme()); if (scheme == "file") return parse("file", u.toLocalFile()); else return parse("file", base_fn); } QString filename(_file_idmP->makeID(_current_reference)); if (filename.isEmpty()) filename = "no_cite_id"; QFileInfo fi(base_fn); QString docExtension('.' + fi.suffix().toLower()); // Possible document extensions if (QRegExp("^\\.\\w{2,4}$").indexIn(docExtension) == -1) docExtension = ".pdf"; // Default if (docExtension == ".gz") if (fi.completeSuffix().toLower() == ".ps.gz") docExtension = ".ps.gz"; // Composite extension filename = c2bUtils::documentFilename(_settingsP->value("cb2Bib/RelativePdfDirectory").toBool(), bibtex_fn, _settingsP->fileName("cb2Bib/PdfDirectory"), filename + docExtension); return parse("file", filename); } /**************************************************************************** AUTOMATIC BIB CAPTION *****************************************************************************/ void bibParser::preparse(const QString& text, QString* out_text) { _preparserP->preparse(text, out_text); } /** \page clipboard Extracting Data from the Clipboard Clipboard contents is processed according to the following rules: - Perform external, user-defined preparsing on input stream. See \ref c2bconf_clipboard. - Perform user-defined substitutions on input stream. See \ref c2bconf_clipboard. - Check if input stream is already a BibTeX entry. If so, process entry. - Check if input stream is, in this order of preference, a PubMed XML, arXiv XML, CR JSON, or Medline entry. If so, process entry. - Preprocess author names: PI JOAN III -> Pi III, J. (care of name prefixes, suffixes, and removal of ambiguities). If otherwise, - Extract DOI \n (DOI, URL and FILE/PDF are preprocessed, performed before the automatic recognition takes place.) - Extract URL - Remove leading and trailing white spaces, TABs and CRs. - "\r\n", "\n" and/or "\r" replaced by the line indicator tag <code><NewLineN></code>. - Replace "\t" and ten or more consecutive "\s" by the tabular tag <code><TabN></code>. - Simplify white spaces - Start the automatic recognition engine. If the automatic recognition engine fails, optionally, a heuristic guessing will be performed. See also \ref heuristics and \ref metadata. */ void bibParser::parse(const QString& text, QString* out_text, QString* out_tagtext) { QString& otext = *out_text; otext = text; QString& ottext = *out_tagtext; ottext.clear(); _preprocessP->preprocessText(out_text); if (hasBibTeX(otext)) { _current_reference = wholeReference(otext); parse(_current_reference); currentReferenceUpdated(); _auto_recognized_string = tr("Processed as 'BibTeX'."); _auto_recognized = true; emit statusMessage(_auto_recognized_string); return; } const QString pubmed_identifier("<PubmedArticle>"); if (otext.contains(pubmed_identifier)) { pubmedXml pxml(metadataSection(otext, pubmed_identifier)); if (pxml.hasError()) { _auto_recognized_string = tr("Error parsing 'PubMed XML': %1.").arg(pxml.errorString()); _auto_recognized = false; } else { _current_reference = pxml.reference(); parse(_current_reference); currentReferenceUpdated(); _auto_recognized_string = tr("Processed as 'PubMed XML'."); _auto_recognized = true; } emit statusMessage(_auto_recognized_string); return; } const QString arxiv_identifier("arxiv.org/api/"); const QString cr_identifier("{\"status\":\"ok\",\"message-type\":\"work\""); if (otext.contains(arxiv_identifier) || otext.contains(cr_identifier)) { if (otext.contains(cr_identifier)) { crJson crjson(metadataSection(otext, cr_identifier)); if (crjson.hasError()) { _auto_recognized_string = tr("Error parsing 'CR JSON': %1.").arg(crjson.errorString()); _auto_recognized = false; emit statusMessage(_auto_recognized_string); return; } else { _current_reference = crjson.reference(); _auto_recognized_string = tr("Processed as 'CR JSON'."); } } if (otext.contains(arxiv_identifier)) { arxivXml axml(metadataSection(otext, arxiv_identifier)); if (axml.hasError()) { _auto_recognized_string = tr("Error parsing 'arXiv XML': %1.").arg(axml.errorString()); _auto_recognized = false; if (_current_reference.size() > 0) _current_reference.clearReference(); emit statusMessage(_auto_recognized_string); return; } else { if (_current_reference.size() == 0) { _current_reference = axml.reference(); _auto_recognized_string = tr("Processed as 'arXiv XML'."); } else { // Merging arXiv and CR metadata const bibReference& areference(axml.reference()); if (!areference.value("abstract").isEmpty()) _current_reference["abstract"] = areference.value("abstract"); if (!areference.value("title").isEmpty()) _current_reference["title"] = areference.value("title"); if (!areference.value("eprint").isEmpty()) _current_reference["eprint"] = areference.value("eprint"); if (!areference.value("url").isEmpty()) _current_reference["url"] = areference.value("url"); _auto_recognized_string = tr("Processed as merged 'arXiv XML' and 'CR JSON'."); } } } parse(_current_reference); currentReferenceUpdated(); _auto_recognized = true; emit statusMessage(_auto_recognized_string); return; } if (QRegExp("^\\s*PMID\\s*-").indexIn(otext) >= 0) { _current_reference.typeName = "article"; otext = ' ' + otext; // http://www.nlm.nih.gov/bsd/mms/medlineelements.html ottext = c2bUtils::replaced(otext, QRegExp("[\\n\\r]\\s*([A-Z]{2,4}\\s*-)"), "][\\1"); // Two to four capital letter in field tags ottext = c2bUtils::simplifyString(ottext); if (QRegExp("\\[FAU\\s+-").indexIn(ottext) == -1) c2bUtils::replace(ottext, QRegExp("\\[(AU\\s*-\\s*[-'\\w]+)"), "[F\\1 "); QStringList fList(ottext.split("][")); QString kw; QRegExp fld("^([A-Z]{2,4})\\s{0,1}-\\s*(.+)$"); fld.setPatternSyntax(QRegExp::RegExp2); for (QStringList::Iterator it = fList.begin(); it != fList.end(); ++it) { if (fld.indexIn(*it) == -1) continue; const QString tag(fld.cap(1)); QString value(fld.cap(2)); if (tag == "AB") _current_reference["abstract"] = parse("abstract", value); else if (tag == "FAU") _current_reference["author"] = parse("addauthors", authorFromMedline(value), _current_reference.value("author")); else if (tag == "TA") _current_reference["journal"] = parse("journal", value); else if (tag == "IP") _current_reference["number"] = parse("number", value); else if (tag == "PG") _current_reference["pages"] = parse("pages", value); else if (tag == "TI") _current_reference["title"] = parse("title", value); else if (tag == "PMID") _current_reference["url"] = parse("url", c2bUtils::pubmedUrl.arg(value)); else if (tag == "VI") _current_reference["volume"] = parse("volume", value); else if (tag == "AID") { if (value.contains("[doi]")) _current_reference["doi"] = parse("doi", value.remove("[doi]")); } else if (tag == "DP") _current_reference["year"] = parse("year", c2bUtils::replaced(value, QRegExp("^([\\d\\s]+).*$"), "\\1")); else if (tag == "MH") kw += "; " + value.trimmed(); } if (!kw.isEmpty()) _current_reference["keywords"] = parse("keywords", kw.remove(0, 2)); currentReferenceUpdated(); _auto_recognized_string = tr("Processed as 'PubMed - Medline Journals'."); _auto_recognized = true; emit statusMessage(_auto_recognized_string); return; } _heuristic_parserP->heuristicFields(otext); // Set tags and start regular expression extraction ottext = setTags(otext); const QString regular_expression_f(_settingsP->fileName("cb2Bib/RegularExpressionFile")); checkRegExpFile(regular_expression_f); QFile file(regular_expression_f); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { _auto_recognized_string = tr("Failed to open '%1' file.").arg(regular_expression_f); emit statusMessage(_auto_recognized_string); return; } QString ItemX; QString line; QString reftype; QString fieldset; QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); int nfilters(0); while (!stream.atEnd()) { line = stream.readLine(); if (!(line.isEmpty() || QRegExp("^#").indexIn(line) >= 0)) { reftype = stream.readLine(); fieldset = stream.readLine(); ItemX = stream.readLine(); c2bUtils::debug(tr("The RegExp file contains1: |%1|").arg(line)); c2bUtils::debug(tr("The RegExp file contains2: |%1|").arg(reftype)); c2bUtils::debug(tr("The RegExp file contains3: |%1|").arg(fieldset)); c2bUtils::debug(tr("The RegExp file contains4: |%1|").arg(ItemX)); QRegExp rx(ItemX); rx.setMinimal(true); if (!rx.isValid()) c2bUtils::warn(tr("RegExp |%1| is not valid").arg(ItemX)); const QStringList list(fieldset.split(' ', _QT_6_SkipEmptyParts)); const int efields(list.count()); const int cfields(rx.captureCount()); int npos(rx.indexIn(ottext)); c2bUtils::debug(tr("Expected Fields: |%1|").arg(efields)); c2bUtils::debug(tr("Captured Fields: |%1|").arg(cfields)); c2bUtils::debug(tr("Position: |%1|").arg(npos)); if (efields != cfields) { c2bUtils::warn( tr("RegExp |%1| is not valid. Mismatch between expected and actual captures").arg(ItemX)); npos = -1; } nfilters++; if (npos > -1) { for (int i = 0; i < cfields; i++) { const QString& listi = list.at(i); int ii(i + 1); c2bUtils::debug(QString("Fields in Template %1: |%2|").arg(i).arg(rx.cap(ii))); if (_field_re.indexIn(listi) > -1) { if (listi == "author") // Reminder: "addauthors" requires to init _current_reference["author"] _current_reference[listi] = parse("addauthors", rx.cap(ii), _current_reference.value(listi)); else if (listi == "editor") // Reminder: "addeditors" requires to init _current_reference["editor"] _current_reference[listi] = parse("addeditors", rx.cap(ii), _current_reference.value(listi)); else if (listi == "title") // Reminder: "addtitle" requires to init _current_reference["title"] _current_reference[listi] = parse("addtitle", rx.cap(ii), _current_reference.value(listi)); else _current_reference[listi] = parse(listi, rx.cap(ii)); } } _current_reference.typeName = reftype; currentReferenceUpdated(); _auto_recognized_string = tr("Processed as '%1'.").arg(line); _auto_recognized = true; emit statusMessage(_auto_recognized_string); file.close(); return; } } } file.close(); // Heuristic Bib Parsing if (_settingsP->value("cb2Bib/DoHeuristicGuess").toBool()) { // Sometimes (if user is on tag mode) tag could be on otext. Revert tags here, just in case. const QString clean_text(removeTags(ottext)); _heuristic_parserP->guessFields(clean_text, ottext); currentReferenceUpdated(); _auto_recognized_string = tr("Applied %1 filters: No automatic format detection. %2 fields guessed.").arg(nfilters).arg(fieldCount()); } else _auto_recognized_string = tr("Applied %1 filters: No automatic format detection.").arg(nfilters); emit statusMessage(_auto_recognized_string); } void bibParser::checkRegExpFile(const QString& fn) { if (fn.isEmpty()) { c2bUtils::warn(tr("No regular expression file especified")); return; } QFileInfo fi(fn); if (!fi.exists() || !fi.isReadable()) { c2bUtils::warn(tr("Could not open regular expression file %1 for reading").arg(fn)); return; } } void bibParser::guessFields(const QString& text) { const QString clean_text(text.simplified()); const QString tagged_text(setTags(text)); _heuristic_parserP->heuristicFields(clean_text); _heuristic_parserP->guessFields(clean_text, tagged_text); currentReferenceUpdated(); _auto_recognized_string = tr("%1 fields guessed.").arg(fieldCount()); emit statusMessage(_auto_recognized_string); } QString bibParser::setTags(const QString& text) const { QString tagged_text(text.trimmed()); c2bUtils::replace(tagged_text, QRegExp("\\r\\n"), "<found_new_line>"); // Windows new line c2bUtils::replace(tagged_text, QRegExp("\\n"), "<found_new_line>"); // Linux new line, LF c2bUtils::replace(tagged_text, QRegExp("\\r"), "<found_new_line>"); // OSX new line, CR QStringList spText(tagged_text.split("<found_new_line>")); int n(spText.count()); tagged_text.clear(); for (int i = 0; i < n - 1; i++) tagged_text += spText.at(i) + QString("<NewLine%1>").arg(i + 1); tagged_text += spText[n - 1]; spText = c2bUtils::split(tagged_text, QRegExp("(\\s{10,}|\\t)"), _QT_6_KeepEmptyParts); n = spText.count(); tagged_text.clear(); for (int i = 0; i < n - 1; i++) tagged_text += spText.at(i) + QString("<Tab%1>").arg(i + 1); tagged_text += spText[n - 1]; tagged_text = c2bUtils::simplifyString(tagged_text); return tagged_text; } QString bibParser::removeTags(const QString& text) const { QString clean(text); clean.remove("[["); clean.remove("]]"); c2bUtils::replace(clean, QRegExp("<NewLine\\d+>"), " "); c2bUtils::replace(clean, QRegExp("<Tab\\d+>"), " "); clean = c2bUtils::simplifyString(clean); return clean; } QString bibParser::metadataSection(const QString& text, const QString& identifier) const { const QStringList lines(c2bUtils::split(text, QRegExp("[\\r\\n]"), _QT_6_KeepEmptyParts)); const int nl(lines.count()); int il(-1); int sl(0); int el(0); for (int l = 0; l < nl; ++l) if (lines.at(l).contains(identifier)) { il = l; break; } if (il == -1) return QString(); for (int l = il + 1; l < nl; ++l) if (lines.at(l) == "/Raw Metadata]") { el = l; break; } for (int l = il; l >= 0; --l) if (lines.at(l) == "[Raw Metadata") { sl = l; break; } if (sl == 0 && el == 0) return text.trimmed(); if (sl == 0 || el == 0) return QString(); QString section; for (int l = sl + 1; l < el; ++l) section += '\n' + lines.at(l); return section.trimmed(); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/stemMatcher.cpp�����������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016135� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.722761847 30 atime=1762812828.038759355 30 ctime=1762812827.726761815 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/stemMatcher.cpp����������������������������������������������������������������0000644�0001750�0000144�00000017014�15104461633�020131� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "stemMatcher.h" #include "cb2bib_utilities.h" #include "multipatternLengths.h" #include "stemmer.h" #include "triads.h" stemMatcher::stemMatcher() : _hook(-1), _stretch(0), _substring_count(0), _substring_rex_count(0), _substring_txt_count(0), _matched_length(-1), _stemmed_length(-1), _p0(0), _pn(0) {} stemMatcher::stemMatcher(const QString& pattern, const Qt::CaseSensitivity cs) : _p0(0), _pn(0) { setPattern(pattern, cs); } void stemMatcher::setPattern(const QString& pattern, const Qt::CaseSensitivity cs) { _hook = -1; _matched_length = -1; _stemmed_length = -1; _stretch = 0; multipatternLengths mpls(&_patternlengths); QStringList substrings; { const QRegExp rmnww("[\\W_]"); const QString boundedt("\\b%1\\b"); const QString ort("(:?%1)"); const QString stretcht(".{0,%1}"); const int minimum_word_length(4); stemmer ls; const QStringList segments(pattern.split(QLatin1Char(' '), _QT_6_SkipEmptyParts)); mpls.init(segments.count()); for (int s = 0; s < segments.count(); ++s) { const QStringList qors(segments.at(s).split(QLatin1Char('|'), _QT_6_SkipEmptyParts)); mpls.branch(qors.count()); QStringList so; int slength(0); for (int o = 0; o < qors.count(); ++o) { slength = std::max(slength, int(qors.at(o).length())); const QStringList words(qors.at(o).split(QLatin1Char('_'), _QT_6_SkipEmptyParts)); QStringList sw; for (int w = 0; w < words.count(); ++w) if (words.at(w).startsWith(QLatin1Char('+'))) { QString bw(words.at(w).right(words.at(w).length() - 1)); mpls.add(s, o, words.at(w).length() - 1, words.at(w).length() - 1); if (words.count() == 1) mpls.blankspaces -= 1; c2bUtils::replace(bw, c2bUtils::nonLetter, stretcht.arg(1)); sw.append(boundedt.arg(bw)); } else { QStringList wl(ls.stems(words.at(w))); // Note: ls.stems() returns only wl.count() == 1 or wl.count() == 2 // Also, for wl.count() == 2, wl.at(0).length() == words.at(w).length() if (wl.count() == 2) mpls.add(s, o, wl.at(0).length(), wl.at(1).length(), true); else mpls.add(s, o, words.at(w).length(), w == words.count() - 1 ? wl.last().length() : words.at(w).length()); if (words.count() == 1 && words.at(w).contains(QLatin1Char('.'))) mpls.blankspaces += 1; for (int l = 0; l < wl.count(); ++l) { const int nnl(c2bUtils::count(wl.at(l), c2bUtils::nonLetter)); if (nnl > 0 && nnl < wl.at(l).length()) c2bUtils::replace(wl[l], c2bUtils::nonLetter, stretcht.arg(1)); } sw.append(wl.count() == 1 ? wl.at(0) : ort.arg(wl.join('|'))); } so.append(sw.join(stretcht.arg(25))); } substrings.append(so.count() == 1 ? so.at(0) : ort.arg(so.join('|'))); _stretch += slength > minimum_word_length ? 35 : 10; } mpls.cleanup(); _subpatterns = c2bUtils::split(pattern, rmnww, _QT_6_SkipEmptyParts); } _substring_count = substrings.count(); _substring_rex_count = 0; for (int i = 0; i < _substring_count; ++i) if (c2bUtils::nonLetter.indexIn(substrings.at(i)) >= 0) ++_substring_rex_count; _substring_txt_count = _substring_count - _substring_rex_count; _substrings_rex.resize(_substring_rex_count); _substrings_txt.resize(_substring_txt_count); _matched_lengths.fill(0, _substring_count); _sp0.resize(_substring_count); _signature_string.clear(); for (int i = 0, ir = 0, it = 0; i < _substring_count; ++i) if (c2bUtils::nonLetter.indexIn(substrings.at(i)) >= 0) { QRegularExpression& re(_substrings_rex[ir++]); #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) & QT_VERSION < QT_VERSION_CHECK(6, 0, 0) const QRegularExpression::PatternOptions po(QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::OptimizeOnFirstUsageOption); #else const QRegularExpression::PatternOptions po(QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption); #endif re.setPattern(substrings.at(i)); re.setPatternOptions(cs == Qt::CaseSensitive ? po : po | QRegularExpression::CaseInsensitiveOption); } else { txtmatcher& tm(_substrings_txt[it++]); tm.setPattern(substrings.at(i), cs); _signature_string += substrings.at(i) + ' '; } _signature_string.chop(1); for (int i = 0, lf = std::numeric_limits<int>::max(); i < _substring_txt_count; ++i) { const int f(_substrings_txt.at(i).frequency() * triads::textFrequency(_substrings_txt.at(i).pattern())); if (f < lf) { lf = f; _hook = i; } } if (_hook == -1) for (int i = 0, lf = std::numeric_limits<int>::max(); i < _substring_rex_count; ++i) { const int f(triads::textFrequency(_substrings_rex.at(i).pattern())); if (f < lf) { lf = f; _hook = _substring_txt_count + i; } } #ifdef C2B_DEBUG_SEARCHING for (int i = 0; i < _substring_txt_count; ++i) qDebug() << "subpattern txt " << _substrings_txt.at(i).pattern(); for (int i = 0; i < _substring_rex_count; ++i) qDebug() << "subpattern rex " << _substrings_rex.at(i).pattern(); if (_hook < _substring_txt_count) qDebug() << "hook " << _substrings_txt.at(_hook).pattern() << _hook; else qDebug() << "hook " << _substrings_rex.at(_hook - _substring_txt_count).pattern() << _hook; qDebug() << "_stretch " << _stretch; qDebug() << "subpatternstrings " << subpatternStrings(); qDebug() << "signaturestring " << signatureString(); qDebug() << "pattern lengths " << patternLengths(); #endif } int stemMatcher::indexIn(const QString& text, const int from) const { _matched_length = -1; _stemmed_length = -1; if (_hook == -1) // Uninitialized return -1; _p0 = from; if (_p0 < 0) _p0 = 0; _pn = text.length(); if (_pn == 0) return -1; int hp(_p0); int p(-1); while (p == -1) { hp = _index_in(_hook, text, hp); if (hp == -1) return -1; p = _index_around(text, hp); hp += _matched_lengths.at(_hook); } return p; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/bibParser.h���������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015236� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.758761563 29 atime=1762812827.99875967 30 ctime=1762812827.762761531 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/bibParser.h��������������������������������������������������������������������0000644�0001750�0000144�00000007754�15104461633�017245� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBPARSER_H #define BIBPARSER_H #include "cb2bib_parameters.h" #include "coreBibParser.h" #include "journalDB.h" #include "monthDB.h" class bibPreparser; class heuristicBibParser; class idMaker; class preprocess; /** Class for bibliographic reference parsing and manipulation @author Pere Constans */ class bibParser : public coreBibParser { Q_OBJECT public: explicit bibParser(QObject* parento = 0); virtual ~bibParser(); QString documentFilename(const QString& base_fn, const QString& bibtex_fn); QString excerpt(const QString& text, const QStringList& hints) const; QString parse(const QString& field, const QString& value, const QString& init_value = QString()); QString setJournalsToAbbreviated(const QString& text, const bool alternate); QString setJournalsToFull(const QString& text, const bool alternate); QString setTags(const QString& text) const; bibReference& parse(bibReference& reference); virtual void setCiteID(); virtual void setField(const QString& name, const QString& value); virtual void setReferenceType(const QString& type); void guessFields(const QString& text); void parse(const QString& text, QString* out_text, QString* out_tagtext); void preparse(const QString& text, QString* out_text); inline QString abbreviatedJournal(const QString& name) const { return _journal_dbP->retrieve(name); } inline QString fullJournal(const QString& name) const { return _journal_dbP->retrieveFull(name); } inline QString alternateAbbreviatedJournal(const QString& name) const { return _journal_dbP->retrieveAlternate(name); } inline QString alternateFullJournal(const QString& name) const { return _journal_dbP->retrieveAlternateFull(name); } inline const QStringList& abbreviatedJournalList() const { return _journal_dbP->abbreviatedList(); } inline bool isAutoRecognized() const { return _auto_recognized; } inline QString autoRecognizedString() const { return _auto_recognized_string; } inline QString toBibTeX(bool sig = true) const { if (sig) return "% cb2Bib " + C2B_VERSION + '\n' + referenceToFomattedBibTeX(_current_reference) + '\n'; else return referenceToFomattedBibTeX(_current_reference); } inline QString toBibTeX(const bibReference& ref, bool sig = true) const { if (sig) return "% cb2Bib " + C2B_VERSION + '\n' + referenceToFomattedBibTeX(ref) + '\n'; else return referenceToFomattedBibTeX(ref); } inline const bibReference& currentReference() const { return _current_reference; } inline void clearCurrentReference() { _current_reference.clearReference(); _auto_recognized = false; _auto_recognized_string.clear(); } inline int fieldCount() const { return coreBibParser::fieldCount(_current_reference); } signals: void statusMessage(const QString& ms); protected: bibPreparser* _preparserP; bibReference _current_reference; idMaker* _cite_idmP; idMaker* _file_idmP; inline virtual void currentReferenceUpdated() {} virtual void checkRegExpFile(const QString& fn); private: QString _auto_recognized_string; QString metadataSection(const QString& text, const QString& identifier) const; QString removeTags(const QString& text) const; bool _auto_recognized; heuristicBibParser* _heuristic_parserP; journalDB* _journal_dbP; monthDB* _month_dbP; preprocess* _preprocessP; friend class heuristicBibParser; }; #endif ��������������������cb2bib-2.0.3/src/c2b/PaxHeaders/preprocess.h��������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015513� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.822761058 30 atime=1762812828.038759355 30 ctime=1762812827.822761058 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/preprocess.h�������������������������������������������������������������������0000644�0001750�0000144�00000001423�15104461633�017504� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef PREPROCESS_H #define PREPROCESS_H #include <QObject> #include <QStringList> /** @author Pere Constans */ class preprocess : public QObject { Q_OBJECT public: explicit preprocess(QObject* parento = 0); inline ~preprocess() {} public: void preprocessText(QString* text); public slots: void loadSettings(); private: bool FindReplaceInput; QStringList FindReplaceInputList; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/PORTING_TO_QT_6.h���������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015703� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.818761089 30 atime=1762812828.038759355 30 ctime=1762812827.818761089 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PORTING_TO_QT_6.h��������������������������������������������������������������0000644�0001750�0000144�00000001354�15104461633�017677� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef PORTING_TO_QT_6_H #define PORTING_TO_QT_6_H #include <QtGlobal> #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) #define _QT_6_KeepEmptyParts Qt::KeepEmptyParts #define _QT_6_SkipEmptyParts Qt::SkipEmptyParts #define _QT_6_endl Qt::endl #else #define _QT_6_KeepEmptyParts QString::KeepEmptyParts #define _QT_6_SkipEmptyParts QString::SkipEmptyParts #define _QT_6_endl endl #endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/PaxHeaders/authorString.h������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016016� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.754761594 29 atime=1762812827.99875967 30 ctime=1762812827.758761563 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2b/authorString.h�����������������������������������������������������������������0000644�0001750�0000144�00000010330�15104461633�020005� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef AUTHORSTRING_H #define AUTHORSTRING_H #include "cb2bib_utilities.h" #include <QRegExp> #include <QString> #include <QStringList> namespace author { struct unifier { unifier(); QString& unifyNames(QString& author) const; QString& simplifyString(QString& author, const bool full = false) const; QString fromMedline(const QString& author) const; const QString name; const QString initials; const QString double_initials; const QString prefixes; const QString reversed_romance_name; const QRegExp reversed_name_rx; const QRegExp reversed_romance_name_rx; const QRegExp unifier_rx1; const QRegExp unifier_rx2; const QRegExp unifier_rx3; const QRegExp unifier_rx4; const QRegExp unifier_rx5; const QRegExp unifier_rx6; const QRegExp unifier_rx7; const QRegExp simplify_string_rx1; const QRegExp simplify_string_rx2; const QRegExp simplify_string_rx3; const QRegExp simplify_string_rx4; const QRegExp simplify_string_rx5; const QRegExp simplify_string_rx6; const QRegExp simplify_string_rx7; }; /** Implementation of author field extraction P. Constans. A Simple Extraction Procedure for Bibliographical Author Field. arXiv:0902.0755, 2009. */ struct encoder { encoder() {} explicit encoder(const QString& str) { encode(str); } QString code; QString decoded(const int position, const int length) const; QStringList fragments; unifier aunifier; void clear() { code.clear(); fragments.clear(); } void encode(const QString& raw); void scape(const int pos, const int length, const QChar c = QChar(' ')) { const int pos0(std::max(pos, 0)); const int posn(std::min(pos0 + length, int(code.length()))); for (int i = pos0; i < posn; ++i) if (code.at(i) != 'L') code[i] = c; } void scapePattern(const QString& pattern, const QChar c = QChar(' ')) { QRegExp rx(pattern, Qt::CaseSensitive); rx.setMinimal(true); rx.setPatternSyntax(QRegExp::RegExp2); if (!rx.isValid()) exit(6); int pos(0); while (pos > -1) { pos = rx.indexIn(code, pos); if (pos > -1) { scape(pos, rx.matchedLength(), c); pos += rx.matchedLength(); } } } static inline bool hasUpper(const QString& str) { for (int i = 0; i < str.length(); i++) if (str.at(i).isLetter()) if (str.at(i).category() == QChar::Letter_Uppercase) return true; return false; } static inline bool isCapitalName(const QString& w) { return c2bUtils::isUpperCaseString(w, std::max(0, int(w.lastIndexOf('_', -5)))); // Skip prefixes and suffixes } static inline bool isSeparator(const QString& w) { return (w == "and") || (w == "&"); } static bool isAdparticle(const QString& w); static bool isInitial(const QString& w); static bool isName(const QString& w); static bool isPlainWord(const QString& w); }; } // namespace author class authorString { public: authorString(); inline ~authorString() {} QString toBibTeX(const QString& author, bool full_form = false); inline QString fromMedline(const QString& author) const { return au.fromMedline(author); } inline const QString& prefixes() const { return au.prefixes; } private: QString capitalize(const QString& name) const; QString processFirstMiddle(const QString& first_middle) const; bool containLowerCaseLetter(const QString& author) const; bool isReverseOrder(const QString& author) const; static bool containUpperCaseLetter(const QString& author); QString _author_string; author::unifier au; bool _full_form; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bHighlighter.h��������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015505� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.578762982 30 atime=1762812828.042759324 30 ctime=1762812827.578762982 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bHighlighter.h�������������������������������������������������������������������0000644�0001750�0000144�00000002031�15104461633�017472� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BHIGHLIGHTER_H #define C2BHIGHLIGHTER_H #include <QRegExp> #include <QSyntaxHighlighter> /** clipboard SyntaxHighLighter @author Pere Constans */ class c2bColors; class c2bHighlighter : public QSyntaxHighlighter { public: explicit c2bHighlighter(QTextDocument* doc); ~c2bHighlighter(); protected: virtual void highlightBlock(const QString& text); private: QColor text_color; QRegExp rx0; QRegExp rx1; QRegExp rx2; QRegExp rx3; QRegExp rx4; QRegExp rx5; QRegExp rx6; QRegExp rx_extracted_ends; QRegExp rx_extracted_starts; QRegExp rx_metadata_ends; QRegExp rx_metadata_starts; c2bColors* c; }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bCiter.h��������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014315� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.526763392 30 atime=1762812828.042759324 30 ctime=1762812827.530763361 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bCiter.h�������������������������������������������������������������������������0000644�0001750�0000144�00000012234�15104461633�016310� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITER_H #define C2BCITER_H #include <QString> /** \page c2bciter cb2Bib Citer The cb2Bib Citer is a keyboard based module for inserting citation IDs into a working document. Conveniently, the command <tt>c2bciter</tt>, or its expansion <tt>cb2bib --citer</tt>, can be assigned to a global, desktop wide shortcut key. This will provide an easy access to the citer from within any text editor. Pressing the shortcut turns on and off the citer panel. Once appropriate references are selected, pressing key C sets the citations either to the clipboard or to a LyX pipe, closes the citer panel, and returns keyboard focus to the editor. By default, <tt>c2bciter</tt> loads all references from the current directory, specified in the cb2Bib main panel. On the desktop tray, the cb2Bib icon indicates that the citer is running. Its context menu offers the possibility to load other files or directories, or to toggle full screen mode. Search, filtering, navigation, and citation are keyword based. Pressing keys A, I, J, T, and Y sorts the references by author, included date, journal, title, and year, respectively. Key F initiates filtering, and Esc leaves filtering mode. References are selected when pressing enter. Key S toggles the current selection display, and Del clears the selection. The combination Shift + letter navigates through the rows starting by the letter. Advanced filtering capabilities are available after indexing the documents. Document indexing, or term or key sentence extraction, is performed by clicking the tray icon menu action Index Documents. Once indexing is done and after clicking Refresh, pressing K displays the document extracted keywords, and pressing G, the collection glossary of terms. On a keyword, pressing R display all documents indexed by the keyword. On a document, pressing R display related documents. Relatedness is set from keyword based similarity measures. Key sequence Alt+C toggles clipboard connection on and off. When connection is on, the clipboard contents is set, each time it changes, as the filter string. This provides a fast way to retrieve a given reference while browsing elsewhere. \verbatim Usage: cb2bib --citer [dirname1 [dirname2 ... ]] cb2bib --citer [filename1.bib [filename2.bib ... ]] \endverbatim \verbatim Display Keys A author - journal - year - title I included date - title J journal - year - author T title Y year - author - journal - title \endverbatim \verbatim Filter Keys D Delete last filter F Enter pattern filter mode G Toggle glossary of terms view K Toggle document keywords view R Display related documents Left Move to previous filtered view Right Move to next filtered view \endverbatim \verbatim Action Keys C Cite selected citations and close citer window Del Unselect all citations E Edit current citation's source Enter Select current citation Esc Exit filter mode or close citer window O Open current citation's file S Display the set of selected citations V Display document excerpts in keywords view Shift+ Keyboard search naviagation U Open current citation's URL W Write notes using Annote \endverbatim \verbatim Tray Icon Actions F1 Citer help Ctrl+O Open BibTeX directory Alt+O Open BibTeX files F5 Refresh Ctrl+F Search in files Alt+L Set Lyx pipe F2 Toggle cb2Bib Alt+C Toggle clipboard Alt+F Toggle full screen Index documents \endverbatim See also \ref relnotes130, \ref relnotes140, \ref relnotes147, \ref commandline and \ref c2bannote. */ namespace c2bCiter { enum Format { AJYT, IT, JYA, T, YAJT, R, K }; enum Filter { None, Document, Keyword, Pattern, Related, Selected }; struct State { inline State() : format(AJYT), filter(None), viewer_index(0) {} inline State(const Format fo, const Filter fi, const int vi, const QString fs) : format(fo), filter(fi), viewer_index(vi), filter_string(fs) {} inline bool operator==(const State& s) const { return format == s.format && filter == s.filter && viewer_index == s.viewer_index && filter_string == s.filter_string; } Format format; Filter filter; int viewer_index; QString filter_string; QString index_data; }; struct KeywordData { bool valid; QString bibtexfn; QString documentfn; QString keyword; }; } // namespace c2bCiter #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bReferenceList.h������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016001� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.594762856 30 atime=1762812828.042759324 30 ctime=1762812827.598762824 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bReferenceList.h�����������������������������������������������������������������0000644�0001750�0000144�00000005026�15104461633�017775� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BREFERENCELIST_H #define C2BREFERENCELIST_H #include "ui_c2bReferenceList.h" #include <QWidget> class bibSearcher; class c2bCoreCiter; class c2bRLWebSearchSettings; class c2bSettings; class c2bTextBrowser; class c2bTextEdit; class c2bReferenceList : public QWidget { Q_OBJECT public: c2bReferenceList(c2bTextEdit* ed, c2bTextBrowser* br, QWidget* parentw = 0); ~c2bReferenceList(); QAction* citeEntryAction; QAction* clearSelectionsAction; QAction* openAuthorsWebSearchAction; QAction* openDOIAction; QAction* openFileAction; QAction* openTextLocalSearchAction; QAction* openTextWebSearchAction; QAction* openTitleWebSearchAction; QAction* openUrlAction; QAction* refreshListAction; QAction* webSearchSettingsAction; QStringList selectedKeys() const; void goToReference(const QString& id); void goToReference(const int position); public slots: void loadList(const QString& txt, bibSearcher* searcher = 0); void refreshList(); void setLyXPipe(); signals: void hasSelectedItems(bool); void openFile(const QString& fn); protected slots: void citeEntry(); void clearSelections(); void goToReference(QTreeWidgetItem* ref); void itemSelectionChanged(); void openAuthorWebSearch(); void openDOI(); void openFile(); void openLink(const QUrl& ln); void openTextLocalSearch(); void openTextWebSearch(); void openTitleWebSearch(); void openUrl(); void scrollToReference(const QString& id); void webSearchSettings(); private: QList<int> _positionList; QString _bib_item_html; QString _filter_mode; QString _references_html; QStringList _doiList; QStringList _fileList; QStringList _urlList; Ui::c2bReferenceList ui; c2bCoreCiter* _citerP; c2bSettings* _settingsP; c2bTextBrowser* _browserP; c2bTextEdit* _editorP; int _author_index; int _id_index; int _journal_index; int _key_index; int _title_index; int _year_index; void setupFilterBar(); private slots: void blockFilterSignals(); void filterList(); void keepFilterPattern(); void setFilterMode(QAction* mode); }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/findDialog.ui�����������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015105� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.190766041 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/findDialog.ui����������������������������������������������������������������������0000644�0001750�0000144�00000015737�15104461330�017106� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ui version="4.0" > <author>Pere Constans</author> <class>findDialog</class> <widget class="QDialog" name="findDialog" > <property name="geometry" > <rect> <x>0</x> <y>0</y> <width>459</width> <height>196</height> </rect> </property> <property name="windowTitle" > <string>Find in text - cb2Bib</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>6</number> </property> <property name="spacing" > <number>6</number> </property> <item row="1" column="0" > <widget class="QGroupBox" name="groupBox" > <property name="sizePolicy" > <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="title" > <string>Options</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>9</number> </property> <property name="spacing" > <number>6</number> </property> <item row="1" column="0" > <widget class="QCheckBox" name="checkCase" > <property name="text" > <string>&Case sensitive</string> </property> </widget> </item> <item row="2" column="0" > <spacer> <property name="orientation" > <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>180</width> <height>16</height> </size> </property> </spacer> </item> <item row="0" column="0" > <widget class="QCheckBox" name="checkWords" > <property name="text" > <string>&Whole words only</string> </property> </widget> </item> </layout> </widget> </item> <item row="0" column="0" colspan="2" > <layout class="QHBoxLayout" > <property name="spacing" > <number>6</number> </property> <property name="margin" > <number>0</number> </property> <item> <widget class="QLabel" name="TextLabel1" > <property name="text" > <string>Find:</string> </property> <property name="buddy" > <cstring>comboFind</cstring> </property> </widget> </item> <item> <widget class="c2bComboBox" name="comboFind" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Expanding" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable" > <bool>true</bool> </property> <property name="duplicatesEnabled" > <bool>false</bool> </property> </widget> </item> <item> <widget class="QToolButton" name="clearB" > <property name="toolTip" > <string>Clear Text</string> </property> <property name="text" > <string/> </property> <property name="icon" > <iconset resource="cb2bib.qrc" > <normaloff>:/icons/icons/clear_left.png</normaloff>:/icons/icons/clear_left.png</iconset> </property> </widget> </item> </layout> </item> <item row="3" column="0" > <widget class="QLabel" name="notFound" > <property name="text" > <string>Pattern not found</string> </property> </widget> </item> <item row="3" column="1" > <widget class="QDialogButtonBox" name="buttonBox" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="standardButtons" > <set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set> </property> </widget> </item> <item row="1" column="1" > <widget class="QGroupBox" name="groupBox_2" > <property name="sizePolicy" > <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="title" > <string>Direction</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>9</number> </property> <property name="spacing" > <number>6</number> </property> <item row="2" column="0" > <spacer> <property name="orientation" > <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>147</width> <height>16</height> </size> </property> </spacer> </item> <item row="1" column="0" > <widget class="QRadioButton" name="radioBackward" > <property name="text" > <string>&Backward</string> </property> </widget> </item> <item row="0" column="0" > <widget class="QRadioButton" name="radioForward" > <property name="text" > <string>&Forward</string> </property> <property name="checked" > <bool>true</bool> </property> </widget> </item> </layout> </widget> </item> <item row="2" column="0" colspan="2" > <widget class="Line" name="line5" > <property name="frameShape" > <enum>QFrame::HLine</enum> </property> <property name="frameShadow" > <enum>QFrame::Sunken</enum> </property> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> </layout> </widget> <layoutdefault spacing="6" margin="11" /> <customwidgets> <customwidget> <class>c2bComboBox</class> <extends>QComboBox</extends> <header>c2bComboBox.h</header> </customwidget> </customwidgets> <tabstops> <tabstop>comboFind</tabstop> <tabstop>clearB</tabstop> <tabstop>checkWords</tabstop> <tabstop>checkCase</tabstop> <tabstop>radioForward</tabstop> <tabstop>radioBackward</tabstop> </tabstops> <resources> <include location="cb2bib.qrc" /> </resources> <connections> <connection> <sender>clearB</sender> <signal>clicked()</signal> <receiver>comboFind</receiver> <slot>clearEditText()</slot> <hints> <hint type="sourcelabel" > <x>380</x> <y>18</y> </hint> <hint type="destinationlabel" > <x>244</x> <y>28</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>findDialog</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel" > <x>125</x> <y>202</y> </hint> <hint type="destinationlabel" > <x>309</x> <y>226</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>accepted()</signal> <receiver>findDialog</receiver> <slot>accept()</slot> <hints> <hint type="sourcelabel" > <x>200</x> <y>202</y> </hint> <hint type="destinationlabel" > <x>211</x> <y>170</y> </hint> </hints> </connection> </connections> </ui> ���������������������������������cb2bib-2.0.3/src/PaxHeaders/htm���������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013221� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.242765631 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/htm/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�015262� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/htm/PaxHeaders/tex2html_mathjax_header.html����������������������������������������0000644�0000000�0000000�00000000074�15104461330�020757� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.334764906 30 ctime=1762812827.242765631 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/htm/tex2html_mathjax_header.html���������������������������������������������������0000644�0001750�0000144�00000000455�15104461330�022747� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<script type="text/x-mathjax-config"> MathJax.Hub.Config({ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]} }); </script> <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js"></script> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/htm/PaxHeaders/references.html�����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016305� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.242765631 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/htm/references.html����������������������������������������������������������������0000644�0001750�0000144�00000002225�15104461330�020272� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> <title>References


GET_REFERENCES


cb2bib-2.0.3/src/htm/PaxHeaders/tex2html_local_mathjax_header.html0000644000000000000000000000007415104461330022131 xustar0030 atime=1762812827.334764906 30 ctime=1762812827.242765631 cb2bib-2.0.3/src/htm/tex2html_local_mathjax_header.html0000644000175000001440000000044415104461330024117 0ustar00constansusers00000000000000 cb2bib-2.0.3/src/htm/PaxHeaders/bib_item.html0000644000000000000000000000007415104461330015736 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.242765631 cb2bib-2.0.3/src/htm/bib_item.html0000644000175000001440000000106015104461330017717 0ustar00constansusers00000000000000 action

GET_REFERENCE_AUTHOR GET_REFERENCE_TITLE. GET_REFERENCE_SOURCE GET_REFERENCE_VOLUMEGET_REFERENCE_PAGES GET_REFERENCE_YEAR 

GET_REFERENCE_ABSTRACT

cb2bib-2.0.3/src/htm/PaxHeaders/references.css0000644000000000000000000000007415104461330016131 xustar0030 atime=1762812827.330764937 30 ctime=1762812827.242765631 cb2bib-2.0.3/src/htm/references.css0000644000175000001440000000142215104461330020114 0ustar00constansusers00000000000000/* cb2Bib References CSS */ /* general */ body { font-size: 100%; font-family: sans-serif; background-color: #E7E7E7; color: black; padding: 0; margin: 0; } a { color: #010141; text-decoration: none; } a:link { color: #010141; text-decoration: underline; } h1 { background-color: #010141; color: #DBDBDB; font-size: 20px; font-variant: small-caps; font-family: sans-serif; } /* references */ #references{ background-color: #DBDBDB; } #references blockquote{ font-size: small; } #references span{ color: #0000FF; } #excerpt{ font-style: italic; } /* header */ #header { vertical-align: middle; } /* footer */ #footer { color: black; font-family: arial, sans-serif; font-size: 9pt; } #footer td{ padding: 10px; padding-left: 5px; padding-right: 5px; } cb2bib-2.0.3/src/htm/PaxHeaders/excerpts.html0000644000000000000000000000007415104461330016021 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.242765631 cb2bib-2.0.3/src/htm/excerpts.html0000644000175000001440000000112315104461330020002 0ustar00constansusers00000000000000 GET_EXCERPTS_TITLE

GET_EXCERPTS


cb2bib-2.0.3/src/PaxHeaders/c2bSaveREHighlighter.cpp0000644000000000000000000000013215104461633017106 xustar0030 mtime=1762812827.462763897 30 atime=1762812828.042759324 30 ctime=1762812827.462763897 cb2bib-2.0.3/src/c2bSaveREHighlighter.cpp0000644000175000001440000000270115104461633021077 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSaveREHighlighter.h" #include "c2bSettings.h" #include #include c2bSaveREHighlighter::c2bSaveREHighlighter(QRegExp& rx, QTextDocument* doc) : QSyntaxHighlighter(doc), _current_rx(rx) { QPalette p; text_color = p.text().color(); c2bSettings* settings(c2bSettingsP); c = &settings->colors; connect(settings, SIGNAL(newSettings()), this, SLOT(rehighlight())); } c2bSaveREHighlighter::~c2bSaveREHighlighter() {} void c2bSaveREHighlighter::highlightBlock(const QString& text) { const int len(text.length()); const int ind(_current_rx.indexIn(text)); const int caps(_current_rx.capturedTexts().count()); if (ind == -1 || caps <= 1) setFormat(0, len, text_color); else { setFormat(0, len, c->cb2bib_unrelevant_color); for (int i = 1; i < caps; i = i + 2) setFormat(_current_rx.pos(i), _current_rx.cap(i).length(), c->cb2bib_highly_relevant_color); for (int i = 2; i < caps; i = i + 2) setFormat(_current_rx.pos(i), _current_rx.cap(i).length(), c->cb2bib_relevant_color); } } cb2bib-2.0.3/src/PaxHeaders/findDialog.h0000644000000000000000000000013215104461633014720 xustar0030 mtime=1762812827.642762477 30 atime=1762812828.042759324 30 ctime=1762812827.646762446 cb2bib-2.0.3/src/findDialog.h0000644000175000001440000000255315104461633016716 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * findDialog is adapted from Qt Designer * Copyright (C) 2001 Trolltech AS. All rights reserved. ***************************************************************************/ #ifndef FINDDIALOG_H #define FINDDIALOG_H #include "ui_findDialog.h" #include #include class QAction; class QPlainTextEdit; class QTextEdit; class findDialog : public QDialog { Q_OBJECT public: explicit findDialog(QWidget* parentw = 0); ~findDialog(); QAction* findAction; QAction* findNextAction; QAction* findPreviousAction; public slots: int exec(); void findNext(); void findPrevious(); void findText(); void setEditor(QPlainTextEdit* editor); void setEditor(QTextEdit* editor); void show(); private slots: void accept(); private: QPointer _editor; QString m_find_pattern; Ui::findDialog ui; bool findText(const QString& pattern, bool do_forward = true, bool do_case_sensitive = false, bool do_whole_words = false); bool m_find_case; bool m_find_words; void init(); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bConfigure.ui0000644000000000000000000000007415104461330015355 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.186766073 cb2bib-2.0.3/src/c2bConfigure.ui0000644000175000001440000017533715104461330017361 0ustar00constansusers00000000000000 Pere Constans c2bConfigure 0 0 1184 775 Configure - cb2Bib Qt::Horizontal 0 0 200 16777215 PointingHandCursor true QFrame::Raised QAbstractItemView::NoSelection QAbstractItemView::SelectColumns 32 32 QListView::Static 5 QListView::ListMode 0 true Annote :/icons/icons/annote.png:/icons/icons/annote.png BibTeX :/icons/icons/configure_bibtex.png:/icons/icons/configure_bibtex.png Clipboard :/icons/icons/configure_clipboard.png:/icons/icons/configure_clipboard.png Documents :/icons/icons/configure_documents.png:/icons/icons/configure_documents.png Files :/icons/icons/configure_files.png:/icons/icons/configure_files.png Fonts :/icons/icons/configure_fonts.png:/icons/icons/configure_fonts.png Network :/icons/icons/configure_network.png:/icons/icons/configure_network.png Shortcuts :/icons/icons/configure_shortcuts.png:/icons/icons/configure_shortcuts.png Utilities :/icons/icons/configure_utilities.png:/icons/icons/configure_utilities.png Qt::Vertical 0 1 Annote Cascading Style Sheet (CSS) Select Annote CSS file :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png MathJax Header Select MathJax header file :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png HTML Output Include CSS in HTML Use relative links Qt::Horizontal 40 20 Annote Viewer Font Family false Size 0 0 true false Annote Viewer Fixed Font Family false QFontComboBox::MonospacedFonts Size 0 0 true false Qt::Vertical 20 41 1 Cite ID Pattern 9 6 Right click to edit pattern placeholders Author and Editor Format 9 6 Qt::Horizontal 40 20 F&ull Name Abbrevia&ted Journal Format 9 6 Full Name Abbreviated Qt::Horizontal QSizePolicy::Expanding 95 31 Number Separator 9 6 Keep empty for default dash. Blank spaces count Cite Command Pattern 9 6 LaTeX Conversions 9 6 Qt::Horizontal QSizePolicy::Expanding 182 20 Postprocess 'month' Set 'title' in double braces Convert entry strings to LaTe&X Reference Extraction 9 6 Tr&y Heuristic Guess if recognition fails Reference Check 9 6 Check Repeated On Save External BibTeX Postprocessing 9 6 Aguments: Select external postprocess tool :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Command: Output Extension: Qt::Vertical 20 20 1 Clipboard Preprocessing 9 6 Replace/Remove from Input Stream 0 6 &Edit Alt+E Qt::Vertical 20 40 &Delete Alt+D QFrame::Raised QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked true QAbstractItemView::SingleSelection false true true 3 Find Replace Description &New Alt+N External Clipboard Preparsing Command 9 6 6 0 Select external parser tool :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Perform always, as part of an automatic extraction Do not show log Qt::Horizontal 40 20 Add document metadata to Input Stream 9 6 Qt::Horizontal 40 20 Append Prepend 1 Rename and Copy/Move document files Document Options 9 6 Documents Directory: Insert BibTeX metadata to document files Set directory relative to the BibTeX File Directory 6 0 Select PDF directory :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png 9 6 Qt::Horizontal 40 20 Move (local so&urce files) Copy Document ID Pattern 9 6 Right click to edit pattern placeholders ExifTool Metadata writer 9 6 Select ExifTool executable :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Command: Qt::Vertical 20 16 1 Journal Abbreviation List File Select journal abbreviation file :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Regular Expression List File Select regular expression file :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Bookmarks and Network Query Info File Select network informantion file :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Browser Cascading Style Sheet (CSS) Select CSS file :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Qt::Vertical 31 20 Part Of Speech (POS) Lexicon Select POS lexicon file :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Search In Files Cache Directory Select cache directory :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png 1 Family false Size 0 0 true false 0 0 Sample Text Qt::AlignHCenter QFrame::Raised true false true true 1 Context Colors 1 Use E&xternal Network Client Copy: kfmclient Select external copy executable :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Copy Aguments: Move: kfmclient Select external move executable :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Move Aguments: Use Proxy false false Host: Port: 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Type: Http Socks5 Queries 9 6 Download document if available &Keep Query temporary files (Debug Only) Perform Network Queries after automatic reference extractions Alt+Q Qt::Vertical 20 16 1 Main panel Editor and reference list Qt::Vertical 20 398 1 PDF Import: To plain text converter 9 6 Select external convert tool :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Aguments: Command: BibTeX search: To plain text converter 9 6 Select external convert tool :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Aguments: Command: Qt::Vertical 20 40 Qt::Horizontal 0 0 false Qt::Horizontal Qt::Horizontal QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Save c2bLineEdit QLineEdit
c2bLineEdit.h
c2bIdPatternLineEdit QLineEdit
c2bIdPatternLineEdit.h
c2bCitePatternLineEedit QLineEdit
c2bCitePatternLineEedit.h
c2bShortcutWidget QWidget
c2bShortcutWidget.h
1
buttonBox buttonBox accepted() c2bConfigure accept() 427 578 612 561 buttonBox rejected() c2bConfigure reject() 385 578 342 524 FmClient toggled(bool) clientGroupBox setEnabled(bool) 549 46 549 106 UseProxy toggled(bool) proxyGroupBox setEnabled(bool) 235 162 276 190
cb2bib-2.0.3/src/PaxHeaders/c2bSearchInFiles.h0000644000000000000000000000013015104461633015724 xustar0029 mtime=1762812827.61076273 30 atime=1762812828.042759324 29 ctime=1762812827.61076273 cb2bib-2.0.3/src/c2bSearchInFiles.h0000644000175000001440000000243115104461633017717 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSEARCHINFILES_H #define C2BSEARCHINFILES_H #include "ui_c2bSearchInFiles.h" #include "ui_c2bSearchInFilesPatternEdit.h" #include class bibSearcher; class c2bSearchInFiles : public QDialog { Q_OBJECT public: explicit c2bSearchInFiles(const QString& file, QWidget* parentw = 0); ~c2bSearchInFiles(); void setCurrentText(const QString& text); public slots: void setBibTeXFile(const QString& file = QString()); void show(); signals: void searchDone(const QString& filename, bibSearcher* searcher); private slots: void help(); void on_addPatternB_clicked(); void on_deletePatternB_clicked(); void on_editPatternB_clicked(); void searchB_clicked(); void updateForm(); private: QPushButton* _searchB; QString _bibtex_dir; QString _bibtex_file; QString _search_log; Ui::c2bSearchInFiles ui; Ui::c2bSearchInFilesPatternEdit ui_editor; }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bTextEdit.cpp0000644000000000000000000000013115104461633015333 xustar0029 mtime=1762812827.47876377 30 atime=1762812828.042759324 30 ctime=1762812827.482763739 cb2bib-2.0.3/src/c2bTextEdit.cpp0000644000175000001440000002311415104461633017326 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bTextEdit.h" #include "c2bSettings.h" #include "c2bUtils.h" #include #include #include #include c2bTextEdit::c2bTextEdit(QWidget* parentw) : QPlainTextEdit(parentw) { setFrameShape(QPlainTextEdit::StyledPanel); setFrameShadow(QPlainTextEdit::Raised); _settingsP = c2bSettingsP; connect(_settingsP, SIGNAL(newSettings()), this, SLOT(loadSettings())); _line_number_area = new LineNumberArea(this); _line_number_area_color = palette().color(QPalette::Active, QPalette::Base).darker(110); _line_number_color_p = &_settingsP->colors.comment_color; connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth())); connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int))); updateLineNumberAreaWidth(); c2bUtils::addSeparator(this); toggleWordWrappingAction = new QAction(this); addAction(toggleWordWrappingAction); toggleWordWrappingAction->setText(tr("Toggle Word Wrapping")); toggleWordWrappingAction->setStatusTip(tr("Toggle word wrapping")); _settingsP->setKeysequence("Shortcuts/Editor/", toggleWordWrappingAction); connect(toggleWordWrappingAction, SIGNAL(triggered()), this, SLOT(toggleWordWrapping())); if (_settingsP->value("c2bTextEdit/WrapMode", false).toBool()) setLineWrapMode(QPlainTextEdit::WidgetWidth); else setLineWrapMode(QPlainTextEdit::NoWrap); } c2bTextEdit::~c2bTextEdit() { _settingsP->setValue("c2bTextEdit/WrapMode", lineWrapMode() == QPlainTextEdit::WidgetWidth); } void c2bTextEdit::setBibTeXActions() { c2bUtils::addSeparator(this); pasteCurrentBibTeXAction = new QAction(this); addAction(pasteCurrentBibTeXAction); pasteCurrentBibTeXAction->setText(tr("Paste Current BibTeX")); pasteCurrentBibTeXAction->setStatusTip(tr("Paste current BibTeX")); _settingsP->setKeysequence("Shortcuts/Editor/", pasteCurrentBibTeXAction); setLaTeXActions(); c2bUtils::addSeparator(this); journalsToFullAction = new QAction(this); addAction(journalsToFullAction); journalsToFullAction->setText(tr("Set Journals to Full Name")); journalsToFullAction->setStatusTip(tr("Set journals to full name")); _settingsP->setKeysequence("Shortcuts/Editor/", journalsToFullAction); journalsToAlternateFullAction = new QAction(this); addAction(journalsToAlternateFullAction); journalsToAlternateFullAction->setText(tr("Set Journals to Alternate Full Name")); journalsToAlternateFullAction->setStatusTip(tr("Set journals to alternate full name")); journalsToAbbreviatedAction = new QAction(this); addAction(journalsToAbbreviatedAction); journalsToAbbreviatedAction->setText(tr("Set Journals to Abbreviated Name")); journalsToAbbreviatedAction->setStatusTip(tr("Set journals to abbreviated name")); _settingsP->setKeysequence("Shortcuts/Editor/", journalsToAbbreviatedAction); journalsToAlternateAbbreviatedAction = new QAction(this); addAction(journalsToAlternateAbbreviatedAction); journalsToAlternateAbbreviatedAction->setText(tr("Set Journals to Alternate Abbreviated Name")); journalsToAlternateAbbreviatedAction->setStatusTip(tr("Set journals to alternate abbreviated name")); c2bUtils::addSeparator(this); updateMetadataAction = new QAction(this); addAction(updateMetadataAction); updateMetadataAction->setText(tr("Update Documents Metadata")); updateMetadataAction->setStatusTip(tr("Update document files metadata")); _settingsP->setKeysequence("Shortcuts/Editor/", updateMetadataAction); } void c2bTextEdit::setLaTeXActions() { c2bUtils::addSeparator(this); convertSelection2LaTeXAction = new QAction(this); addAction(convertSelection2LaTeXAction); convertSelection2LaTeXAction->setText(tr("Selection to LaTeX")); convertSelection2LaTeXAction->setStatusTip(tr("Convert selection to LaTeX")); _settingsP->setKeysequence("Shortcuts/Editor/", convertSelection2LaTeXAction); connect(convertSelection2LaTeXAction, SIGNAL(triggered()), this, SLOT(convert2LaTeX())); convertSelection2LaTeXAction->setEnabled(false); connect(this, SIGNAL(copyAvailable(bool)), convertSelection2LaTeXAction, SLOT(setEnabled(bool))); convertSelection2UnicodeAction = new QAction(this); addAction(convertSelection2UnicodeAction); convertSelection2UnicodeAction->setText(tr("Selection to Unicode")); convertSelection2UnicodeAction->setStatusTip(tr("Convert selection to Unicode")); _settingsP->setKeysequence("Shortcuts/Editor/", convertSelection2UnicodeAction); connect(convertSelection2UnicodeAction, SIGNAL(triggered()), this, SLOT(convert2Unicode())); convertSelection2UnicodeAction->setEnabled(false); connect(this, SIGNAL(copyAvailable(bool)), convertSelection2UnicodeAction, SLOT(setEnabled(bool))); } void c2bTextEdit::contextMenuEvent(QContextMenuEvent* qevent) { QMenu* menu = createStandardContextMenu(); QList acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(qevent->globalPos()); delete menu; } void c2bTextEdit::keyPressEvent(QKeyEvent* qevent) { QPlainTextEdit::keyPressEvent(qevent); if (qevent->key() == Qt::Key_Insert) { setOverwriteMode(!overwriteMode()); emit overwriteModeChanged(); } } void c2bTextEdit::toggleWordWrapping() { if (lineWrapMode() == QPlainTextEdit::WidgetWidth) setLineWrapMode(QPlainTextEdit::NoWrap); else setLineWrapMode(QPlainTextEdit::WidgetWidth); } void c2bTextEdit::updatePlainText(const QString& text) { const int scrollPosition(verticalScrollBar()->value()); const int cursorBlock(textCursor().blockNumber()); const int cursorColumn(textCursor().columnNumber()); setPlainText(text); const int lposition(document()->findBlockByNumber(cursorBlock).position()); QTextCursor tcursor(textCursor()); tcursor.setPosition(lposition + cursorColumn, QTextCursor::MoveAnchor); setTextCursor(tcursor); verticalScrollBar()->setValue(scrollPosition); } void c2bTextEdit::cursorPosition(int* line_number, int* line_position) const { *line_number = textCursor().blockNumber() + 1; *line_position = textCursor().positionInBlock() + 1; } void c2bTextEdit::convert2LaTeX() { QString txt(textCursor().selectedText()); // Better do the long way: Convert anything to c2b, and then // translate to TeX c2bUtils::fullBibToC2b(txt); insertPlainText(c2bUtils::c2bToBib(txt)); } void c2bTextEdit::convert2Unicode() { QString txt(textCursor().selectedText()); // Strictly, this should be bibToC2b; but convert also // possible PNAS like, and, for consistency, HTML sub // and superscripts to TeX insertPlainText(c2bUtils::fullBibToC2b(txt)); } void c2bTextEdit::loadSettings() { if (font() != _settingsP->c2bMonoFont) { setFont(_settingsP->c2bMonoFont); updateLineNumberAreaWidth(); } _line_number_area->update(); // Update, otherwise number colors might not follow apply button } /*************************************************************************** * Line number area (From CodeEditor Qt's example) ***************************************************************************/ int c2bTextEdit::lineNumberAreaWidth() { int digits(1); int dmax(std::max(1, blockCount())); while (dmax >= 10) { dmax /= 10; ++digits; } #if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) const int space(5 + fontMetrics().horizontalAdvance(QLatin1Char('9')) * digits); #else const int space(5 + fontMetrics().width(QLatin1Char('9')) * digits); #endif return space; } void c2bTextEdit::updateLineNumberAreaWidth() { setViewportMargins(lineNumberAreaWidth(), 0, 0, 0); } void c2bTextEdit::updateLineNumberArea(const QRect& qrect, int dy) { if (dy) _line_number_area->scroll(0, dy); else _line_number_area->update(0, qrect.y(), _line_number_area->width(), qrect.height()); if (qrect.contains(viewport()->rect())) updateLineNumberAreaWidth(); } void c2bTextEdit::resizeEvent(QResizeEvent* qevent) { QPlainTextEdit::resizeEvent(qevent); QRect cr = contentsRect(); _line_number_area->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height())); } void c2bTextEdit::lineNumberAreaPaintEvent(QPaintEvent* qevent) { QPainter painter(_line_number_area); painter.fillRect(qevent->rect(), _line_number_area_color); painter.setPen(*_line_number_color_p); QFont f = font(); f.setPointSize(std::max(0, f.pointSize() - 3)); painter.setFont(f); QTextBlock block = firstVisibleBlock(); int blockNumber(block.blockNumber()); int top(int(blockBoundingGeometry(block).translated(contentOffset()).top())); int bottom(top + int(blockBoundingRect(block).height())); while (block.isValid() && top <= qevent->rect().bottom()) { if (block.isVisible() && bottom >= qevent->rect().top()) { const QString number(QString::number(blockNumber + 1)); painter.drawText(5, top + 2, _line_number_area->width(), fontMetrics().height(), Qt::AlignLeft, number); } block = block.next(); top = bottom; bottom = top + (int)blockBoundingRect(block).height(); ++blockNumber; } } cb2bib-2.0.3/src/PaxHeaders/c2bExport.cpp0000644000000000000000000000013115104461633015062 xustar0030 mtime=1762812827.418764243 29 atime=1762812827.99875967 30 ctime=1762812827.422764212 cb2bib-2.0.3/src/c2bExport.cpp0000644000175000001440000000526115104461633017060 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bExport.h" #include "c2b.h" #include c2bExport::c2bExport(QObject* parento) : QObject(parento) {} c2bExport::~c2bExport() {} void c2bExport::exportEntries(const export_data& ed) { // Note. Assume caller performs export_data validity check for files and directories. // Prefer replacing filenames to a full BibTeX parsing: This will preserve the // original entry and possibly available non cb2Bib tags. bibParser* bp = c2b::bibParser(); QStringList fields; if (ed.copy_documents) fields.append("file"); QRegExp filere("\\bfile\\s*=\\s*[\\{\"](.*)[\\}\"]", Qt::CaseInsensitive); filere.setMinimal(true); QString export_contents("\n\n"); QString export_log; bibReference ref; bp->initReferenceParsing(ed.bibtex_fn, fields, &ref); while (bp->referencesIn(ed.bibtex_contents, &ref)) { if (!ed.bibtex_keys.contains(ref.citeidName, Qt::CaseSensitive)) continue; if (ed.copy_documents) { const QString sfn(ref.value("file")); if (!sfn.isEmpty()) { const QString dfn(c2bUtils::documentAbsoluteName(ed.relative_dir, ed.export_fn, ed.documents_dir, sfn)); QFile source(sfn); if (!source.copy(dfn)) export_log += tr("% Unable to copy file %1 to %2. %3.\n").arg(sfn, dfn, source.errorString()); if (QFileInfo::exists(dfn)) { const int pos(filere.indexIn(ref.rawReference, 0)); if (pos > -1) { QString line(filere.cap(0)); const QString file(filere.cap(1)); line.replace(file, c2bUtils::documentFilename(ed.relative_dir, ed.export_fn, ed.documents_dir, sfn)); ref.rawReference.replace(pos, filere.matchedLength(), line); } } } } export_contents += ref.rawReference + "\n\n"; } if (!export_log.isEmpty()) export_contents = "% cb2Bib " + C2B_VERSION + " / Export Error Log\n" + export_log + export_contents; if (!c2bUtils::stringToFile(export_contents, ed.export_fn)) c2bUtils::warn(tr("Unable to write file %1").arg(ed.export_fn)); } cb2bib-2.0.3/src/PaxHeaders/c2bPdfImport.cpp0000644000000000000000000000013215104461633015506 xustar0030 mtime=1762812827.438764086 30 atime=1762812828.042759324 30 ctime=1762812827.442764054 cb2bib-2.0.3/src/c2bPdfImport.cpp0000644000175000001440000005113215104461633017501 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bPdfImport.h" #include "c2b.h" #include "c2bFileDialog.h" #include "c2bSettings.h" #include "c2bUtils.h" #include #include #include #include #include #include /** \page pdfimport PDF Reference Import

GET_TABLE_OF_CONTENTS

\section intro_automatic_extraction Introduction Articles in PDF or other formats that can be converted to plain text can be processed and indexed by cb2Bib. Files can be selected using the Select Files button, or dragging them from the desktop or the file manager to the PDFImport dialog panel. Files are converted to plain text by using any external translation tool or script. This tool, and optionally its parameters, are set in the cb2Bib configure dialog. See the \ref c2bconf_utilities section for details. Once the file is converted, the text, and optionally, the preparsed metadata, is sent to cb2Bib for reference recognition. This is the usual, two step process. First, text is optionally preprocessed, using a simple set of rules and/or any external script.or tool. See \ref c2bconf_clipboard. Second, text is processed for reference extraction. cb2Bib so far uses two methods. One considers the text as a full pattern, which is checked against the user's set of regular expressions. The better designed are these rules, the best and most reliable will be the extraction. The second method, used when no regular expression matches the text, considers instead a set of predefined subpatterns. See \ref heuristics. At this point users can interact and supervise their references, right before saving them. Allowing user intervention is and has been a design goal in cb2Bib. Therefore, at this point, cb2Bib helps users to check their references. Poorly translated characters, accented letters, 'forgotten' words, or some minor formatting in the titles might be worth considering. See \htmlonly Glyph & Cog's Text Extraction \endhtmlonly for a description on the intricacies of PDF to text conversions. In addition, if too few fields were extracted, one might perform a network query. Say, only the DOI was catch, then there are chances that such a query will fill the remaining fields. The references are saved from the cb2Bib main panel. Once Save is pressed, and depending on the configuration, see \ref c2bconf_documents, the document file will be either renamed, copied, moved or simply linked onto the file field of the reference. If Insert BibTeX metadata to document files is checked, the current reference will also be inserted into the document itself. When several files are going to be indexed, the sequence can be as follows: - Process next after saving\n Once files are load and Process is pressed, the PDFImport dialog can be minimized (but not closed) for convenience. All required operations to completely fill the desired fields (e.g. dynamic bookmarks, open DOI, etc, which might be required if the data in document is not complete) are at this point accessible from the main panel. The link in the file field will be permanent, without regard to which operations (e.g. clipboard copying) are needed, until the reference is saved. The source file can be open at any time by right clicking the file line edit. Once the reference is saved, the next file will be automatically processed. To skip a given document file from saving its reference, press the Process button. - Unsupervised processing\n In this operation mode, all files will be sequentially processed, following the chosen steps and rules. If the processes is successful, the reference is automatically saved, and the next file is processed. If it is not, the file is skipped and no reference is saved. While processing, the clipboard is disabled for safety. Once finished, this box is unchecked, to avoid a possible accidental saving of a void reference. Network queries that require intervention, i.e., whose result is launching a given page, are skipped. The processes follows until all files are processed. However, it will stop to avoid a file being overwritten, as a result of a repeated key. In this case, it will resume after manual renaming and saving. See also \ref commandline, commands --txt2bib and --doc2bib.

 

\section faq_automatic_extraction Automatic Extraction: Questions and Answers - When does cb2Bib do automatic extractions?\n cb2Bib is conceived as a lightweight tool to extract references and manage bibliographies in a simple, fast, and accurate way. Accuracy is better achieved in semi-automatic extractions. Such extractions are handy, and allow user intervention and verification. However, in cases where one has accumulated a large number of unindexed documents, automatic processing can be convenient. cb2Bib does automatic extraction when, in PDFImport mode, 'Unsupervised processing' is checked, or, in command line mode, when typing cb2bib --doc2bib *.pdf tmp_references.bib, or, on Windows, c2bconsole.exe instead of cb2bib. - Are PDFImport and command line modes equivalent?\n Yes. There are, however, two minor differences. First, PDFImport adds each reference to the current BibTeX file, as this behavior is the normal one in cb2Bib. On the other hand, command line mode will, instead, overwrite tmp_references.bib if it exists, as this is the expected behavior for almost all command line tools. Second, as for now, command line mode does not follow the configuration option 'Check Repeated On Save'. - How do I do automatic extraction?\n To test and learn about automatic extractions, the cb2Bib distribution includes a set of four PDF files that mimic a paper title page. For these files, distribution also includes a regular expression, in file regexps.txt, capable of extracting the reference fields, provided the pdftotex flags are set to their default values. Processing these files, should, therefore, be automatic, and four messages stating Processed as 'PDF Import Example' should be seen in the logs. Note that extractions are configurable. A reading of \ref configuration will provide additional, useful information. - Why some entries are not saved and files not renamed?\n Once you move from the fabricated examples to real cases, you will realize that some of the files, while being processed, are not renamed and their corresponding BibTeX data is not written. For each document file, cb2Bib converts its first page to text, and from this text it attempts to extract the bibliographic reference. By design, when extraction fails, cb2Bib does nothing: no file is moved, no BibTeX is written. This way, you know that the remaining files in the origin directory need special, manual attention. Extractions are seen as failed, unless reliable data is found in the text. - What is reliable data?\n Note that computer processing of natural texts, as extracting the bibliographic data from a title page, is nowadays an approximated procedure. cb2Bib tries several strategies: 1) allow for including user regular expressions very specific to the extraction at hand, 2) use metadata if available, 3) guess what is reasonable, and, based on this, make customized queries. Then, cb2Bib considers extracted data is reliable if i) data comes from a match to an user supplied regular expression ii) document contains BibTeX metadata, or iii) a guess is transformed through a query to formatted bibliographic data. As formatted bibliographic data, cb2Bib understands BibTeX, PubMed XML, arXiv XML, and CR JSON data. In addition, it allows external processing if needed. Other data, metadata, guesses, and guesses on query results are considered unreliable data. - Is metadata reliable data?\n No. Only author, title, and keywords in standard PDF metadata can be mapped to their corresponding bibliographic fields. Furthermore, publishers most often misuse these three keys, placing, for instance, DOI in title, or setting author to, perhaps, the document typesetter. Only BibTeX XMP metadata is considered reliable. If you consider that a set of PDF files does contain reliable data, you may force to accept it using the command line switch --sloppy together with --doc2bib. - How successful is automatic extraction?\n As it follows from the given definition of reliable data, running automatic extractions without adhoc regexps.txt and netqinf.txt files will certainly give a zero success ratio. In practice, scenario 3) often applies: cb2Bib guesses several fields, and, based on the out-of-the-box netqinf.txt file, it obtains from the web either BibTeX, PubMed XML, arXiv XML, or CR JSON data. - What can I do to increase success ratio?\n First, set your favorite journals in file abbreviations.txt. Besides increasing the chances of journal name recognition, it will provide consistency across your BibTeX database. In general, do not write regular expressions to extract directly from the PDF text. Conversion is often poor. Special characters often break lines, thus breaking your regular expressions too. Write customized queries instead. For instance, if your PDFs have DOI in title page, set the simple query \verbatim journal=The Journal of Everything| query=https://dx.doi.org/<> capture_from_query= referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=htm2txt_query \endverbatim then, if it is feasible to extract the reference from the document's web page using a regular expression, include it in file regexps.txt. Note that querying in cb2Bib had been designed having in mind minority fields of research, for which, established databases might not be available. If cb2Bib failed to make reasonable guesses, then, you might consider writing very simple regular expressions to extract directly from the PDF text. For instance, obtain title only. Then, the posterior query step can provide the remaining information. Note also, especially for old documents, journal name is often missing from the paper title page. If in need of processing a series of those papers, consider using a simple script, that, in the cb2Bib preprocessing step, adds this missing information. - Does successful extraction mean accurate extraction?\n No. An extraction is successful if reliable data, as defined above, is found in the text, in the metadata, or in the text returned by a query. Reference accuracy relies on whether or not user regular expressions are robust, BibTeX metadata is correct, a guess is appropriate, a set of queries can correct a partially incorrect guess, and the text returned by a query is accurate. In general, well designed sets of regular expressions are accurate. Publisher's abstract pages and PubMed are accurate. But, some publishers are still using images for non-ASCII characters, and PubMed algorithms may drop author middle names if a given author has 'too many names'. Expect convenience over accuracy on other sources. - Can I use cb2Bib to extract comma separated value CSV references?\n Yes. To automatically import multiple CSV references you will need one regular expression. If you can control CSV export, choose | as separator, since comma might be used, for instance, in titles. The regular expression for \verbatim AuthName1, AuthName2 | Title | 2010 \endverbatim will simply be \verbatim author title year ^([^|]*)\|([^|]*)\|([^|]*)$ \endverbatim The reference file references.csv can then be split to single-line files typing \verbatim split -l 1 references.csv slineref \endverbatim and the command \verbatim cb2bib --txt2bib slineref* references.bib rm -f slineref* \endverbatim will convert references.csv to BibTeX file references.bib */ c2bPdfImport::c2bPdfImport(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); settings = c2bSettingsP; loadSettings(); buttonSelectFiles = new QPushButton(tr("&Select Files")); buttonSelectFiles->setStatusTip(tr("Select PDF files. Hint: Files can be dragged and dropped to this window")); buttonSelectFiles->setMouseTracking(true); ui.buttonBox->addButton(buttonSelectFiles, QDialogButtonBox::ActionRole); buttonProcess = new QPushButton(tr("&Process")); ui.buttonBox->addButton(buttonProcess, QDialogButtonBox::ActionRole); ui.buttonBox->button(QDialogButtonBox::Help)->setAutoDefault(false); buttonProcess->setAutoDefault(true); buttonProcess->setDefault(true); buttonProcess->setEnabled(false); buttonSelectFiles->setAutoDefault(true); buttonSelectFiles->setDefault(true); buttonSelectFiles->setFocus(); ui.buttonBox->button(QDialogButtonBox::Abort)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); m_aborted = false; connect(ui.buttonBox->button(QDialogButtonBox::Abort), SIGNAL(clicked()), this, SLOT(abort())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); connect(buttonSelectFiles, SIGNAL(clicked()), this, SLOT(selectFiles())); connect(buttonProcess, SIGNAL(clicked()), this, SLOT(processOneFile())); connect(ui.DoAll, SIGNAL(toggled(bool)), this, SIGNAL(setClipboardDisabled(bool))); connect(c2b::instance(), SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); ui.Log->appendPlainText( tr("PDF to Text converter: %1\nArguments: %2\n") .arg(settings->fileName("c2bPdfImport/Pdf2TextBin"), settings->value("c2bPdfImport/Pdf2TextArg").toString())); showMessage(tr("See cb2Bib install directory for demo c2bPdfImport files.")); } c2bPdfImport::~c2bPdfImport() { emit setClipboardDisabled(false); saveSettings(); } void c2bPdfImport::processOneFile() { // Converting PDF to Text buttonProcess->setEnabled(false); m_aborted = false; ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(ui.DoAll->isChecked()); settings->setValue("networkQuery/isSupervised", !ui.DoAll->isChecked()); settings->setValue("cb2Bib/AutomaticQuery", ui.AutomaticQuery->isChecked()); if (ui.PDFlist->currentItem() == 0) return; processedFile = ui.PDFlist->currentItem()->text(); if (ui.OpenFiles->isChecked()) c2bUtils::openFile(processedFile, this); QCoreApplication::processEvents(); processDocument(); } void c2bPdfImport::processNext() { processedFile.clear(); if (m_aborted) { m_aborted = false; return; } if (ui.PDFlist->currentItem() == 0) return; if (ui.DoNextAfterSaving->isChecked() || ui.DoAll->isChecked()) processOneFile(); } void c2bPdfImport::processDocument() { document doc(processedFile, document::FirstPage); QString text(doc.toString()); const QString log(doc.logString()); if (!log.isEmpty()) ui.Log->appendPlainText(log); const QString error(doc.errorString()); if (!error.isEmpty()) ui.Log->appendPlainText(tr("[cb2bib] %1.").arg(error)); QListWidgetItem* item = ui.PDFlist->currentItem(); delete item; if (ui.PDFlist->currentItem() == 0) { buttonProcess->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); } else { buttonProcess->setEnabled(true); buttonProcess->setFocus(); } QString metadata; if (settings->value("cb2Bib/AddMetadata").toBool()) metadata = c2b::documentMetadata(processedFile); if (text.isEmpty() && metadata.isEmpty()) { if (ui.DoAll->isChecked()) QTimer::singleShot(500, this, SLOT(processNext())); } else { if (settings->value("cb2Bib/PreAppendMetadata").toString() == "prepend") text = metadata + text; else text = text + '\n' + metadata; ui.Log->appendPlainText(tr("[cb2bib] Conversion completed for file %1.").arg(processedFile)); emit textProcessed(text); emit fileProcessed(processedFile); } } void c2bPdfImport::referenceExtacted(bool status) { if (!ui.DoAll->isChecked()) return; if (ui.PDFlist->currentItem() == 0) { ui.DoAll->setChecked(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); } // Delay request to make sure fileProcessed has finished if (status) QTimer::singleShot(500, this, SIGNAL(saveReferenceRequest())); else QTimer::singleShot(500, this, SLOT(processNext())); } void c2bPdfImport::dropEvent(QDropEvent* qevent) { const QList fns(qevent->mimeData()->urls()); for (int i = 0; i < fns.count(); ++i) { QString scheme(fns.at(i).scheme()); QString fn; if (scheme == "file") fn = fns.at(i).toLocalFile(); if (!fn.isEmpty()) { QListWidgetItem* item(new QListWidgetItem(fn, ui.PDFlist)); if (ui.PDFlist->currentItem() == 0) ui.PDFlist->setCurrentItem(item); } } qevent->acceptProposedAction(); c2bUtils::setWidgetOnTop(this); buttonProcess->setEnabled(true); buttonProcess->setFocus(); showMessage(tr("%1 files selected.").arg(ui.PDFlist->count())); } void c2bPdfImport::dragEnterEvent(QDragEnterEvent* qevent) { if (qevent->mimeData()->hasUrls()) qevent->acceptProposedAction(); } bool c2bPdfImport::event(QEvent* qevent) { if (qevent->type() == QEvent::StatusTip) { ui.statusBar->showMessage(static_cast(qevent)->tip()); return true; } else return QWidget::event(qevent); } void c2bPdfImport::selectFiles() { const QStringList fns(c2bFileDialog::getOpenFilenames(this, QString(), settings->fileName("c2bPdfImport/LastFile"), tr("Portable Document Format (*.pdf);;All (*)"))); if (fns.isEmpty()) return; settings->setFilename("c2bPdfImport/LastFile", fns.last()); for (QStringList::const_iterator i = fns.constBegin(); i != fns.constEnd(); ++i) { QListWidgetItem* item(new QListWidgetItem(*i, ui.PDFlist)); if (ui.PDFlist->currentItem() == 0) ui.PDFlist->setCurrentItem(item); } buttonProcess->setEnabled(true); buttonProcess->setFocus(); showMessage(tr("%1 files selected.").arg(ui.PDFlist->count())); } void c2bPdfImport::show() { c2bUtils::setWidgetOnTop(this); if (buttonProcess->isEnabled()) buttonProcess->setFocus(); else buttonSelectFiles->setFocus(); QDialog::show(); } void c2bPdfImport::showMessage(const QString& ms) { ui.statusBar->showMessage(ms, C2B_MESSAGE_TIME); if (ms.startsWith(tr("Processed as")) || ms.startsWith(tr("Unable"))) ui.Log->appendPlainText("[cb2bib] " + ms); } void c2bPdfImport::loadSettings() { c2bAutomaticQuery = settings->value("cb2Bib/AutomaticQuery").toBool(); ui.AutomaticQuery->setChecked(settings->value("c2bPdfImport/AutomaticQuery").toBool()); ui.DoNextAfterSaving->setChecked(settings->value("c2bPdfImport/DoNextAfterSaving", true).toBool()); ui.OpenFiles->setChecked(settings->value("c2bPdfImport/OpenFiles", false).toBool()); } void c2bPdfImport::saveSettings() { settings->setValue("c2bPdfImport/AutomaticQuery", ui.AutomaticQuery->isChecked()); settings->setValue("c2bPdfImport/DoNextAfterSaving", ui.DoNextAfterSaving->isChecked()); settings->setValue("c2bPdfImport/OpenFiles", ui.OpenFiles->isChecked()); settings->setValue("cb2Bib/AutomaticQuery", c2bAutomaticQuery); settings->setValue("networkQuery/isSupervised", true); } void c2bPdfImport::abort() { m_aborted = true; ui.DoAll->setChecked(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); } void c2bPdfImport::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/pdfimport/"); } cb2bib-2.0.3/src/PaxHeaders/c2bSearchInFiles.cpp0000644000000000000000000000013215104461633016261 xustar0030 mtime=1762812827.462763897 30 atime=1762812828.042759324 30 ctime=1762812827.466763866 cb2bib-2.0.3/src/c2bSearchInFiles.cpp0000644000175000001440000001704215104461633020256 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSearchInFiles.h" #include "c2b.h" #include "c2bUtils.h" #include #include c2bSearchInFiles::c2bSearchInFiles(const QString& file, QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); // Set blank title to columns 0 and 4. Qt 4.4.0 needs it, otherwise it takes column number as default title. // Recheck whenever ui files are generated for 4.4 instead of current 4.2. ui.patternList->headerItem()->setText(0, QApplication::translate("c2bSearchInFiles", "", 0)); ui.patternList->headerItem()->setText(4, QApplication::translate("c2bSearchInFiles", "", 0)); for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) ui.patternList->resizeColumnToContents(i); ui.buttonBox->button(QDialogButtonBox::Abort)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setDefault(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Close)->setDefault(false); _searchB = new QPushButton(tr("Search")); ui.buttonBox->addButton(_searchB, QDialogButtonBox::ActionRole); _searchB->setAutoDefault(true); _searchB->setDefault(true); _searchB->setEnabled(false); _bibtex_file.clear(); _bibtex_dir.clear(); setBibTeXFile(file); connect(_searchB, SIGNAL(clicked()), this, SLOT(searchB_clicked())); connect(ui.allBibFiles, SIGNAL(clicked()), this, SLOT(setBibTeXFile())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); connect(ui.pattern, SIGNAL(patternAvailable(bool)), this, SLOT(updateForm())); connect(ui.patternList, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(on_editPatternB_clicked())); connect(ui.patternList, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(updateForm())); } c2bSearchInFiles::~c2bSearchInFiles() {} void c2bSearchInFiles::updateForm() { ui.addPatternB->setEnabled(ui.pattern->isAvailable()); ui.Boolean->setEnabled((ui.patternList->topLevelItemCount() > 1) || (ui.pattern->isAvailable() && ui.patternList->topLevelItemCount() > 0)); _searchB->setEnabled(!_bibtex_dir.isEmpty() && (ui.pattern->isAvailable() || ui.patternList->topLevelItemCount() > 0)); if (ui.patternList->currentItem()) { ui.deletePatternB->setEnabled(true); ui.editPatternB->setEnabled(true); } else { ui.deletePatternB->setEnabled(false); ui.editPatternB->setEnabled(false); } ui.searchLog->setText(_search_log); } void c2bSearchInFiles::on_addPatternB_clicked() { new QTreeWidgetItem(ui.patternList, ui.pattern->patterns()); for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) ui.patternList->resizeColumnToContents(i); ui.pattern->clear(); updateForm(); } void c2bSearchInFiles::on_deletePatternB_clicked() { QTreeWidgetItem* item = ui.patternList->currentItem(); delete item; item = ui.patternList->currentItem(); if (item) ui.patternList->currentItem()->setSelected(true); updateForm(); } void c2bSearchInFiles::on_editPatternB_clicked() { QDialog editor(this); ui_editor.setupUi(&editor); QTreeWidgetItem* item = ui.patternList->currentItem(); ui_editor.pattern->setPattern(item); connect(ui_editor.pattern, SIGNAL(patternAvailable(bool)), ui_editor.buttonBox->button(QDialogButtonBox::Ok), SLOT(setEnabled(bool))); if (editor.exec() == QDialog::Accepted) { const QStringList pattern(ui_editor.pattern->patterns()); for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) item->setText(i, pattern.at(i)); for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) ui.patternList->resizeColumnToContents(i); } } void c2bSearchInFiles::searchB_clicked() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); _searchB->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(true); ui.searchLog->setText(_search_log); bibSearcher searcher(c2b::bibParser()); connect(ui.buttonBox->button(QDialogButtonBox::Abort), SIGNAL(clicked()), &searcher, SLOT(abort())); searcher.setSearchScope(_bibtex_file, _bibtex_dir, ui.allBibFiles->isChecked(), ui.documentFiles->isChecked()); searcher.setSimplifySource(ui.simplifySource->isChecked()); searcher.setBoolean(ui.Boolean->currentText() == "All"); if (ui.addPatternB->isEnabled()) { const QStringList p(ui.pattern->patterns()); searcher.addPattern(p.at(0) == "NOT", p.at(1) == "Sensitive", p.at(2), p.at(3), p.at(4).at(0), p.at(5)); } QTreeWidgetItemIterator it(ui.patternList); while (*it) { QStringList p; for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) p.append((*it)->text(i)); searcher.addPattern(p.at(0) == "NOT", p.at(1) == "Sensitive", p.at(2), p.at(3), p.at(4).at(0), p.at(5)); ++it; } if (searcher.patternsCount() == 0) return; const unsigned long start_time(clock()); searcher.exec(); const double time(double(clock() - start_time) / double(CLOCKS_PER_SEC)); QString search_status; if (searcher.hitsCount() > 0 || searcher.errorsCount() > 0) { if (searcher.hitsCount() > 0) search_status = tr("Found %1 hits from %2 references (%3s)") .arg(searcher.hitsCount()) .arg(searcher.referencesCount()) .arg(time, 0, 'g', 3); else ui.searchLog->setText(_search_log); QApplication::processEvents(); emit searchDone(_bibtex_dir, &searcher); } else if (searcher.errorsCount() < 0) search_status = tr("Search aborted"); else search_status = tr("No reference found (%1s)").arg(time, 0, 'g', 3); if (!search_status.isEmpty()) { ui.searchLog->setText(search_status); c2b::showMessage(search_status); } ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); _searchB->setEnabled(true); QApplication::restoreOverrideCursor(); } void c2bSearchInFiles::setBibTeXFile(const QString& file) { if (!file.isEmpty()) { QFileInfo fi(file); QDir d(fi.absolutePath()); if (d.exists()) { _bibtex_file = fi.absoluteFilePath(); _bibtex_dir = fi.absolutePath(); } else _bibtex_dir.clear(); } if (_bibtex_dir.isEmpty()) _search_log = tr("No existing file or directory set for searching"); else if (ui.allBibFiles->isChecked()) _search_log = tr("Search in files at %1").arg(_bibtex_dir); else _search_log = tr("Search in file %1").arg(_bibtex_file); updateForm(); } void c2bSearchInFiles::setCurrentText(const QString& text) { if (text.isEmpty()) return; ui.pattern->setText(text); updateForm(); } void c2bSearchInFiles::show() { c2bUtils::setWidgetOnTop(this); ui.pattern->setFocus(); QDialog::show(); } void c2bSearchInFiles::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/bibsearch/"); } cb2bib-2.0.3/src/PaxHeaders/proxyDialog.ui0000644000000000000000000000007415104461330015346 xustar0030 atime=1762812828.046759292 30 ctime=1762812827.254765537 cb2bib-2.0.3/src/proxyDialog.ui0000644000175000001440000000543315104461330017337 0ustar00constansusers00000000000000 proxyDialog 0 0 454 127 Proxy Authentication - cb2Bib 6 Username: Password: QLineEdit::Password Qt::Vertical 0 0 Qt::Horizontal Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() proxyDialog accept() 248 254 157 274 buttonBox rejected() proxyDialog reject() 316 260 286 274 cb2bib-2.0.3/src/PaxHeaders/c2bCiterWidget.ui0000644000000000000000000000007415104461330015646 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.186766073 cb2bib-2.0.3/src/c2bCiterWidget.ui0000644000175000001440000000673515104461330017645 0ustar00constansusers00000000000000 c2bCiterWidget 0 0 901 400 c2bCiter - cb2Bib 3 6 3 6 Qt::Horizontal QFrame::NoFrame QFrame::Plain false QAbstractItemView::SingleSelection QAbstractItemView::SelectRows false Qt::NoPen false false Qt::Horizontal 7 0 0 false :/icons/icons/filter.png :/icons/icons/clipboard.png Qt::Horizontal c2bCiterView QTableView
c2bCiterView.h
cb2bib-2.0.3/src/PaxHeaders/c2bSaveRegExp.ui0000644000000000000000000000007415104461330015445 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.190766041 cb2bib-2.0.3/src/c2bSaveRegExp.ui0000644000175000001440000001102215104461330017425 0ustar00constansusers00000000000000 c2bSaveRegExp 0 0 845 584 Edit and Save Pattern - cb2Bib 6 Name: Choose a name to identify your reference recognition pattern Type: Fields: RegExp: Input Text: QFrame::Raised Qt::Horizontal Pattern Information: QFrame::Raised false true Qt::Horizontal Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Save c2bLineEdit QLineEdit
c2bLineEdit.h
buttonBox accepted() c2bSaveRegExp accept() 620 452 3 394 buttonBox rejected() c2bSaveRegExp reject() 730 444 759 341
cb2bib-2.0.3/src/PaxHeaders/c2bUtils.h0000644000000000000000000000013215104461633014347 xustar0030 mtime=1762812827.630762572 30 atime=1762812828.042759324 30 ctime=1762812827.630762572 cb2bib-2.0.3/src/c2bUtils.h0000644000175000001440000000372115104461633016343 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BUTILS_H #define C2BUTILS_H #include #include "dialog.h" #include #include #include #include /** General cb2Bib Utils: GUI related utilities */ namespace c2bUtils { extern bool openFile(const QString& fn, QWidget* w = 0); inline void displayHelp(const QString& url) { openFile(url); } inline QUrl stringToUrl(const QString& fn) { // Avoid cross-platform pitfalls regarding string to url conversions // Avoid possible issues regarding QUrl and local files not starting with 'file://' if (QFileInfo::exists(fn)) return QUrl::fromLocalFile(fn); else return QUrl(fn, QUrl::TolerantMode); } inline QString fromHtmlString(const QString& str, const bool addMetadata = false) { QTextDocument converter; converter.setHtml(str); if (addMetadata) { const QString md(converter.metaInformation(QTextDocument::DocumentTitle).trimmed()); if (md.isEmpty()) return converter.toPlainText(); else return "Document Title: " + md + "\n\n" + converter.toPlainText(); } else return converter.toPlainText(); } inline void addSeparator(QWidget* w) { // Adds separator to widget w QAction* action = new QAction(reinterpret_cast(w)); action->setSeparator(true); w->addAction(action); } inline void setWidgetOnTop(QWidget* w) { if (w) { if (w->isHidden()) w->show(); if (w->isMinimized()) w->showNormal(); w->raise(); w->activateWindow(); } } } // namespace c2bUtils #endif cb2bib-2.0.3/src/PaxHeaders/c2bNetworkQueryInfo.h0000644000000000000000000000013215104461633016542 xustar0030 mtime=1762812827.586762919 30 atime=1762812828.042759324 30 ctime=1762812827.586762919 cb2bib-2.0.3/src/c2bNetworkQueryInfo.h0000644000175000001440000000224315104461633020534 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BNETWORKQUERYINFO_H #define C2BNETWORKQUERYINFO_H #include #include class QAction; class c2bBibParser; class c2bFileSystemWatcher; /** Manage Network Query Information */ class c2bNetworkQueryInfo : public QObject { Q_OBJECT public: explicit c2bNetworkQueryInfo(QObject* parento = 0); ~c2bNetworkQueryInfo(); QList bookmarkActions(const QString& selection); const QString bookmarksToHtml() const; const QString encodeLink(const QString& ln) const; private: QList BookmarkActionList; QString NetworkFile; QString _current_selection; QStringList BookmarkList; c2bFileSystemWatcher* _fsw; const c2bBibParser* _bpP; private slots: void loadSettings(); void openBookmark(); void parseBookmarks(); }; #endif cb2bib-2.0.3/src/PaxHeaders/src.pro0000644000000000000000000000007415104461330014017 xustar0030 atime=1762812828.046759292 30 ctime=1762812827.254765537 cb2bib-2.0.3/src/src.pro0000644000175000001440000001522015104461330016003 0ustar00constansusers00000000000000FORMS += c2bCiterWidget.ui \ c2bConfigure.ui \ c2bConfigureFR.ui \ c2bEditor.ui \ c2bExportDialog.ui \ c2bLogWidget.ui \ c2bPdfImport.ui \ c2bRLWebSearchSettings.ui \ c2bReferenceList.ui \ c2bSaveRegExp.ui \ c2bSearchInFiles.ui \ c2bSearchInFilesPattern.ui \ c2bSearchInFilesPatternEdit.ui \ c2bShortcutWidget.ui \ cb2Bib.ui \ findDialog.ui \ proxyDialog.ui RESOURCES += cb2bib.qrc HEADERS += bookmarkPlugin.h \ c2b.h \ c2bBibHighlighter.h \ c2bBibMenu.h \ c2bBibParser.h \ c2bBibPreparserLog.h \ c2bCitePatternLineEedit.h \ c2bCiter.h \ c2bCiterExcerptView.h \ c2bCiterHistory.h \ c2bCiterModel.h \ c2bCiterView.h \ c2bCiterWidget.h \ c2bClipEdit.h \ c2bClipboard.h \ c2bCollectionIndex.h \ c2bColors.h \ c2bComboBox.h \ c2bConfigure.h \ c2bConfigureFR.h \ c2bConsole.h \ c2bCoreCiter.h \ c2bEditor.h \ c2bExport.h \ c2bExportDialog.h \ c2bFileDialog.h \ c2bFileSystemWatcher.h \ c2bHighlighter.h \ c2bIdPatternLineEdit.h \ c2bLineEdit.h \ c2bNetworkQuery.h \ c2bNetworkQueryInfo.h \ c2bPdfImport.h \ c2bPostprocess.h \ c2bREHighlighter.h \ c2bRLWebSearchSettings.h \ c2bReferenceList.h \ c2bSaveREHighlighter.h \ c2bSaveRegExp.h \ c2bSearchInFiles.h \ c2bSearchInFilesPattern.h \ c2bSettings.h \ c2bShortcutPushButton.h \ c2bShortcutWidget.h \ c2bTests.h \ c2bTextBrowser.h \ c2bTextEdit.h \ c2bUpdateMetadata.h \ c2bUtils.h \ cb2Bib.h \ dialog.h \ findDialog.h SOURCES += bookmarkPlugin.cpp \ c2b.cpp \ c2bBibHighlighter.cpp \ c2bBibMenu.cpp \ c2bBibParser.cpp \ c2bBibPreparserLog.cpp \ c2bCitePatternLineEedit.cpp \ c2bCiterExcerptView.cpp \ c2bCiterHistory.cpp \ c2bCiterModel.cpp \ c2bCiterView.cpp \ c2bCiterWidget.cpp \ c2bClipEdit.cpp \ c2bClipboard.cpp \ c2bCollectionIndex.cpp \ c2bColors.cpp \ c2bComboBox.cpp \ c2bConfigure.cpp \ c2bConfigureFR.cpp \ c2bConsole.cpp \ c2bCoreCiter.cpp \ c2bEditor.cpp \ c2bExport.cpp \ c2bExportDialog.cpp \ c2bFileDialog.cpp \ c2bFileSystemWatcher.cpp \ c2bHighlighter.cpp \ c2bIdPatternLineEdit.cpp \ c2bLineEdit.cpp \ c2bNetworkQuery.cpp \ c2bNetworkQueryInfo.cpp \ c2bPdfImport.cpp \ c2bPostprocess.cpp \ c2bREHighlighter.cpp \ c2bRLWebSearchSettings.cpp \ c2bReferenceList.cpp \ c2bSaveREHighlighter.cpp \ c2bSaveRegExp.cpp \ c2bSearchInFiles.cpp \ c2bSearchInFilesPattern.cpp \ c2bSettings.cpp \ c2bShortcutPushButton.cpp \ c2bShortcutWidget.cpp \ c2bTests.cpp \ c2bTextBrowser.cpp \ c2bTextEdit.cpp \ c2bUpdateMetadata.cpp \ c2bUtils.cpp \ cb2Bib.cpp \ findDialog.cpp \ main.cpp HEADERS += $$files(qtsingleapplication/src/*.h) SOURCES += $$files(qtsingleapplication/src/*.cpp) TEMPLATE = app QT += widgets network greaterThan(QT_VERSION, 6){ QT += core5compat } CONFIG += c++11 LIBS += -lc2b QMAKE_LIBDIR += . INCLUDEPATH += c2b . qtHaveModule(webkitwidgets){ CONFIG += use_webkit } else { qtHaveModule(webenginewidgets){ CONFIG += use_webengine }} CONFIG(use_webkit) { message(cb2Bib will be linked against QtWebKit library) HEADERS += c2bAnnote.h qweb/kit/c2bWebBrowser.h SOURCES += c2bAnnote.cpp qweb/kit/c2bWebBrowser.cpp INCLUDEPATH += ./qweb/kit DEFINES += C2B_USE_QWEB C2B_USE_QWEBKIT QT += webkitwidgets } CONFIG(use_webengine) { message(cb2Bib will be linked against QtWebEngine library) HEADERS += c2bAnnote.h qweb/engine/c2bWebBrowser.h SOURCES += c2bAnnote.cpp qweb/engine/c2bWebBrowser.cpp INCLUDEPATH += ./qweb/engine DEFINES += C2B_USE_QWEB C2B_USE_QWEBENGINE QT += webenginewidgets } !use_lzsse : !use_lz4 : !use_lzo : !use_qt_zlib { CONFIG += use_lz4 } use_lzsse { message(cb2Bib will be linked against LZSSE library) DEFINES += C2B_USE_LZSSE } use_lz4 { message(cb2Bib will be linked against LZ4 library) LIBS += -llz4 DEFINES += C2B_USE_LZ4 } use_lzo { message(cb2Bib will be linked against LZO library) LIBS += -llzo2 DEFINES += C2B_USE_LZO } use_qt_zlib { message(cb2Bib will be linked against Qt ZLIB library) DEFINES += C2B_USE_ZLIB } use_avx2 { QMAKE_CXXFLAGS += -mavx2 } TARGET = cb2bib DESTDIR = ../bin DEPENDPATH += . POST_TARGETDEPS += libc2b.a QMAKE_CXXFLAGS_DEBUG += -DC2B_DEBUG enable_cbpoll { unix { message(Building with clipboardPoll) QT += x11extras HEADERS += clipboardPoll.h SOURCES += clipboardPoll.cpp DEFINES += C2B_USE_CBPOLL LIBS += -lX11 }} unix { INSTALLS += target script cb2bibdata cb2bibdoc icons desktop target.path = /usr/bin script.files += ../c2bscripts/c2bimport ../c2bscripts/c2bciter script.path = /usr/bin desktop.files += ../c2bscripts/cb2bib.desktop ../c2bscripts/c2bciter.desktop ../c2bscripts/c2bimport.desktop desktop.path = /usr/share/applications icons.files += ../src/icons/cb2bib.png icons.path = /usr/share/pixmaps cb2bibdata.files += ../AUTHORS ../COPYRIGHT ../LICENSE ../CHANGELOG ../data ../c2btools ../testPDFImport cb2bibdata.path = /usr/share/cb2bib cb2bibdoc.files += ../doc/cb2bib_user_manual.pdf cb2bibdoc.path = /usr/share/cb2bib/doc } win32 { RC_FILE = ../cb2bib.rc } macx { ICON = ../src/icons/cb2bib.icns INSTALLS += target script cb2bibdata target.path = /Applications script.files += ../c2bscripts/c2bimport ../c2bscripts/c2bciter script.path = /Applications cb2bibdata.files += ../AUTHORS ../COPYRIGHT ../LICENSE ../CHANGELOG ../data ../doc ../c2btools ../testPDFImport cb2bibdata.path = Contents/Resources QMAKE_BUNDLE_DATA += script cb2bibdata # Set this directory if third party tools, like pdftotext are packaged # INSTALLS += externtools # externtools.files += # externtools.path = c2bExternTools # Set Library data # QMAKE_BUNDLE_DATA += externtools } cb2bib-2.0.3/src/PaxHeaders/c2bShortcutWidget.ui0000644000000000000000000000007415104461330016413 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.190766041 cb2bib-2.0.3/src/c2bShortcutWidget.ui0000644000175000001440000000431015104461330020375 0ustar00constansusers00000000000000 c2bShortcutWidget 0 0 551 29 Form -1 0 0 true false Qt::NoFocus Clear key sequence :/icons/icons/clear_left.png:/icons/icons/clear_left.png Qt::NoFocus Reset key sequence to default value :/icons/icons/edit-undo.png:/icons/icons/edit-undo.png c2bShortcutPushButton QPushButton
c2bShortcutPushButton.h
cb2bib-2.0.3/src/PaxHeaders/c2bSearchInFilesPattern.cpp0000644000000000000000000000013215104461633017617 xustar0030 mtime=1762812827.466763866 30 atime=1762812828.042759324 30 ctime=1762812827.466763866 cb2bib-2.0.3/src/c2bSearchInFilesPattern.cpp0000644000175000001440000000702615104461633021615 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSearchInFilesPattern.h" #include "c2b.h" #include "c2bBibParser.h" #include "c2bSettings.h" #include #include c2bSearchInFilesPattern::c2bSearchInFilesPattern(QWidget* parentw) : QWidget(parentw) { ui.setupUi(this); c2bBibParser* bp = c2b::bibParser(); ui.patternType->addItems(searchPattern::types()); ui.patternType->setCurrentIndex(c2bSettingsP->value("c2bSearchInFiles/PatternTypeIndex", 0).toInt()); ui.patternScope->addItems(bp->sortedBibliographicFields()); ui.yearScope->hide(); ui.inputPattern->setFocus(); connect(ui.clearB, SIGNAL(clicked()), this, SLOT(patternChanged())); connect(ui.inputPattern, SIGNAL(textEdited(QString)), this, SLOT(patternChanged())); connect(ui.patternScope, SIGNAL(currentTextChanged(QString)), this, SLOT(showYearScope(QString))); } c2bSearchInFilesPattern::~c2bSearchInFilesPattern() { c2bSettingsP->setValue("c2bSearchInFiles/PatternTypeIndex", ui.patternType->currentIndex()); } void c2bSearchInFilesPattern::patternChanged() { emit patternAvailable(isAvailable()); } void c2bSearchInFilesPattern::setText(const QString& text) { ui.inputPattern->setText(text); ui.inputPattern->setFocus(); } void c2bSearchInFilesPattern::clear() { ui.inputPattern->clear(); ui.inputPattern->setFocus(); } void c2bSearchInFilesPattern::setPattern(QTreeWidgetItem* pattern) { if (!pattern) return; if (pattern->columnCount() != ITEMS_IN_SEARCH_PATTERN) return; if (pattern->text(0) == "NOT") ui.NOT->setChecked(true); else ui.NOT->setChecked(false); if (pattern->text(1) == "Sensitive") ui.caseSensitive->setChecked(true); else ui.caseSensitive->setChecked(false); ui.patternType->setCurrentIndex(ui.patternType->findText(pattern->text(2))); ui.patternScope->setCurrentIndex(ui.patternScope->findText(pattern->text(3))); if (pattern->text(4) == "=") ui.yearScope->setCurrentIndex(ui.yearScope->findText("Exact")); else if (pattern->text(4) == ">") ui.yearScope->setCurrentIndex(ui.yearScope->findText("Newer")); else ui.yearScope->setCurrentIndex(ui.yearScope->findText("Older")); ui.inputPattern->setText(pattern->text(5)); } const QStringList c2bSearchInFilesPattern::patterns() { QStringList p; if (ui.NOT->isChecked()) p.append("NOT"); else p.append(QString()); if (ui.caseSensitive->isChecked()) p.append("Sensitive"); else p.append("Insensitive"); p.append(ui.patternType->currentText()); p.append(ui.patternScope->currentText()); if (ui.yearScope->isHidden()) p.append(" "); else if (ui.yearScope->currentText() == "Exact") p.append("="); else if (ui.yearScope->currentText() == "Newer") p.append(">"); else if (ui.yearScope->currentText() == "Older") p.append("<"); p.append(ui.inputPattern->text()); return p; } void c2bSearchInFilesPattern::showYearScope(const QString& scope) { if (scope == "year") ui.yearScope->show(); else ui.yearScope->hide(); } void c2bSearchInFilesPattern::setFocus() { ui.inputPattern->setFocus(); } cb2bib-2.0.3/src/PaxHeaders/c2bExport.h0000644000000000000000000000013215104461633014530 xustar0030 mtime=1762812827.570763045 30 atime=1762812828.042759324 30 ctime=1762812827.570763045 cb2bib-2.0.3/src/c2bExport.h0000644000175000001440000000154015104461633016521 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BEXPORT_H #define C2BEXPORT_H #include #include class c2bExport : public QObject { Q_OBJECT public: explicit c2bExport(QObject* parento = 0); ~c2bExport(); struct export_data { QString bibtex_contents; QString bibtex_fn; QString documents_dir; QString export_fn; QStringList bibtex_keys; bool copy_documents; bool relative_dir; }; void exportEntries(const export_data& ed); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bCiterHistory.h0000644000000000000000000000013215104461633015677 xustar0030 mtime=1762812827.530763361 30 atime=1762812828.042759324 30 ctime=1762812827.534763329 cb2bib-2.0.3/src/c2bCiterHistory.h0000644000175000001440000000606615104461633017700 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITERHISTORY_H #define C2BCITERHISTORY_H #include "c2bCiter.h" #include #include class c2bCiterHistory { public: c2bCiterHistory(); inline ~c2bCiterHistory() {} void clear(); void saveCurrentState(const c2bCiter::Format format, const c2bCiter::Filter filter, const int iindex, const int vindex, const QString fstring); inline void saveCurrentState(const c2bCiter::Format format, const c2bCiter::Filter filter, const int iindex, const QModelIndex* const index, const QString fstring) { if (index) saveCurrentState(format, filter, iindex, index->row(), fstring); } inline void saveCurrentItemIndex(const c2bCiter::Format format, const c2bCiter::Filter filter, const int iindex) { if (format == c2bCiter::K) _last_keyword = iindex; else if (filter == c2bCiter::Selected) _last_selection_citation = iindex; else _last_citation = iindex; } inline const c2bCiter::State& lastState() const { return _states[_index[_nstates]]; } inline const c2bCiter::State& previousState() { if (_cstate == -1) _cstate = _nstates; else if (_cstate == 0) _cstate = 1; return _states[_index[--_cstate]]; } inline const c2bCiter::State& nextState() { if (_cstate == _nstates) _cstate = _nstates - 1; return _states[_index[++_cstate]]; } inline int currentState() const { return _cstate; } inline const c2bCiter::State& lastNonKeywordState() const { return _last_nonkeyword_state; } inline const c2bCiter::State& lastNonSelectedState() const { return _last_nonselected_state; } inline void saveCurrentCitationFormat(const c2bCiter::Format format) { _last_citation_format = (format == c2bCiter::R || format == c2bCiter::K) ? _last_citation_format : format; } inline c2bCiter::Format lastCitationFormat() const { return _last_citation_format; } inline int lastCitation() const { return _last_citation; } inline int lastSelectionCitation() const { return _last_selection_citation; } inline int lastKeyword() const { return _last_keyword; } private: c2bCiter::Format _last_citation_format; int _cstate; int _last_citation; int _last_keyword; int _last_selection_citation; int _nstates; c2bCiter::State _last_nonkeyword_state; c2bCiter::State _last_nonselected_state; QVarLengthArray _states; QVarLengthArray _index; }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bColors.h0000644000000000000000000000013215104461633014510 xustar0030 mtime=1762812827.546763234 30 atime=1762812828.042759324 30 ctime=1762812827.550763203 cb2bib-2.0.3/src/c2bColors.h0000644000175000001440000000222415104461633016501 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCOLORS_H #define C2BCOLORS_H #include #include class c2bSettings; /** cb2Bib Color Scheme */ class c2bColors { public: c2bColors(); ~c2bColors(); QColor bib_delimiter_color; QColor bib_reference_field_color; QColor bib_reference_type_color; QColor cb2bib_digit_color; QColor cb2bib_highly_relevant_color; QColor cb2bib_metadata_color; QColor cb2bib_relevant_color; QColor cb2bib_tag_color; QColor cb2bib_unrelevant_color; QColor comment_color; QColor netqinf_command_content_color; QColor netqinf_command_key_color; QHash colorList; void loadColors(c2bSettings* settings); void saveColors(c2bSettings* settings); void updateColor(const QColor& color, const QString& colorName); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bNetworkQueryInfo.cpp0000644000000000000000000000013215104461633017075 xustar0030 mtime=1762812827.438764086 30 atime=1762812828.042759324 30 ctime=1762812827.438764086 cb2bib-2.0.3/src/c2bNetworkQueryInfo.cpp0000644000175000001440000001463315104461633021075 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bNetworkQueryInfo.h" #include "c2b.h" #include "c2bBibParser.h" #include "c2bFileSystemWatcher.h" #include "c2bSettings.h" #include "c2bUtils.h" #include #include #include c2bNetworkQueryInfo::c2bNetworkQueryInfo(QObject* parento) : QObject(parento) { _bpP = c2b::instance()->bibParser(); connect(c2bSettingsP, SIGNAL(newSettings()), this, SLOT(loadSettings())); _fsw = new c2bFileSystemWatcher(this); connect(_fsw, SIGNAL(fileChanged(QString)), this, SLOT(parseBookmarks())); loadSettings(); } c2bNetworkQueryInfo::~c2bNetworkQueryInfo() {} void c2bNetworkQueryInfo::loadSettings() { const QString nfn(c2bSettingsP->fileName("cb2Bib/NetworkFile")); if (nfn == NetworkFile) return; if (QFileInfo::exists(nfn)) { if (!NetworkFile.isEmpty()) _fsw->removePath(NetworkFile); NetworkFile = nfn; _fsw->addPath(NetworkFile); } parseBookmarks(); } void c2bNetworkQueryInfo::parseBookmarks() { BookmarkList.clear(); if (NetworkFile.isEmpty()) return; QFile file(NetworkFile); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QRegExp _bookmark("^bookmark="); QString line; QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); while (!stream.atEnd()) { line = stream.readLine(); if (_bookmark.indexIn(line) >= 0) { c2bUtils::remove(line, _bookmark); if (line.count('|') == 0) c2bUtils::warn(tr("c2bNetworkQueryInfo::parseBookmarks: Syntax error at '%1'").arg(line)); else BookmarkList.append(line); } } file.close(); while (!BookmarkActionList.isEmpty()) delete BookmarkActionList.takeFirst(); const QRegExp rx("<<.+>>"); for (int i = 0; i < BookmarkList.count(); ++i) if (rx.indexIn(BookmarkList.at(i)) >= 0) { const QStringList bm_parts(BookmarkList.at(i).split('|')); if (bm_parts.count() > 1) { QAction* act = new QAction(bm_parts.at(0), this); act->setData(bm_parts.at(1)); act->setStatusTip(QString("%1 [%2]").arg(bm_parts.at(0), bm_parts.at(1))); connect(act, SIGNAL(triggered()), this, SLOT(openBookmark())); BookmarkActionList.append(act); } } } QList c2bNetworkQueryInfo::bookmarkActions(const QString& selection) { _current_selection = selection; for (int i = 0; i < BookmarkActionList.count(); ++i) BookmarkActionList[i]->setVisible(false); const QRegExp rx("<<.+>>"); for (int i = 0; i < BookmarkActionList.count(); ++i) { QString bmd(BookmarkActionList.at(i)->data().toString()); const QStringList& bibliographicFields = _bpP->bibliographicFields(); for (int j = 0; j < bibliographicFields.count(); ++j) { const QString& name = bibliographicFields.at(j); const QString tag(QString("<<%1>>").arg(name)); if (bmd.contains(tag)) if (!_bpP->field(name).isEmpty()) bmd.remove(tag); } if (bmd.contains("<>")) if (!_current_selection.isEmpty()) bmd.remove("<>"); BookmarkActionList[i]->setVisible(rx.indexIn(bmd) == -1); } return BookmarkActionList; } void c2bNetworkQueryInfo::openBookmark() { QAction* act = static_cast(sender()); if (act) { const QString link(act->data().toString()); c2bUtils::openFile(encodeLink(link), c2b::mainWidget()); } } const QString c2bNetworkQueryInfo::encodeLink(const QString& ln) const { QString eln(ln); // See comment in c2bNetworkQueryInfo::bookmarksToHtml eln.replace("[[[", "<<"); eln.replace("]]]", ">>"); const QRegExp rx("<<.+>>"); if (rx.indexIn(eln) >= 0) { const QStringList& bibliographicFields = _bpP->bibliographicFields(); for (int j = 0; j < bibliographicFields.count(); ++j) { const QString& name = bibliographicFields.at(j); const QString tag(QString("<<%1>>").arg(name)); if (eln.contains(tag)) { QString fld(_bpP->field(name)); if (name == "pages") c2bUtils::replace(fld, QRegExp("-.+$"), QString()); else if (name == "author") fld.replace(" and ", " "); else if (name == "title") { fld = fld.remove('{'); fld = fld.remove('}'); } fld = QUrl::toPercentEncoding(fld); eln.replace(tag, fld); if (rx.indexIn(eln) == -1) return eln; } } eln.replace("<>", _current_selection); } return eln; } const QString c2bNetworkQueryInfo::bookmarksToHtml() const { if (BookmarkList.count() == 0) return QString(); QString html("

Bookmarks:

"); for (int i = 0; i < BookmarkList.count(); ++i) { int separator(BookmarkList.at(i).indexOf('|')); if (separator == -1) continue; QString url_name(BookmarkList.at(i).mid(0, separator)); QString url(BookmarkList.at(i).mid(separator + 1)); // Tags <<.>> conflict with the Qt > 4.4.x HTML parser, even being them inside a // literal, quoted string. The substitution below works as a workaround to prevent // cb2Bib tags from clashing with the parser. // See c2bNetworkQueryInfo::encodeLink. A similar issue was resolved in // fromQtXmlString/toQtXmlString. url.replace("<<", "[[["); url.replace(">>", "]]]"); url = "" + url_name + ""; html += url + "
"; } html += "


"; return html; } cb2bib-2.0.3/src/PaxHeaders/c2bBibHighlighter.cpp0000644000000000000000000000013115104461633016454 xustar0030 mtime=1762812827.370764622 29 atime=1762812827.99875967 30 ctime=1762812827.374764591 cb2bib-2.0.3/src/c2bBibHighlighter.cpp0000644000175000001440000000375515104461633020460 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bBibHighlighter.h" #include "c2bSettings.h" #include #include c2bBibHighlighter::c2bBibHighlighter(QTextDocument* doc) : QSyntaxHighlighter(doc) { QPalette p; text_color = p.text().color(); c2bSettings* settings(c2bSettingsP); c = &settings->colors; connect(settings, SIGNAL(newSettings()), this, SLOT(rehighlight())); rx0 = QRegExp("[\\{\\}]+"); rx0.setMinimal(true); rx1 = QRegExp("@\\w+"); rx2 = QRegExp("^\\w+"); rx3 = QRegExp("^%.+$"); } c2bBibHighlighter::~c2bBibHighlighter() {} void c2bBibHighlighter::highlightBlock(const QString& text) { const int len(text.length()); setFormat(0, len - 1, text_color); int pos(0); while (pos >= 0) { pos = rx0.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx0.matchedLength(), c->bib_delimiter_color); pos += rx0.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx1.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx1.matchedLength(), c->bib_reference_type_color); pos += rx1.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx2.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx2.matchedLength(), c->bib_reference_field_color); pos += rx2.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx3.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx3.matchedLength(), c->comment_color); pos += rx3.matchedLength(); } } } cb2bib-2.0.3/src/PaxHeaders/c2bCoreCiter.cpp0000644000000000000000000000013115104461633015460 xustar0030 mtime=1762812827.414764275 29 atime=1762812827.99875967 30 ctime=1762812827.418764243 cb2bib-2.0.3/src/c2bCoreCiter.cpp0000644000175000001440000000757515104461633017470 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * The LyX pipe procedure in citeToLyXPipe has been adapted from Tellico * (Tellico (C) 2003-2005 by Robby Stephenson) ***************************************************************************/ #include "c2bCoreCiter.h" #include "c2bFileDialog.h" #include #include #include #include #include // fifo to lyx #include #include c2bCoreCiter::c2bCoreCiter(QWidget* parentw) : QObject(parentw) { _parentWP = parentw; _settingsP = settings::instance(); _settingsP->setDefaultValue("c2bCoreCiter/LyXPipe", QDir::cleanPath(QDir::homePath() + QDir::separator() + ".lyx/lyxpipe.in")); _lyxpipe = _settingsP->value("c2bCoreCiter/LyXPipe").toString(); _citeids = QRegExp("^([^<]*)<<([^\\|]*)\\|citeids\\|([^>]*)>>(.*)$"); } c2bCoreCiter::~c2bCoreCiter() {} void c2bCoreCiter::cite(const QStringList& keys) { if (keys.count() == 0) return; _command = _settingsP->value("cb2Bib/CiteCommandPattern").toString(); const QByteArray pipe(QFile::encodeName(_lyxpipe)); if (QFile::exists(pipe) && _command == C2B_CITE_COMMAND_PATTERN) _cite_to_lyx_pipe(keys); else _cite_to_clipboard(keys); } void c2bCoreCiter::_cite_to_clipboard(const QStringList& keys) const { QString c; if (_command.isEmpty() || _command == C2B_CITE_COMMAND_PATTERN) c = QLatin1String("\\cite{") + keys.join(QLatin1String(", ")).trimmed() + QLatin1Char('}'); else if (_command.contains(QLatin1String("<>"))) for (int i = 0; i < keys.count(); ++i) c += QString(_command).replace(QLatin1String("<>"), keys.at(i)) + QLatin1Char(' '); else if (_citeids.indexIn(_command) >= 0) { c = _citeids.cap(2) + keys.at(0); // Note keys.count() > 0 for (int i = 1; i < keys.count(); ++i) c += _citeids.cap(3) + QLatin1Char(' ') + _citeids.cap(2) + keys.at(i); c = _citeids.cap(1) + c.trimmed() + _citeids.cap(4); } if (c.isEmpty()) { QMessageBox::warning(_parentWP, tr("Warning - cb2Bib"), tr("Cite Command Pattern is misspecified"), QMessageBox::Ok); return; } QClipboard* cb(QApplication::clipboard()); cb->setText(c.trimmed(), QClipboard::Clipboard); } void c2bCoreCiter::_cite_to_lyx_pipe(const QStringList& keys) const { // This procedure was adapted from Tellico // Tellico (C) 2003-2005 by Robby Stephenson const QByteArray pipe(QFile::encodeName(_lyxpipe)); const QString errorStr(tr("Unable to write to the server pipe at '%1'.").arg(QString(pipe))); if (!QFile::exists(pipe)) { QMessageBox::warning(_parentWP, tr("Warning - cb2Bib"), errorStr, QMessageBox::Ok); return; } int pipeFd = ::open(pipe, O_WRONLY); QFile file(QString::fromUtf8(pipe)); if (file.open(pipeFd, QIODevice::WriteOnly)) { // pybliographer uses comma-space, and pyblink expects the space there const QString c(keys.join(", ").trimmed()); QTextStream st(&file); st << QString::fromLatin1("LYXCMD:cb2bib:citation-insert:%1\n").arg(c).toLatin1(); file.flush(); file.close(); } else QMessageBox::warning(_parentWP, tr("Warning - cb2Bib"), errorStr, QMessageBox::Ok); ::close(pipeFd); } void c2bCoreCiter::setLyXPipe() { const QString new_pn(c2bFileDialog::getSystemFilename(_parentWP, "Select LyX pipe", _lyxpipe, "All (*)")); if (!new_pn.isEmpty()) { _lyxpipe = new_pn; _settingsP->setValue("c2bCoreCiter/LyXPipe", _lyxpipe); } } cb2bib-2.0.3/src/PaxHeaders/c2bEditor.cpp0000644000000000000000000000013115104461633015027 xustar0030 mtime=1762812827.418764243 29 atime=1762812827.99875967 30 ctime=1762812827.418764243 cb2bib-2.0.3/src/c2bEditor.cpp0000644000175000001440000007702615104461633017035 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bEditor.h" #include "bookmarkPlugin.h" #include "c2b.h" #include "c2bBibHighlighter.h" #include "c2bBibParser.h" #include "c2bExportDialog.h" #include "c2bFileDialog.h" #include "c2bPostprocess.h" #include "c2bREHighlighter.h" #include "c2bReferenceList.h" #include "c2bSettings.h" #include "c2bTextBrowser.h" #include "c2bTextEdit.h" #include "c2bUpdateMetadata.h" #include "c2bUtils.h" #include "findDialog.h" #include #include #include #include #include #include #include #include #include #include /** \page bibeditor Embedded File Editor

GET_TABLE_OF_CONTENTS

cb2Bib contains a practical editor suitable to manipulate the files related to a cb2Bib session. Abbreviations, bookmarks, regular expressions, and BibTeX are readily available. On BibTeX mode, the editor contains a Reference List to ease file navigation, and to extend the editor functionality. The BibTeX editor can optionally be turned to a reference browser. \section bookmarks Bookmarks Bookmarks pointing to local or network files are available at the editor menu bar. They provide a fast access to external resources. Concretely, they are suitable for retrieving working documents, writing notes, or for accessing internet databases. The editor bookmark functionality had been introduced in the cb2Bib version 0.9.3. Currently, bookmarks are set manually in the netqinf.txt file, see \ref c2bconf_files. Each bookmark is an entry line with the form \verbatim editorbookmark=Description|Target file name|Shortcut|Icon file name \endverbatim having four fields, description, target file name, shortcut, and icon file name, separated with three (required) vertical bars |. \verbatim # Bookmark Examples: # - A URL: editorbookmark=URL Description|https://www.molspaces.com/cb2bib/doc/bibeditor/|| # - A separator, which is a blank line: editorbookmark= # - A TeX document, which will be opened with its default application: editorbookmark=Document Description|/home/doc/chapter1.tex|| \endverbatim \section update_metadata Update Documents Metadata The Update Documents Metadata functionality is available at the Edit and context menus on the BibTeX editor mode. Documents referred in the BibTeX file tags are scanned for metadata. If the BibTeX reference does not coincide with the bibliographic metadata, the document metadata is updated. In this way, metadata is synchronized with the BibTeX file contents. A log window appears, and possible errors are reported. Reported errors are, non-existence of a document file, read-only files, mismatches between BibTeX references and the actual metadata (often due to HTML tags or other illegal characters in BibTeX), or that the writing to the document format is not implemented. Note that this process will update all documents referenced in the BibTeX file. While this process is safe, it implies writing into the documents. Therefore take the usual measures and backup your data. See also \ref metadata_write. \section export_entries Export Selected Entries Selected entries can be exported to a separate BibTeX document. Click on File->Export Entries menu option, and provide an export filename at the Export Dialog. Optionally, export will copy the document files attached to the citation. The copy of documents is similar to the cb2Bib 'rename/copy/move' general procedure. See \ref c2bconf_documents, on Set directory relative to the BibTeX File Directory, for copying options. Documents will not be overwritten: copying of existing documents is skipped. Possible issues are reported in the new document, as LaTeX comments. \section c2beditor_menu Right-Click Menu Functionality \htmlonly
Default Key Action
Ctrl+F Find in text
Toggle word wrapping
Selection to LaTeX
Selection to Unicode
Journals to full name
Journals to alternate full name
Journals to abbreviated name
Journals to alternate abbreviated name
Update documents metadata
Shift+Ins Paste current BibTeX
Alt+P Save and postprocess BibTeX file
\endhtmlonly \section references_menu Reference List Right-Click Menu Functionality \htmlonly
Default Key Action
Alt+C Cite selected entries
Open document file
Browse by DOI
Web search by Author
Web search by Title
Web search settings
Clear entry selection
Refresh list and browser
\endhtmlonly \section browser_menu BibTeX Browser Right-Click Menu Functionality \htmlonly
Default Key Action
Alt+C Cite selected entries
Local search for selected text
Web search for selected text
Web search settings
Clear entry selection
Refresh list and browser
\endhtmlonly \section c2beditor_qt Additional Functionality \htmlonly
Backspace Deletes the character to the left of the cursor
Delete Deletes the character to the right of the cursor
Ctrl+A Selects all text
Ctrl+C Copy the selected text to the clipboard
Ctrl+Insert Copy the selected text to the clipboard
Ctrl+K Deletes to the end of the line
Ctrl+V Pastes the clipboard text into text edit
Shift+Insert Pastes the clipboard text into text edit
Ctrl+X Deletes the selected text and copies it to the clipboard
Shift+Delete Deletes the selected text and copies it to the clipboard
Ctrl+Z Undoes the last operation
Ctrl+Y Redoes the last operation
LeftArrow Moves the cursor one character to the left
Ctrl+LeftArrow Moves the cursor one word to the left
RightArrow Moves the cursor one character to the right
Ctrl+RightArrow Moves the cursor one word to the right
UpArrow Moves the cursor one line up
Ctrl+UpArrow Moves the cursor one word up
DownArrow Moves the cursor one line down
Ctrl+Down Arrow Moves the cursor one word down
PageUp Moves the cursor one page up
PageDown Moves the cursor one page down
Home Moves the cursor to the beginning of the line
Ctrl+Home Moves the cursor to the beginning of the text
End Moves the cursor to the end of the line
Ctrl+End Moves the cursor to the end of the text
Alt+Wheel Scrolls the page horizontally
Ctrl+Wheel Zooms the text
\endhtmlonly */ c2bEditor::c2bEditor(const QString& file, const Mode mode, QWidget* main, QWidget* parentw) : QMainWindow(parentw) { _editor_fn = QDir::toNativeSeparators(file); _editor_mode = mode; _c2b_mainP = main; _searcherP = 0; initEditor(); } c2bEditor::c2bEditor(const QString& file, bibSearcher* searcher, QWidget* main, QWidget* parentw) : QMainWindow(parentw) { _editor_fn = QDir::toNativeSeparators(file); _editor_mode = BibTeX; _c2b_mainP = main; _searcherP = searcher; initEditor(); } c2bEditor::~c2bEditor() { if (_browserP) _settingsP->setValue("c2bEditor/BrowserFontPointSize", _browserP->font().pointSize()); } void c2bEditor::initEditor() { ui.setupUi(this); setAttribute(Qt::WA_DeleteOnClose); _settingsP = c2bSettingsP; if (_editor_mode == BibTeX) _bpP = c2b::bibParser(); else _bpP = 0; _browserP = 0; _editorP = new c2bTextEdit(this); _referencesP = 0; _stackedWidgetP = new QStackedWidget(this); setCentralWidget(_stackedWidgetP); _stackedWidgetP->addWidget(_editorP); _textFinderP = new findDialog(this); _lineLabelP = new QLabel(); _lineLabelP->setText(tr(" Line: 1 Col: 1 ")); _lineLabelP->setAlignment(Qt::AlignVCenter | Qt::AlignRight); _lineLabelP->setFrameStyle(QFrame::NoFrame); _lineLabelP->setLineWidth(1); _lineLabelP->setFixedHeight(_lineLabelP->fontMetrics().height()); statusBar()->addWidget(_lineLabelP, 1); connect(_editorP, SIGNAL(cursorPositionChanged()), this, SLOT(cursorPositionChanged())); _overwriteLabelP = new QLabel(); _overwriteLabelP->setText(tr(" INS ")); _overwriteLabelP->setAlignment(Qt::AlignVCenter | Qt::AlignRight); _overwriteLabelP->setFrameStyle(QFrame::NoFrame); _overwriteLabelP->setLineWidth(1); _overwriteLabelP->setFixedHeight(_overwriteLabelP->fontMetrics().height()); statusBar()->addWidget(_overwriteLabelP); _editorP->setOverwriteMode(false); connect(_editorP, SIGNAL(overwriteModeChanged()), this, SLOT(overwriteModeChanged())); connect(ui.fileCloseAction, SIGNAL(triggered()), this, SLOT(close())); connect(ui.fileExecAction, SIGNAL(triggered()), this, SLOT(saveAndExecute())); connect(ui.fileExitAction, SIGNAL(triggered()), c2b::instance(), SLOT(exitRequested())); connect(ui.fileSaveAction, SIGNAL(triggered()), this, SLOT(fileSave())); connect(ui.fileSaveAsAction, SIGNAL(triggered()), this, SLOT(fileSaveAs())); connect(ui.helpEditorAction, SIGNAL(triggered()), this, SLOT(helpEditor())); connect(ui.helpCb2BibAction, SIGNAL(triggered()), this, SLOT(helpCb2Bib())); connect(ui.viewCb2BibAction, SIGNAL(triggered()), this, SLOT(viewCb2Bib())); // Standard shortcuts ui.fileCloseAction->setShortcut(QKeySequence(QKeySequence::Close)); ui.fileOpenAction->setShortcut(QKeySequence(QKeySequence::Open)); ui.fileSaveAction->setShortcut(QKeySequence(QKeySequence::Save)); ui.helpEditorAction->setShortcut(QKeySequence(QKeySequence::HelpContents)); ui.viewZoomInAction->setShortcut(QKeySequence(QKeySequence::ZoomIn)); ui.viewZoomOutAction->setShortcut(QKeySequence(QKeySequence::ZoomOut)); ui.fileExitAction->setShortcut(QKeySequence(QKeySequence::Quit)); ui.fileSaveAsAction->setShortcut(QKeySequence(QKeySequence::SaveAs)); // Editor Settings resize(_settingsP->value("c2bEditor/size", size()).toSize()); ui.menuView->addAction(ui.toolBar->toggleViewAction()); ui.setLyXPipeAction->setVisible(false); _editorP->setFont(_settingsP->c2bMonoFont); connect(ui.settingsCb2BibAction, SIGNAL(triggered()), c2b::instance(), SLOT(configure())); // Bookmarks bookmarkPlugin* bookmarks = new bookmarkPlugin(this); menuBar()->insertMenu(ui.menuSettings->menuAction(), bookmarks); connect(bookmarks, SIGNAL(openFile(QString)), this, SIGNAL(openFile(QString))); connect(bookmarks, SIGNAL(editBookmarks()), this, SIGNAL(openBookmarks())); load(); setEditorMode(); importActions(); connect(_editorP->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(isModified(int,int,int))); connect(c2b::instance(), SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); } void c2bEditor::setEditorMode() { if (_editor_mode == RegExp) { _shP = new c2bREHighlighter(_editorP->document()); ui.fileExecAction->setText(tr("Restart Recognition")); ui.fileExecAction->setStatusTip(tr("Restart recognition")); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExecAction); connect(this, SIGNAL(execute()), this, SIGNAL(restartEngine())); ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); setViewMode(true); } else if (_editor_mode == NetQInfo) { _shP = new c2bREHighlighter(_editorP->document()); ui.fileExecAction->setText(tr("Restart Network Query")); ui.fileExecAction->setStatusTip(tr("Restart network query")); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExecAction); connect(this, SIGNAL(execute()), this, SIGNAL(restartQuery())); ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); setViewMode(true); } else if (_editor_mode == JAbbrev) { ui.fileExecAction->setVisible(false); ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); setViewMode(true); } else if (_editor_mode == Annote) { _shP = new c2bBibHighlighter(_editorP->document()); ui.fileExecAction->setText(tr("View Note in External Browser")); ui.fileExecAction->setStatusTip(tr("View Note in External Browser")); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExecAction); _editorP->setLaTeXActions(); connect(this, SIGNAL(execute()), this, SLOT(htmlView())); ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); setViewMode(true); } else if (_editor_mode == BibTeX) { // Editor _shP = new c2bBibHighlighter(_editorP->document()); ui.fileOpenAction->setVisible(true); connect(ui.fileOpenAction, SIGNAL(triggered()), this, SLOT(fileOpen())); _editorP->setBibTeXActions(); connect(_editorP->pasteCurrentBibTeXAction, SIGNAL(triggered()), this, SLOT(pasteCurrentBibTeX())); connect(_editorP->journalsToAbbreviatedAction, SIGNAL(triggered()), this, SLOT(journalsToAbbreviated())); connect(_editorP->journalsToAlternateAbbreviatedAction, SIGNAL(triggered()), this, SLOT(journalsToAlternateAbbreviated())); connect(_editorP->journalsToFullAction, SIGNAL(triggered()), this, SLOT(journalsToFull())); connect(_editorP->journalsToAlternateFullAction, SIGNAL(triggered()), this, SLOT(journalsToAlternateFull())); connect(_editorP->updateMetadataAction, SIGNAL(triggered()), this, SLOT(updateMetadata())); connect(_c2b_mainP, SIGNAL(addedBibToFile(QString)), this, SLOT(reload(QString))); ui.fileExecAction->setText(tr("Save and Postprocess")); ui.fileExecAction->setStatusTip(tr("Save and postprocess")); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExecAction); connect(this, SIGNAL(execute()), this, SLOT(postProcess())); // Browser _browserP = new c2bTextBrowser(this); _browserP->setFont( QFont(QFont().family(), _settingsP->value("c2bEditor/BrowserFontPointSize", QFont().pointSize()).toInt())); _stackedWidgetP->addWidget(_browserP); ui.viewEditorModeAction->setVisible(true); _settingsP->setKeysequence("Shortcuts/Editor/", ui.viewEditorModeAction); connect(ui.viewEditorModeAction, SIGNAL(triggered(bool)), this, SLOT(setViewMode(bool))); connect(ui.viewZoomInAction, SIGNAL(triggered()), _browserP, SLOT(zoomIn())); connect(ui.viewZoomOutAction, SIGNAL(triggered()), _browserP, SLOT(zoomOut())); // Reference List createReferenceList(); _referencesP->loadList(_editorP->toPlainText(), _searcherP); bool edit_mode(false); if (_searcherP) { edit_mode = (_searcherP->hitsCount() == 0 && _searcherP->errorsCount() > 0); connect(_referencesP, SIGNAL(openFile(QString)), this, SIGNAL(openFile(QString))); } if (!_edit_reference_at_position.isEmpty()) { edit_mode = true; _referencesP->goToReference(_edit_reference_at_position.toInt()); } ui.viewEditorModeAction->setChecked(edit_mode); setViewMode(edit_mode); ui.setLyXPipeAction->setVisible(true); _settingsP->setKeysequence("Shortcuts/Editor/", ui.setLyXPipeAction); // Export entries ui.fileExportEntriesAction->setVisible(true); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExportEntriesAction); connect(ui.fileExportEntriesAction, SIGNAL(triggered()), this, SLOT(exportEntries())); connect(_referencesP, SIGNAL(hasSelectedItems(bool)), ui.fileExportEntriesAction, SLOT(setEnabled(bool))); } else c2bUtils::debug(tr("c2bEditor::setEditorMode: '%1' invalid Editor Mode.").arg(_editor_mode)); } void c2bEditor::importActions() { QList acts = _textFinderP->actions(); for (int i = 0; i < acts.count(); ++i) ui.menuEdit->addAction(acts.at(i)); acts = _editorP->actions(); for (int i = 0; i < acts.count(); ++i) ui.menuEdit->addAction(acts.at(i)); if (_browserP) { ui.menuEdit->addSeparator(); acts = _browserP->actions(); for (int i = 0; i < acts.count(); ++i) ui.menuEdit->addAction(acts.at(i)); } } void c2bEditor::createReferenceList() { _dockWidgetP = new QDockWidget(this); _dockWidgetP->setObjectName("dwRList"); _referencesP = new c2bReferenceList(_editorP, _browserP, _dockWidgetP); addDockWidget(Qt::BottomDockWidgetArea, _dockWidgetP); _dockWidgetP->setWidget(_referencesP); _dockWidgetP->setWindowTitle("Reference List"); QByteArray state = _settingsP->value("c2bEditor/state").toByteArray(); restoreState(state); ui.menuView->addAction(_dockWidgetP->toggleViewAction()); // State contains toolBar info, too, but it can be changed from non BibTeX editors // State can not be used for non BibTeX editors. They don't have referenceList. ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); connect(ui.setLyXPipeAction, SIGNAL(triggered()), _referencesP, SLOT(setLyXPipe())); } void c2bEditor::closeEvent(QCloseEvent* qevent) { if (closeEditor()) qevent->accept(); else qevent->ignore(); } bool c2bEditor::closeEditor() { // Use _is_modified_by_user to check if closing is possible. This way, // no question is asked to exit browsing of search results. Do not use // here ui.fileSaveAction->isEnabled(). if (_is_modified_by_user) { const int button(QMessageBox::information( this, tr("Information - cb2Bib"), tr("The document has been modified.\nDo you want to save the changes?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save)); if (button == QMessageBox::Save) { if (!fileSave()) return false; } else if (button == QMessageBox::Cancel) return false; } _settingsP->setValue("c2bEditor/size", size()); if (_editor_mode == BibTeX) _settingsP->setValue("c2bEditor/state", saveState()); _settingsP->setValue("c2bEditor/ToolBar", !ui.toolBar->isHidden()); return true; } void c2bEditor::isModified(int position, int charsRemoved, int charsAdded) { if (position == 0 && charsAdded == charsRemoved) return; ui.fileSaveAction->setEnabled(true); setWindowModified(true); _is_modified_by_user = true; } void c2bEditor::fileOpen() { if (_editor_mode == BibTeX) { const QString filename( c2bFileDialog::getOpenFilename(this, "Select a BibTeX filename", _editor_fn, "BibTeX (*.bib)")); if (!filename.isEmpty()) emit openFile(filename); } } bool c2bEditor::fileSave() { if (_editor_fn.contains("unnamed_")) return fileSaveAs(); QFile file(_editor_fn); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning( this, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for writing.\nError: '%2'.").arg(_editor_fn, file.errorString()), QMessageBox::Ok); return false; } QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); stream << _editorP->toPlainText(); ui.fileSaveAction->setEnabled(false); _editorP->document()->setModified(false); setWindowModified(false); _is_modified_by_user = false; return true; } bool c2bEditor::fileSaveAs() { QString filename; if (_editor_mode == BibTeX) filename = c2bFileDialog::getSaveFilename(this, QString(), _editor_fn, "BibTeX (*.bib);;All (*)"); else if (_editor_mode == Annote) filename = c2bFileDialog::getSaveFilename(this, QString(), _editor_fn, "LaTeX (*.tex);;All (*)"); else filename = c2bFileDialog::getSaveFilename(this, QString(), _editor_fn, "Text (*.txt);;All (*)"); if (filename.isEmpty() || filename.contains("unnamed_")) return false; const QString old_name(_editor_fn); _editor_fn = filename; setWindowTitle(tr("%1[*] - cb2Bib").arg(_editor_fn)); _editorP->setEditorFilename(_editor_fn); emit editFileRenamed(old_name, _editor_fn); return fileSave(); } void c2bEditor::saveAndExecute() { // Use ui.fileSaveAction->isEnabled() instead of _is_modified_by_user. // If browsing search results there is no file on disk. if (ui.fileSaveAction->isEnabled()) { if (fileSave()) emit execute(); } else emit execute(); } void c2bEditor::load() { bool modified_flag(false); QFileInfo fi(_editor_fn); if (_editor_fn.isEmpty() || fi.isDir()) // Set an appropriate working name { QStringList unamedList; foreach (QWidget* widget, QApplication::topLevelWidgets()) { if (widget->inherits("c2bEditor")) unamedList.append(widget->objectName()); } int i(1); while (unamedList.indexOf(QRegularExpression(QString(".*unnamed_%1.bib").arg(i))) > -1) ++i; _editor_fn = QDir::toNativeSeparators(QDir::cleanPath(_editor_fn + QDir::separator() + QString("unnamed_%1.bib").arg(i))); if (_searcherP) { _editorP->setPlainText(_searcherP->logString() + _searcherP->hitsString()); modified_flag = true; } } else { QRegExp edit_ref_id(":(\\d+)$"); if (edit_ref_id.indexIn(_editor_fn) > -1) { _edit_reference_at_position = edit_ref_id.cap(1); c2bUtils::remove(_editor_fn, edit_ref_id); } QFile file(_editor_fn); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::warning( _c2b_mainP, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for reading.\nError: '%2'.").arg(_editor_fn, file.errorString()), QMessageBox::Ok); } else { QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); _editorP->setPlainText(stream.readAll()); } } setWindowTitle(tr("%1[*] - cb2Bib").arg(_editor_fn)); _editorP->setEditorFilename(_editor_fn); ui.fileSaveAction->setEnabled(modified_flag); _editorP->document()->setModified(modified_flag); setWindowModified(modified_flag); _is_modified_by_user = false; } void c2bEditor::reload(const QString& fn) { // This function must be called ONLY in BibTeX mode // Pointers are undefined otherwise if (_editor_mode != BibTeX || _editor_fn != fn) return; if (ui.fileSaveAction->isEnabled()) { QMessageBox msgBox(this); msgBox.addButton(tr("Discard and Reload"), QMessageBox::AcceptRole); msgBox.addButton(QMessageBox::Cancel); msgBox.setDefaultButton(msgBox.addButton(QMessageBox::Save)); msgBox.setWindowTitle(tr("Information - cb2Bib")); msgBox.setText(tr("The document has been modified on disk when the reference was inserted. " "No automatic reloading is done because it also has local changes. " "To preserve local changes press Save and insert again the last reference.\n\n" "Do you want to save the changes?")); msgBox.setIcon(QMessageBox::Information); const int button(msgBox.exec()); if (button == QMessageBox::Save) { fileSave(); _referencesP->refreshList(); return; } else if (button == QMessageBox::Cancel) return; } load(); _referencesP->refreshList(); QTextCursor cur = _editorP->textCursor(); cur.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); _editorP->setTextCursor(cur); _editorP->ensureCursorVisible(); } void c2bEditor::exportEntries() { const QStringList keys(_referencesP->selectedKeys()); if (keys.count() == 0) return; c2bExportDialog ed(_editor_fn, _editorP->toPlainText(), keys, this); if (ed.exec()) emit openFile(ed.exportFilename()); } void c2bEditor::pasteCurrentBibTeX() { _editorP->insertPlainText(_bpP->toBibTeX(false)); } void c2bEditor::journalsToFull() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString text(_bpP->setJournalsToFull(_editorP->toPlainText(), false)); _editorP->updatePlainText(text); QApplication::restoreOverrideCursor(); } void c2bEditor::journalsToAlternateFull() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString text(_bpP->setJournalsToFull(_editorP->toPlainText(), true)); _editorP->updatePlainText(text); QApplication::restoreOverrideCursor(); } void c2bEditor::journalsToAbbreviated() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString text(_bpP->setJournalsToAbbreviated(_editorP->toPlainText(), false)); _editorP->updatePlainText(text); QApplication::restoreOverrideCursor(); } void c2bEditor::journalsToAlternateAbbreviated() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString text(_bpP->setJournalsToAbbreviated(_editorP->toPlainText(), true)); _editorP->updatePlainText(text); QApplication::restoreOverrideCursor(); } void c2bEditor::updateMetadata() { c2bUpdateMetadata um(this); um.update(_editor_fn, _editorP->toPlainText()); } void c2bEditor::htmlView() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString html_filename(_editor_fn + ".html"); texToHtml t2h; t2h.toHtml(c2bUtils::fileToString(_editor_fn), html_filename); c2bUtils::openFile(html_filename); QApplication::restoreOverrideCursor(); } void c2bEditor::postProcess() { c2bPostprocess* ppBib = new c2bPostprocess(_editor_fn, this); ppBib->show(); } void c2bEditor::helpEditor() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/bibeditor/"); } void c2bEditor::helpCb2Bib() { const QString umanual(QDir::cleanPath(_settingsP->applicationDataDir() + "/doc/cb2bib_user_manual.pdf")); if (QFileInfo::exists(umanual)) c2bUtils::displayHelp(umanual); else c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/contents/"); } void c2bEditor::viewCb2Bib() { c2bUtils::setWidgetOnTop(_c2b_mainP); } void c2bEditor::setViewMode(bool edit_mode) { QList acts; if (edit_mode) { _textFinderP->setEditor(_editorP); if (_browserP) { acts = _browserP->actions(); for (int i = 0; i < acts.count(); ++i) acts.at(i)->setVisible(false); ui.viewZoomInAction->setVisible(false); ui.viewZoomOutAction->setVisible(false); } acts = _editorP->actions(); for (int i = 0; i < acts.count(); ++i) acts.at(i)->setVisible(true); _overwriteLabelP->setVisible(true); _lineLabelP->setVisible(true); _stackedWidgetP->setCurrentWidget(_editorP); } else { // Browser defined _textFinderP->setEditor(_browserP); acts = _editorP->actions(); for (int i = 0; i < acts.count(); ++i) acts.at(i)->setVisible(false); acts = _browserP->actions(); for (int i = 0; i < acts.count(); ++i) acts.at(i)->setVisible(true); ui.viewZoomInAction->setVisible(true); ui.viewZoomOutAction->setVisible(true); _overwriteLabelP->setVisible(false); _lineLabelP->setVisible(false); _stackedWidgetP->setCurrentWidget(_browserP); } } void c2bEditor::showMessage(const QString& ms) { statusBar()->showMessage(ms, C2B_MESSAGE_TIME); } void c2bEditor::showMessage(const QUrl& link) { statusBar()->showMessage(link.toString(), C2B_MESSAGE_TIME); } void c2bEditor::cursorPositionChanged() { int ln, lp; _editorP->cursorPosition(&ln, &lp); _lineLabelP->setText(tr(" Line: %1 Col: %2 ").arg(ln).arg(lp)); } void c2bEditor::overwriteModeChanged() { if (_editorP->overwriteMode()) _overwriteLabelP->setText(tr(" OVR ")); else _overwriteLabelP->setText(tr(" INS ")); } cb2bib-2.0.3/src/PaxHeaders/cb2bib.qrc0000644000000000000000000000007415104461330014340 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.190766041 cb2bib-2.0.3/src/cb2bib.qrc0000644000175000001440000000532015104461330016324 0ustar00constansusers00000000000000 icons/add.png icons/annote.png icons/application-x-executable.png icons/application-x-html.png icons/application-x-none.png icons/application-x-pdf.png icons/application-x-tex.png icons/application-x-txt.png icons/back_cb2bib_32.png icons/bullet.png icons/cb2bib.ico icons/cb2bib.png icons/cb2bib22.png icons/cb2bib128.png icons/citer_citation.png icons/citer_citation_checked.png icons/clear_left.png icons/clipboard.png icons/configure.png icons/configure_bibtex.png icons/configure_clipboard.png icons/configure_documents.png icons/configure_files.png icons/configure_fonts.png icons/configure_network.png icons/configure_shortcuts.png icons/configure_utilities.png icons/connect_established.png icons/connect_no.png icons/edit-undo.png icons/edit.png icons/edit16.png icons/edit22.png icons/exec22.png icons/exit.png icons/fileclose22.png icons/fileopen22.png icons/filesave22.png icons/filesaveas22.png icons/filesaveas.png icons/filter.png icons/help16.png icons/mimeFolder.png icons/package_network.png icons/pdf.png icons/select.png icons/tex.png icons/viewBackward.png icons/viewForward.png icons/viewHome.png icons/viewReload.png icons/viewZoomIn.png icons/viewZoomOut.png icons/viewbib.png icons/viewcb.png htm/bib_item.html htm/excerpts.html htm/references.css htm/references.html xml/cb2bib.xmp xml/ExifTool_config cb2bib-2.0.3/src/PaxHeaders/c2bCiterView.cpp0000644000000000000000000000013115104461633015502 xustar0030 mtime=1762812827.386764496 29 atime=1762812827.99875967 30 ctime=1762812827.390764464 cb2bib-2.0.3/src/c2bCiterView.cpp0000644000175000001440000002705515104461633017505 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterView.h" #include "c2bCiterExcerptView.h" #include #include #include #include c2bCiterView::c2bCiterView(QWidget* parentw) : QTableView(parentw) { setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setShowGrid(false); setTabKeyNavigation(true); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed); horizontalHeader()->setVisible(false); verticalHeader()->setDefaultSectionSize(fontMetrics().height() + 5); verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); verticalHeader()->setVisible(false); _citationsP = 0; _filter_mode = false; } void c2bCiterView::reloadModel(QAbstractItemModel* citations, const QStringList& bibtex_files, const c2bCiter::State& s) { _filter_mode = false; _filter_string.clear(); if (!citations) return; if (_citationsP != citations) { _citationsP = static_cast(citations); QTableView::setModel(_citationsP); connect(_citationsP, SIGNAL(patternFilterChanged(QString)), this, SLOT(updatePatternFilter(QString))); } QModelIndex i(currentIndex()); _citationsP->reloadCitations(bibtex_files, s, &i); updateViewport(); updateCurrentIndex(i); } c2bCiter::State c2bCiterView::currentState() const { if (_citationsP) return _citationsP->currentState(currentIndex()); else return c2bCiter::State(); } void c2bCiterView::showPreviousState() { QModelIndex i(currentIndex()); _citationsP->restorePreviousState(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::showNextState() { QModelIndex i(currentIndex()); _citationsP->restoreNextState(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::clearCurrentFilter() { QModelIndex i(currentIndex()); _citationsP->clearCurrentFilter(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::setPatternFilter(const QString& pattern) { QModelIndex i(currentIndex()); _filter_string = pattern; _citationsP->setPatternFilter(_filter_string, &i, _citationsP->currentFormat()); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::updatePatternFilter(const QString& pattern) { _filter_string = pattern; emit patternFilterChanged(false, _filter_string); } void c2bCiterView::setRelatedFilter() { if (_citationsP->count() == 0) return; QModelIndex i(currentIndex()); if (_citationsP->currentFormat() == c2bCiter::K) { const QString k(_citationsP->dataKeyword(i)); _citationsP->setKeywordFilter(k, &i); updateViewport(); updateCurrentIndex(i); } else { const QString f(_citationsP->dataFile(i)); if (f.isEmpty()) emit statusMessage(tr("No File contents in this reference.")); else { _citationsP->setRelatedFilter(f, &i); updateViewport(); updateCurrentIndex(i); } } } void c2bCiterView::toggleSelectedFilter() { QModelIndex i(currentIndex()); if (_citationsP->currentFilter() == c2bCiter::Selected) _citationsP->restoreLastNonSelectedState(&i); else _citationsP->setSelectedFilter(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::toggleKeywordView() { if (_citationsP->count() == 0) return; QModelIndex i(currentIndex()); if (_citationsP->currentFormat() == c2bCiter::K) { _citationsP->restoreLastNonKeywordState(&i); updateViewport(); updateCurrentIndex(i); } else { const QString f(_citationsP->dataFile(i)); if (f.isEmpty()) emit statusMessage(tr("No File contents in this reference.")); else { _citationsP->setDocumentFilter(f, &i); updateViewport(); updateCurrentIndex(i); } } } void c2bCiterView::toggleGlossaryView() { QModelIndex i(currentIndex()); if (_citationsP->currentFormat() == c2bCiter::K && (_citationsP->currentFilter() == c2bCiter::None || _citationsP->currentFilter() == c2bCiter::Pattern)) _citationsP->restoreLastNonKeywordState(&i); else _citationsP->setGlossaryView(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::keywordDocumentSearch() { const c2bCiter::KeywordData kd(_citationsP->keywordData(currentIndex())); if (!kd.valid) return; QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString excerpt(bibSearcher::searchDocumentKeyword(kd.bibtexfn, kd.documentfn, kd.keyword)); QApplication::restoreOverrideCursor(); if (excerpt.isEmpty()) { emit statusMessage(tr("Keyword variation '%1' not available in this reference.").arg(kd.keyword)); return; } c2bCiterExcerptView cev(excerpt, this); cev.exec(); } void c2bCiterView::updateCurrentIndex(const QModelIndex& i) { setCurrentIndex(i); scrollTo(i, PositionAtCenter); } void c2bCiterView::updateFormat(const c2bCiter::Format& format) { if (!_citationsP) return; QModelIndex i(currentIndex()); _citationsP->updateFormat(format, &i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::updateViewport() { if (!_citationsP) return; const int nc(_citationsP->columnCount()); if (nc < 1) return; const int vp_w(viewport()->size().width()); if (nc == 1) { setColumnWidth(0, vp_w); return; } QList w = _citationsP->sizeHintForColumns(); #if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) const int char_w(fontMetrics().horizontalAdvance(QLatin1Char('N'))); #else const int char_w(fontMetrics().width(QLatin1Char('N'))); #endif for (int i = 0; i < nc; ++i) w[i] *= char_w; int required_w(w.at(0)); if (required_w >= vp_w) { setColumnWidth(0, vp_w); for (int i = 1; i < nc; ++i) setColumnWidth(i, 0); return; } for (int i = 1; i < nc; ++i) required_w += w.at(i); if (required_w > vp_w) { int available_w(vp_w - w.at(0)); int div[] = { 0, 0, 0, 0 }; while (available_w > 0) for (int i = 1; i < nc; ++i) if (div[i] < w.at(i)) { div[i] += 1; --available_w; } for (int i = 1; i < nc; ++i) w[i] = div[i]; } else w[nc - 1] += vp_w - required_w; for (int i = 0; i < nc; ++i) setColumnWidth(i, w.at(i)); } void c2bCiterView::keyPressEvent(QKeyEvent* qevent) { if (_filter_mode) { switch (qevent->key()) { case Qt::Key_Enter: case Qt::Key_Return: case Qt::Key_Down: case Qt::Key_Escape: case Qt::Key_Up: case Qt::Key_Tab: _filter_mode = false; emit patternFilterChanged(_filter_mode, _filter_string); qevent->accept(); return; } switch (qevent->key()) { case Qt::Key_Backspace: _filter_string.chop(1); break; default: _filter_string += c2bUtils::toAscii(qevent->text(), c2bUtils::Collation); } emit patternFilterChanged(_filter_mode, _filter_string); setPatternFilter(_filter_string); qevent->ignore(); return; } if (qevent->modifiers() & Qt::ShiftModifier) { if (!qevent->text().isEmpty()) QTableView::keyboardSearch(qevent->text()); qevent->accept(); return; } switch (qevent->key()) { // Formats case Qt::Key_A: updateFormat(c2bCiter::AJYT); qevent->accept(); return; case Qt::Key_I: updateFormat(c2bCiter::IT); qevent->accept(); return; case Qt::Key_J: updateFormat(c2bCiter::JYA); qevent->accept(); return; case Qt::Key_T: updateFormat(c2bCiter::T); qevent->accept(); return; case Qt::Key_Y: updateFormat(c2bCiter::YAJT); qevent->accept(); return; // Filters case Qt::Key_Delete: _citationsP->clearSelection(); qevent->accept(); return; case Qt::Key_D: clearCurrentFilter(); qevent->accept(); return; case Qt::Key_F: _filter_mode = true; emit patternFilterChanged(_filter_mode, _filter_string); qevent->accept(); return; case Qt::Key_G: toggleGlossaryView(); qevent->accept(); return; case Qt::Key_K: toggleKeywordView(); qevent->accept(); return; case Qt::Key_R: setRelatedFilter(); qevent->accept(); return; case Qt::Key_S: toggleSelectedFilter(); qevent->accept(); return; // Actions case Qt::Key_Left: showPreviousState(); qevent->accept(); return; case Qt::Key_Right: showNextState(); qevent->accept(); return; case Qt::Key_C: emit citeReferences(); qevent->accept(); return; case Qt::Key_E: emit editReference(); qevent->accept(); return; case Qt::Key_O: emit openFile(); qevent->accept(); return; case Qt::Key_U: emit openUrl(); qevent->accept(); return; case Qt::Key_V: keywordDocumentSearch(); qevent->accept(); return; case Qt::Key_W: emit openAnnote(); qevent->accept(); return; case Qt::Key_Escape: emit hideCiter(); qevent->accept(); return; // Navigation case Qt::Key_Tab: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_Backspace: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_Home: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_Home, Qt::ControlModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_End: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_End, Qt::ControlModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_Space: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_PageDown, Qt::NoModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_Enter: case Qt::Key_Return: { QTableView::keyPressEvent(qevent); QKeyEvent ke(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } default: QTableView::keyPressEvent(qevent); qevent->ignore(); } } void c2bCiterView::resizeEvent(QResizeEvent* qevent) { updateViewport(); QTableView::resizeEvent(qevent); } void c2bCiterView::keyboardSearch(const QString& /* search */) {} cb2bib-2.0.3/src/PaxHeaders/c2bBibParser.h0000644000000000000000000000013215104461633015120 xustar0030 mtime=1762812827.522763424 30 atime=1762812828.042759324 30 ctime=1762812827.522763424 cb2bib-2.0.3/src/c2bBibParser.h0000644000175000001440000000434615104461633017120 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BBIBPARSER_H #define C2BBIBPARSER_H #include "c2bBibPreparserLog.h" #include "c2bLineEdit.h" #include #include #include class QComboBox; /** cb2Bib interface to bibParser This class groups Bib Parser functionality related to GUI @author Pere Constans */ class c2bBibParser : public bibParser { Q_OBJECT public: explicit c2bBibParser(QObject* parento = 0); ~c2bBibParser(); void clearCurrentReference(); void setWidgetMapping(); inline void addField(const QString& name, c2bLineEdit* editor) { _field_editors.insert(name, editor); } inline void addTypes(QComboBox* types) { _type_editor = types; } inline QString field(const QString& name) const { return _field_editors.value(name)->text(); } inline void setField(const QString& name, const QString& value) override { _field_editors[name]->setText(parse(name, value)); } inline void setField(const QString& name, const QString& value, const QString& init_value) { if (name == "addauthors") _field_editors["author"]->setText(parse(name, value, init_value)); else if (name == "addeditors") _field_editors["editor"]->setText(parse(name, value, init_value)); } signals: void bibModified(bool modified); void setDocumentFilename(); private: QComboBox* _type_editor; QHash _field_editors; QPointer _preparser_logP; QWidget* _c2b_mainP; bool _bp_updates_gui; void checkRegExpFile(const QString& fn) override; void currentReferenceUpdated() override; void setCiteID() override; void setReferenceType(const QString& type) override; private slots: void referenceEdited(const QString& value); void setField(); void showLog(const QString& log); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bClipEdit.cpp0000644000000000000000000000013115104461633015276 xustar0030 mtime=1762812827.394764433 29 atime=1762812827.99875967 30 ctime=1762812827.394764433 cb2bib-2.0.3/src/c2bClipEdit.cpp0000644000175000001440000000754315104461633017301 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bClipEdit.h" #include "c2b.h" #include "c2bBibHighlighter.h" #include "c2bHighlighter.h" #include #include #include #include #include c2bClipEdit::c2bClipEdit(const Mode mode, QWidget* parentw) : QPlainTextEdit(parentw) { setFrameShape(QPlainTextEdit::StyledPanel); setFrameShadow(QPlainTextEdit::Raised); viewport()->setAcceptDrops(false); _has_selecting_ended = false; _is_tagged_view = false; if (mode == Editor) { new c2bHighlighter(document()); setReadOnly(false); connect(this, SIGNAL(selectionChanged()), this, SLOT(selectionHasChanged())); } else if (mode == Browser) { new c2bBibHighlighter(document()); setReadOnly(true); } } c2bClipEdit::~c2bClipEdit() {} void c2bClipEdit::setText(const QString& text, const QString& tagged_text) { _text = text; if (tagged_text.isEmpty()) _tagged_text = text; else _tagged_text = tagged_text; if (_is_tagged_view) setPlainText(_tagged_text); else setPlainText(_text); } void c2bClipEdit::insertTag(const QString& tag) { if (_is_tagged_view) insertPlainText(tag); else insertPlainText("[[" + textCursor().selectedText() + "]]"); } void c2bClipEdit::setTaggedViewMode(bool tagged_view) { _is_tagged_view = tagged_view; if (_is_tagged_view) { _text = toPlainText(); setPlainText(_tagged_text); } else { _tagged_text = toPlainText(); setPlainText(_text); } } void c2bClipEdit::updatePlainText(const QString& text) { const int scrollPosition(verticalScrollBar()->value()); setPlainText(text); verticalScrollBar()->setValue(scrollPosition); } void c2bClipEdit::keyPressEvent(QKeyEvent* qevent) { _has_selecting_ended = false; QPlainTextEdit::keyPressEvent(qevent); } void c2bClipEdit::keyReleaseEvent(QKeyEvent* qevent) { QPlainTextEdit::keyReleaseEvent(qevent); if (_has_selecting_ended && qevent->key() == Qt::Key_Shift) if (textCursor().hasSelection()) { _has_selecting_ended = false; emit userEndedSelection(mapToGlobal(cursorRect().topLeft())); } } void c2bClipEdit::mouseReleaseEvent(QMouseEvent* qevent) { QPlainTextEdit::mouseReleaseEvent(qevent); if (qevent->button() == Qt::LeftButton) if (textCursor().hasSelection()) emit userEndedSelection(QCursor::pos()); _has_selecting_ended = false; } void c2bClipEdit::selectionHasChanged() { _has_selecting_ended = textCursor().hasSelection(); } void c2bClipEdit::contextMenuEvent(QContextMenuEvent* qevent) { QMenu* edit_menu = createStandardContextMenu(); edit_menu->setTitle(tr("Edit...")); QList acts = edit_menu->actions(); if (!isReadOnly()) { QAction* act; act = new QAction(tr("Clear"), edit_menu); act->setEnabled(acts.last()->isEnabled()); // As is Select All connect(act, SIGNAL(triggered()), this, SLOT(clear())); edit_menu->insertAction(acts.at(7), act); } QMenu* menu = new QMenu(this); menu->addMenu(edit_menu); menu->addSeparator(); acts = c2b::netqinf()->bookmarkActions(textCursor().selectedText()); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(qevent->globalPos()); delete edit_menu; delete menu; } cb2bib-2.0.3/src/PaxHeaders/c2bPostprocess.h0000644000000000000000000000013215104461633015573 xustar0030 mtime=1762812827.590762887 30 atime=1762812828.042759324 30 ctime=1762812827.594762856 cb2bib-2.0.3/src/c2bPostprocess.h0000644000175000001440000000174215104461633017570 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BPOSTPROCESS_H #define C2BPOSTPROCESS_H #include "ui_c2bLogWidget.h" #include class QProcess; class c2bPostprocess : public QDialog { Q_OBJECT public: explicit c2bPostprocess(const QString& fn, QWidget* parentw = 0); ~c2bPostprocess(); protected: void PProcessFile(); void addToLog(); protected slots: void conversionEnded(); void help(); void openFile(); private: QProcess* _ppBibTeX; QPushButton* _buttonOpenFile; QString PPBIBTEX_ARG; QString PPBIBTEX_BIN; QString PPBIBTEX_EXT; QString _bib; QString _out; Ui::c2bLogWidget ui; }; #endif cb2bib-2.0.3/src/PaxHeaders/bookmarkPlugin.h0000644000000000000000000000013215104461633015644 xustar0030 mtime=1762812827.510763518 30 atime=1762812828.042759324 30 ctime=1762812827.514763487 cb2bib-2.0.3/src/bookmarkPlugin.h0000644000175000001440000000160615104461633017640 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BOOKMARKPLUGIN_H #define BOOKMARKPLUGIN_H #include class c2bFileSystemWatcher; class bookmarkPlugin : public QMenu { Q_OBJECT public: explicit bookmarkPlugin(QWidget* parentw = 0); ~bookmarkPlugin(); signals: void editBookmarks(); void openFile(const QString& fn); private: c2bFileSystemWatcher* _fsw; QString _bookmark_file; QString iconProvider(const QString& fn, const QString& iconFile); private slots: void init(); void openBookmark(); void parseBookmarks(); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bPostprocess.cpp0000644000000000000000000000013215104461633016126 xustar0030 mtime=1762812827.442764054 30 atime=1762812828.042759324 30 ctime=1762812827.442764054 cb2bib-2.0.3/src/c2bPostprocess.cpp0000644000175000001440000001120115104461633020112 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bPostprocess.h" #include "c2b.h" #include "c2bSettings.h" #include "c2bUtils.h" #include #include #include #include c2bPostprocess::c2bPostprocess(const QString& fn, QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("BibTeX Postprocessing Log - cb2Bib")); setAttribute(Qt::WA_DeleteOnClose); _buttonOpenFile = new QPushButton(tr("&Open File")); ui.buttonBox->addButton(_buttonOpenFile, QDialogButtonBox::ActionRole); _buttonOpenFile->setAutoDefault(true); _buttonOpenFile->setDefault(true); _buttonOpenFile->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(false); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); connect(_buttonOpenFile, SIGNAL(clicked()), this, SLOT(openFile())); c2bSettings* settings(c2bSettingsP); resize(settings->value("c2bLogWidget/size", size()).toSize()); PPBIBTEX_BIN = settings->fileName("cb2Bib/PostprocessBibTeXBin"); PPBIBTEX_ARG = settings->value("cb2Bib/PostprocessBibTeXArg").toString(); PPBIBTEX_EXT = settings->value("cb2Bib/PostprocessBibTeXExt").toString(); QFile f(fn); if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::warning(parentw, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for reading.\nError: '%2'.").arg(fn, f.errorString()), QMessageBox::Ok); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); ui.Log->appendPlainText(tr("BibTeX Post Processing: Erroneous termination.\n")); } else { f.close(); _bib = fn; QFileInfo fi(fn); _out = QDir::toNativeSeparators(fi.absolutePath() + '/' + fi.baseName() + '.' + PPBIBTEX_EXT); QString cargs(PPBIBTEX_ARG); cargs.replace("%finput", _bib); cargs.replace("%foutput", _out); ui.Log->appendPlainText(tr("BibTeX Post Processing Command:\n%1 %2\n").arg(PPBIBTEX_BIN, cargs)); PProcessFile(); } } c2bPostprocess::~c2bPostprocess() { c2bSettingsP->setValue("c2bLogWidget/size", size()); } void c2bPostprocess::PProcessFile() { // Postprocessing BibTeX const QStringList arglist(PPBIBTEX_ARG.split(' ', _QT_6_SkipEmptyParts)); QStringList args; for (int i = 0; i < arglist.count(); i++) { if (arglist.at(i) == "%finput") args.append(_bib); else if (arglist.at(i) == "%foutput") args.append(_out); else args.append(arglist.at(i)); } _ppBibTeX = new QProcess(this); connect(_ppBibTeX, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(conversionEnded())); _ppBibTeX->start(PPBIBTEX_BIN, args); if (!_ppBibTeX->waitForStarted()) { ui.Log->appendPlainText(tr("Failed to call %1.").arg(PPBIBTEX_BIN)); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); delete _ppBibTeX; } } void c2bPostprocess::conversionEnded() { addToLog(); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); if (QFileInfo(_out).isReadable()) { _buttonOpenFile->setEnabled(true); _buttonOpenFile->setFocus(); } else { ui.buttonBox->button(QDialogButtonBox::Close)->setAutoDefault(true); ui.buttonBox->button(QDialogButtonBox::Close)->setDefault(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); } ui.Log->appendPlainText(tr("\n\nBibTeX Post Processing Command Ended.")); delete _ppBibTeX; } void c2bPostprocess::addToLog() { QString log(QString::fromUtf8(_ppBibTeX->readAllStandardOutput().trimmed())); if (!log.isEmpty()) ui.Log->appendPlainText(log); log = QString::fromUtf8(_ppBibTeX->readAllStandardError().trimmed()); if (!log.isEmpty()) ui.Log->appendPlainText(log); } void c2bPostprocess::openFile() { c2bUtils::openFile(_out, this); close(); } void c2bPostprocess::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/overview/#additional-keyboard-functionality"); } cb2bib-2.0.3/src/PaxHeaders/c2bConfigureFR.h0000644000000000000000000000013215104461633015420 xustar0030 mtime=1762812827.558763139 30 atime=1762812828.042759324 30 ctime=1762812827.562763108 cb2bib-2.0.3/src/c2bConfigureFR.h0000644000175000001440000000142315104461633017411 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCONFIGUREFR_H #define C2BCONFIGUREFR_H #include "ui_c2bConfigureFR.h" #include class QTreeWidgetItem; class c2bConfigureFR : public QDialog { Q_OBJECT public: explicit c2bConfigureFR(QTreeWidgetItem* item, QWidget* parentw = 0); ~c2bConfigureFR(); private: QTreeWidgetItem* itemFindReplace; Ui::c2bConfigureFR ui; protected slots: void accept(); void reject(); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bTextBrowser.cpp0000644000000000000000000000013015104461633016070 xustar0029 mtime=1762812827.47876377 30 atime=1762812828.042759324 29 ctime=1762812827.47876377 cb2bib-2.0.3/src/c2bTextBrowser.cpp0000644000175000001440000000262115104461633020064 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bTextBrowser.h" #include #include #include #include c2bTextBrowser::c2bTextBrowser(QWidget* parentw) : QTextBrowser(parentw) { setFrameShape(QTextBrowser::StyledPanel); setFrameShadow(QTextBrowser::Raised); setOpenLinks(false); } c2bTextBrowser::~c2bTextBrowser() {} #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) void c2bTextBrowser::setSource(const QUrl& /* url */) {} #endif void c2bTextBrowser::contextMenuEvent(QContextMenuEvent* qevent) { QMenu* edit_menu = createStandardContextMenu(); edit_menu->setTitle(tr("Edit...")); QMenu* menu = new QMenu(this); menu->addMenu(edit_menu); QList acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(qevent->globalPos()); delete edit_menu; delete menu; } void c2bTextBrowser::updateHtml(const QString& newHtml) { const int scrollPosition(verticalScrollBar()->value()); setHtml(newHtml); verticalScrollBar()->setValue(scrollPosition); } cb2bib-2.0.3/src/PaxHeaders/c2bCiterExcerptView.h0000644000000000000000000000013215104461633016503 xustar0030 mtime=1762812827.530763361 30 atime=1762812828.042759324 30 ctime=1762812827.530763361 cb2bib-2.0.3/src/c2bCiterExcerptView.h0000644000175000001440000000126015104461633020473 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITEREXCERPTVIEW_H #define C2BCITEREXCERPTVIEW_H #include class c2bTextBrowser; class c2bCiterExcerptView : public QDialog { Q_OBJECT public: explicit c2bCiterExcerptView(const QString& html, QWidget* parentw = 0); ~c2bCiterExcerptView(); private: c2bTextBrowser* _browserP; }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bNetworkQuery.cpp0000644000000000000000000000013215104461633016261 xustar0030 mtime=1762812827.434764117 30 atime=1762812828.042759324 30 ctime=1762812827.438764086 cb2bib-2.0.3/src/c2bNetworkQuery.cpp0000644000175000001440000000320015104461633020245 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bNetworkQuery.h" #include "c2b.h" #include c2bNetworkQuery::c2bNetworkQuery(bibParser* bp, QObject* parento) : networkQuery(bp, parento) {} c2bNetworkQuery::c2bNetworkQuery(bibParser* bp, network* net, QObject* parento) : networkQuery(bp, net, parento) {} c2bNetworkQuery::~c2bNetworkQuery() {} bool c2bNetworkQuery::checkQueryFile(const QString& fn) const { if (fn.isEmpty()) { QMessageBox::information(c2b::mainWidget(), tr("Information - cb2Bib"), tr("No Network Query file has been specified.\n\n" "Note: Network Query files are specified through the cb2Bib Configure dialog."), QMessageBox::Ok); return false; } QFile file(fn); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::warning(c2b::mainWidget(), tr("Warning - cb2Bib"), tr("Unable to open the Network Query file %1 for reading.\nError: '%2'.\n\n" "Note: Network Query files are specified through the cb2Bib Configure dialog.") .arg(fn, file.errorString()), QMessageBox::Ok); return false; } return true; } cb2bib-2.0.3/src/PaxHeaders/c2bTests.cpp0000644000000000000000000000013115104461633014703 xustar0030 mtime=1762812827.474763802 30 atime=1762812828.042759324 29 ctime=1762812827.47876377 cb2bib-2.0.3/src/c2bTests.cpp0000644000175000001440000016031215104461633016700 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #define C2B_CHECK_CAPITALIZATION 0 #define C2B_CHECK_CODE_DECOMPOSITION 0 #define C2B_CHECK_JOURNALS 0 #define C2B_CHECK_PATTERNS 0 #define C2B_CHECK_PDF_AUTHORS 0 #define C2B_CHECK_PDF_CODES 0 #include "c2bTests.h" #include #include #include #include #include #include #include #include #include #include c2bTests::c2bTests() : cout(*(new QTextStream(stdout))), _failed_test_count(0), _test_count(0) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) cout.setEncoding(QStringConverter::Utf8); #else cout.setCodec("UTF-8"); #endif cout << "============" << _QT_6_endl; cout << "cb2Bib tests" << _QT_6_endl; cout << "============" << _QT_6_endl; settings* settingsP = settings::instance(); _bibliographic_dir = QFileInfo(settingsP->fileName("cb2Bib/BibTeXFile")).absolutePath(); QString jfile(settingsP->fileName("cb2Bib/JournalFile")); if (!QFileInfo(jfile).exists()) { jfile = QCoreApplication::applicationDirPath() + "/../data/abbreviations.txt"; settingsP->setFilename("cb2Bib/JournalFile", jfile); cout << "\nUsing journal file " << settingsP->fileName("cb2Bib/JournalFile") << _QT_6_endl; } } c2bTests::~c2bTests() { cout << _QT_6_endl; cout << "=================" << _QT_6_endl; cout << "cb2Bib tests done" << _QT_6_endl; cout << "=================" << _QT_6_endl << _QT_6_endl; delete &cout; } int c2bTests::allTests() { _test_count = 0; _failed_test_count = 0; #if C2B_CHECK_PATTERNS #warning[cb2Bib] C2B_CHECK_PATTERNS should be disabled in production builds heuristic_check_patterns(); return 0; #endif #if C2B_CHECK_JOURNALS #warning[cb2Bib] C2B_CHECK_JOURNALS should be disabled in production builds check_abbreviations_txt(); heuristic_journal(); #else author_parser(); heuristic_pvny(); heuristic_misc(); heuristic_author(); #if C2B_CHECK_PDF_AUTHORS #warning[cb2Bib] C2B_CHECK_PDF_AUTHORS should be disabled in production builds heuristic_check_patterns(); #endif compression_check(); write_information(); #endif cout << _QT_6_endl << _QT_6_endl; cout << "Tests done. Tests: " << _test_count << " Failed: " << _failed_test_count << _QT_6_endl; return _failed_test_count; } int c2bTests::writeInformation() { write_information(); return 0; } void c2bTests::compression_check() { QString test; test += QChar(100); test += QChar(200); test += QChar(8700); test += QChar(56200); test += QChar(57000); test += QChar(10); test += QChar(100); test += QChar(200); test += QChar(8700); test += QChar(56200); test += QChar(57000); test += QChar(10); QByteArray ba = test.toUtf8(); bool passed(c2bUtils::fromUtf8(ba) == QString::fromUtf8(ba)); cout << _QT_6_endl; if (passed) { cout << "-----------------------------------------------------------------" << _QT_6_endl; cout << "Check for c2b utf8: passed" << _QT_6_endl; cout << "-----------------------------------------------------------------" << _QT_6_endl; } else { cout << "-----------------------------------------------------------------" << _QT_6_endl; cout << "WARNING: Check for c2b utf8 FAILED! Please report it as a bug" << _QT_6_endl; cout << "-----------------------------------------------------------------" << _QT_6_endl; ++_failed_test_count; } ++_test_count; test += "-----------------------------------------------------------------"; test += "================================================================="; QByteArray cba(c2bUtils::compressString(test)); QString dcs(c2bUtils::decompressString(cba)); passed = (dcs == test) && (test.toUtf8().length() > cba.length()) && (dcs.utf16()[dcs.size()] == 0); if (passed) { cout << "-----------------------------------------------------------------" << _QT_6_endl; cout << "Check for compression: passed" << _QT_6_endl; cout << "-----------------------------------------------------------------" << _QT_6_endl; } else { cout << "-----------------------------------------------------------------" << _QT_6_endl; cout << "WARNING: Check for compression FAILED! Please report it as a bug" << _QT_6_endl; cout << "-----------------------------------------------------------------" << _QT_6_endl; ++_failed_test_count; } ++_test_count; } void c2bTests::write_information() { cout << _QT_6_endl; cout << "-------------------------" << _QT_6_endl; cout << "Miscellaneous information" << _QT_6_endl; cout << "-------------------------" << _QT_6_endl; cout << _QT_6_endl; cout << "Version: cb2bib " << C2B_VERSION << _QT_6_endl; #if defined(C2B_USE_LZSSE) cout << "Compression: lzsse" << _QT_6_endl; #elif defined(C2B_USE_LZ4) cout << "Compression: lz4" << _QT_6_endl; #elif defined(C2B_USE_LZO) cout << "Compression: lzo2" << _QT_6_endl; #else cout << "Compression: zlib" << _QT_6_endl; #endif #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) cout << "Optimized PCRE: yes" << _QT_6_endl; #else cout << "Optimized PCRE: no" << _QT_6_endl; #endif #ifdef C2B_USE_TXTMATCHER_AVX2 cout << "Optimized txtmatcher: AVX2" << _QT_6_endl; #endif #ifdef C2B_USE_TXTMATCHER_SSE2 cout << "Optimized txtmatcher: SSE2" << _QT_6_endl; #endif #ifdef C2B_USE_TXTMATCHER_SCALAR cout << "Optimized txtmatcher: no" << _QT_6_endl; #endif #ifdef C2B_USE_QWEBKIT cout << "Compiled against QtWebKit: yes" << _QT_6_endl; #else cout << "Compiled against QtWebKit: no" << _QT_6_endl; #endif #ifdef C2B_USE_QWEBENGINE cout << "Compiled against QtWebEngine: yes" << _QT_6_endl; #else cout << "Compiled against QtWebEngine: no" << _QT_6_endl; #endif #ifdef C2B_USE_CBPOLL cout << "Clipboard polling: yes" << _QT_6_endl; #else cout << "Clipboard polling: no" << _QT_6_endl; #endif cout << "Application binary path: " << QCoreApplication::instance()->applicationDirPath() << _QT_6_endl; cout << "Application hardcoded data path: " << C2B_DATA_DIR << _QT_6_endl; #ifdef Q_OS_MACOS QString C2B_DATA_DIR_MAC(C2B_DATA_DIR); if (QDir(C2B_DATA_DIR + "/data/").exists()) C2B_DATA_DIR_MAC = QDir::cleanPath(C2B_DATA_DIR + '/'); else if (QDir(QCoreApplication::instance()->applicationDirPath() + "/../Resources/data/").exists()) C2B_DATA_DIR_MAC = QDir::cleanPath(QCoreApplication::instance()->applicationDirPath() + "/../Resources/"); cout << "Application macosx data path: " << C2B_DATA_DIR_MAC << _QT_6_endl; #endif cout << "\n-------------------------" << _QT_6_endl; cout << "OS:" << _QT_6_endl; cout << "-------------------------" << _QT_6_endl; cout << "Build CPU: " << QSysInfo::buildCpuArchitecture() << _QT_6_endl; cout << "CPU: " << QSysInfo::currentCpuArchitecture() << _QT_6_endl; cout << "Kernel Type: " << QSysInfo::kernelType() << _QT_6_endl; cout << "Kernel Version: " << QSysInfo::kernelVersion() << _QT_6_endl; cout << "Product Type: " << QSysInfo::productType() << _QT_6_endl; cout << "Product Version: " << QSysInfo::productVersion() << '|' << int(QSysInfo::productVersion().toDouble()) << _QT_6_endl; cout << "Name: " << QSysInfo::prettyProductName() << _QT_6_endl; cout << "-------------------------" << _QT_6_endl; cout << "Qt version: " << QLibraryInfo::version().toString() << _QT_6_endl; cout << "Build ABI: " << QSysInfo::buildAbi() << _QT_6_endl; cout << "-------------------------" << _QT_6_endl; cout << _QT_6_endl; } void c2bTests::heuristic_author() { cout << _QT_6_endl; cout << "---------------------------------" << _QT_6_endl; cout << "Test heuristic author recognition" << _QT_6_endl; cout << "---------------------------------" << _QT_6_endl; QFileInfoList flist = QDir(_bibliographic_dir).entryInfoList(QStringList() << "*.bib"); bibParser bp; bibReference reference; QStringList fields; fields.append("author"); fields.append("editor"); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); #if C2B_CHECK_CAPITALIZATION #warning[cb2Bib] C2B_CHECK_CAPITALIZATION should be disabled in production builds for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << _QT_6_endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString author(reference.value("author")); if (author.isEmpty()) continue; bp.clearCurrentReference(); bp.guessFields(author); const QString guess(bp.currentReference().value("author")); const bool passed(guess == author); ++_test_count; if (!passed) ++_failed_test_count; cout << QString("[%1]\t'%2'\n").arg(boolToStr(passed)).arg(author); if (!passed) cout << QString("\t'%1'\n").arg(guess); } } return; #endif #if C2B_CHECK_CODE_DECOMPOSITION #warning[cb2Bib] C2B_CHECK_CODE_DECOMPOSITION should be disabled in production builds for (int u = 1; u < 78790; ++u) { const QChar c(u); if (!c.isLetter()) continue; if (c.decompositionTag() == QChar::NoDecomposition) continue; const QString dc(c.decomposition()); if (dc.length() != 2) continue; if (dc.at(0).isLetter() && dc.at(1).isLetter()) cout << '[' << c << ']' << " u: " << u << " decompose: " << decomposition(c) << " category: " << c.category() << _QT_6_endl; } return; #endif #if C2B_CHECK_PDF_CODES #warning[cb2Bib] C2B_CHECK_PDF_CODES should be disabled in production builds QMap charfreq; long long char_count = 0; for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); fields.append("file"); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << _QT_6_endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString file(reference.value("file")); document d(file, document::Complete); const QString doc(d.toString()); for (int i = 0; i < doc.length(); ++i) { if (doc.at(i).unicode() > 800 && doc.at(i).unicode() < 900) { cout << "At file: " << file << _QT_6_endl; cout << '[' << doc.at(i) << "] " << doc.mid(i - 10, 20) << _QT_6_endl; } charfreq.insert(doc.at(i), 1 + charfreq.value(doc.at(i), 0)); } char_count += doc.length(); } } QList cl = charfreq.keys(); for (int i = 0; i < cl.count(); ++i) cout << '[' << cl.at(i) << ']' << " u: " << cl.at(i).unicode() << " letter: " << cl.at(i).isLetter() << " decompose: " << decomposition(cl.at(i)) << " category: " << cl.at(i).category() << " f: " << charfreq.value(cl.at(i)) << _QT_6_endl; cout << "\nTotal characters: " << char_count << _QT_6_endl; return; #endif #if C2B_CHECK_PDF_AUTHORS cout << _QT_6_endl; cout << "----------------------------------------" << _QT_6_endl; cout << "Test heuristic author recognition on PDF" << _QT_6_endl; cout << "----------------------------------------" << _QT_6_endl; cout << _QT_6_endl; cout << "Checking files at: " << _bibliographic_dir << _QT_6_endl; const QStringList excluded(c2bUtils::fileToString(_bibliographic_dir + "/c2b_test_exclude.txt") .split(QRegularExpression("[\\n\\r]"), _QT_6_SkipEmptyParts)); QHash doc_cache; const QString doc_cache_fn(_bibliographic_dir + "/c2b_test.cache"); if (QFileInfo::exists(doc_cache_fn)) { cout << "Reading from cache" << _QT_6_endl; QFile file(doc_cache_fn); if (!file.open(QIODevice::ReadOnly)) { cout << "Failed opening test file." << _QT_6_endl; return; } QDataStream ds(&file); ds >> doc_cache; } else { for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); fields.append("file"); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << _QT_6_endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString file(reference.value("file")); if (excluded.contains(file) || file.contains("/stacks/")) continue; document d(file, document::FirstPage); const QString doc(d.toString()); doc_cache.insert(reference.value("file"), doc); } } if (doc_cache.size() > 0) { QFile file(doc_cache_fn); if (!file.open(QIODevice::WriteOnly)) { cout << "Failed opening cache test file." << _QT_6_endl; return; } QDataStream ds(&file); ds << doc_cache; cout << "Writing cache " << doc_cache_fn << _QT_6_endl; cout << "Delete cache when done" << _QT_6_endl; } } cout << "Check authors" << _QT_6_endl; int n_pdf(0); int n_failed_pdf(0); for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); fields.append("file"); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << _QT_6_endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString file(reference.value("file")); if (file.isEmpty()) continue; if (excluded.contains(file) || file.contains("/stacks/")) continue; const QString doc(doc_cache.value(reference.value("file"))); QString check_doc(doc); c2bUtils::remove(check_doc, c2bUtils::nonAsciiLetter); if (check_doc.isEmpty()) continue; const QString author(reference.value("author")); bp.clearCurrentReference(); bp.guessFields(doc); const QString guess(bp.currentReference().value("author")); bool passed(guess == author); if (!passed) { QString author_ascii(c2bUtils::toAscii(author, c2bUtils::Cleanup)); QString guess_ascii(c2bUtils::toAscii(guess, c2bUtils::Cleanup)); passed = guess_ascii == author_ascii; if (passed) cout << QString("[%1*] '%2'\n").arg(boolToStr(passed), author); else cout << QString("[%1] '%2'\n").arg(boolToStr(passed), author); if (!passed) { qDebug() << author; qDebug() << guess; qDebug() << reference.value("file"); qDebug() << "DOCUMENT: \n" << doc << _QT_6_endl << _QT_6_endl; // for (int i = 0; i < doc.count(); ++i) // cout << '[' << doc.at(i) << ']' << " u: " << doc.at(i).unicode() << " // letter: " << // doc.at(i).isLetter() << _QT_6_endl; } cout << QString(" '%1'\n").arg(guess); } else cout << QString("[%1] '%2'\n").arg(boolToStr(passed), author); ++n_pdf; if (!passed) ++n_failed_pdf; } } cout << "PDF Tests: " << n_pdf << _QT_6_endl; cout << "Succeded: " << n_pdf - n_failed_pdf << _QT_6_endl; _test_count += n_pdf; _failed_test_count += n_failed_pdf; #endif } void c2bTests::check_abbreviations_txt() { #if C2B_CHECK_JOURNALS cout << _QT_6_endl; cout << "--------------------------------" << _QT_6_endl; cout << "Check journal abbreviations file" << _QT_6_endl; cout << "--------------------------------" << _QT_6_endl; cout << _QT_6_endl; const QString dbfile(settings::instance()->fileName("cb2Bib/JournalFile")); cout << dbfile << _QT_6_endl; journalDB jdb(dbfile); QStringList abbr1, abbr2, full1, full2, code; { QFile file(dbfile); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); QString line; int line_number(0); while (!stream.atEnd()) { line = stream.readLine(); ++line_number; if (line.isEmpty() || line.startsWith('#')) continue; const QStringList spLine(line.split('|', _QT_6_SkipEmptyParts)); if (spLine.count() != 3) { cout << "Syntax error in journal file at line " << line_number << _QT_6_endl; continue; } const QStringList spAbbreviated(spLine.at(1).split('=', _QT_6_SkipEmptyParts)); const int na(spAbbreviated.count()); if (na < 1 || na > 2) { cout << "Syntax error in journal file at line " << line_number << _QT_6_endl; continue; } const QStringList spExtended(spLine.at(2).split('=', _QT_6_SkipEmptyParts)); const int ne(spExtended.count()); if (ne < 1 || ne > 2) { cout << "Syntax error in journal file at line " << line_number << _QT_6_endl; continue; } code += spLine.at(0); abbr1 += spAbbreviated.at(0); full1 += spExtended.at(0); abbr2 += (na == 2) ? spAbbreviated.at(1) : spAbbreviated.at(0); full2 += (ne == 2) ? spExtended.at(1) : spExtended.at(0); } file.close(); const int njournals(code.count()); QStringList counter; for (int i = 0; i < njournals; ++i) counter += c2bUtils::removed(code.at(i).toLower(), c2bUtils::nonLetter); counter.removeDuplicates(); cout << "code total: " << njournals << " unique: " << counter.count() << _QT_6_endl; counter.clear(); for (int i = 0; i < njournals; ++i) counter += c2bUtils::removed(abbr1.at(i).toLower(), c2bUtils::nonLetter); counter.removeDuplicates(); cout << "abbr1 total: " << njournals << " unique: " << counter.count() << _QT_6_endl; counter.clear(); for (int i = 0; i < njournals; ++i) counter += c2bUtils::removed(full1.at(i).toLower(), c2bUtils::nonLetter); counter.removeDuplicates(); cout << "full1 total: " << njournals << " unique: " << counter.count() << _QT_6_endl; counter.clear(); for (int i = 0; i < njournals; ++i) counter += c2bUtils::removed(abbr2.at(i).toLower(), c2bUtils::nonLetter); counter.removeDuplicates(); cout << "abbr2 total: " << njournals << " unique: " << counter.count() << _QT_6_endl; counter.clear(); for (int i = 0; i < njournals; ++i) counter += c2bUtils::removed(full2.at(i).toLower(), c2bUtils::nonLetter); counter.removeDuplicates(); cout << "full2 total: " << njournals << " unique: " << counter.count() << _QT_6_endl; } const int njournals(code.count()); cout << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieve(code.at(i)) != abbr1.at(i)) cout << "failed code to abbr1 " << code.at(i) << " | " << abbr1.at(i) << " | " << jdb.retrieve(code.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternate(code.at(i)) != abbr2.at(i)) cout << "failed code to abbr2 " << code.at(i) << " | " << abbr2.at(i) << " | " << jdb.retrieveAlternate(code.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveFull(code.at(i)) != full1.at(i)) cout << "failed code to full1 " << code.at(i) << " | " << full1.at(i) << " | " << jdb.retrieveFull(code.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternateFull(code.at(i)) != full2.at(i)) cout << "failed code to full2 " << code.at(i) << " | " << full2.at(i) << " | " << jdb.retrieveAlternateFull(code.at(i)) << _QT_6_endl; cout << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieve(abbr1.at(i)) != abbr1.at(i)) cout << "failed abbr1 to abbr1 " << abbr1.at(i) << " | " << abbr1.at(i) << " | " << jdb.retrieve(abbr1.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternate(abbr1.at(i)) != abbr2.at(i)) cout << "failed abbr1 to abbr2 " << abbr1.at(i) << " | " << abbr2.at(i) << " | " << jdb.retrieveAlternate(abbr1.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveFull(abbr1.at(i)) != full1.at(i)) cout << "failed abbr1 to full1 " << abbr1.at(i) << " | " << full1.at(i) << " | " << jdb.retrieveFull(abbr1.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternateFull(abbr1.at(i)) != full2.at(i)) cout << "failed abbr1 to full2 " << abbr1.at(i) << " | " << full2.at(i) << " | " << jdb.retrieveAlternateFull(abbr1.at(i)) << _QT_6_endl; cout << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieve(abbr2.at(i)) != abbr1.at(i)) cout << "failed abbr2 to abbr1 " << abbr2.at(i) << " | " << abbr1.at(i) << " | " << jdb.retrieve(abbr2.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternate(abbr2.at(i)) != abbr2.at(i)) cout << "failed abbr2 to abbr2 " << abbr2.at(i) << " | " << abbr2.at(i) << " | " << jdb.retrieveAlternate(abbr2.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveFull(abbr2.at(i)) != full1.at(i)) cout << "failed abbr2 to full1 " << abbr2.at(i) << " | " << full1.at(i) << " | " << jdb.retrieveFull(abbr2.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternateFull(abbr2.at(i)) != full2.at(i)) cout << "failed abbr2 to full2 " << abbr2.at(i) << " | " << full2.at(i) << " | " << jdb.retrieveAlternateFull(abbr2.at(i)) << _QT_6_endl; cout << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieve(full1.at(i)) != abbr1.at(i)) cout << "failed full1 to abbr1 " << full1.at(i) << " | " << abbr1.at(i) << " | " << jdb.retrieve(full1.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternate(full1.at(i)) != abbr2.at(i)) cout << "failed full1 to abbr2 " << full1.at(i) << " | " << abbr2.at(i) << " | " << jdb.retrieveAlternate(full1.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveFull(full1.at(i)) != full1.at(i)) cout << "failed full1 to full1 " << full1.at(i) << " | " << full1.at(i) << " | " << jdb.retrieveFull(full1.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternateFull(full1.at(i)) != full2.at(i)) cout << "failed full1 to full2 " << full1.at(i) << " | " << full2.at(i) << " | " << jdb.retrieveAlternateFull(full1.at(i)) << _QT_6_endl; cout << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieve(full2.at(i)) != abbr1.at(i)) cout << "failed full2 to abbr1 " << full2.at(i) << " | " << abbr1.at(i) << " | " << jdb.retrieve(full2.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternate(full2.at(i)) != abbr2.at(i)) cout << "failed full2 to abbr2 " << full2.at(i) << " | " << abbr2.at(i) << " | " << jdb.retrieveAlternate(full2.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveFull(full2.at(i)) != full1.at(i)) cout << "failed full2 to full1 " << full2.at(i) << " | " << full1.at(i) << " | " << jdb.retrieveFull(full2.at(i)) << _QT_6_endl; for (int i = 0; i < njournals; ++i) if (jdb.retrieveAlternateFull(full2.at(i)) != full2.at(i)) cout << "failed full2 to full2 " << full2.at(i) << " | " << full2.at(i) << " | " << jdb.retrieveAlternateFull(full2.at(i)) << _QT_6_endl; #endif } void c2bTests::heuristic_journal() { #if C2B_CHECK_JOURNALS cout << _QT_6_endl; cout << "-----------------------------------------" << _QT_6_endl; cout << "Test heuristic journal recognition on PDF" << _QT_6_endl; cout << "-----------------------------------------" << _QT_6_endl; cout << _QT_6_endl; cout << "Checking files at: " << _bibliographic_dir << _QT_6_endl; QFileInfoList flist = QDir(_bibliographic_dir).entryInfoList(QStringList() << "*.bib"); bibParser bp; bibReference reference; QStringList fields; fields.append("journal"); fields.append("file"); const QStringList excluded(c2bUtils::fileToString(_bibliographic_dir + "/c2b_test_exclude.txt") .split(QRegularExpression("[\\n\\r]"), _QT_6_SkipEmptyParts)); QHash doc_cache; const QString doc_cache_fn(_bibliographic_dir + "/c2b_test.cache"); if (QFileInfo(doc_cache_fn).exists()) { cout << "Reading from cache" << _QT_6_endl; QFile file(doc_cache_fn); file.open(QIODevice::ReadOnly); QDataStream ds(&file); ds >> doc_cache; } else { cout << "No cache. Return" << doc_cache_fn << _QT_6_endl; return; } cout << "Check journals" << _QT_6_endl; int n_pdf(0); int n_failed_pdf(0); QList doclengths; for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << _QT_6_endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString file(reference.value("file")); if (file.isEmpty()) continue; if (excluded.contains(file) || file.contains("/stacks/")) continue; const QString doc(doc_cache.value(file)); const QString check_doc(c2bUtils::removed(doc, c2bUtils::nonAsciiLetter)); if (check_doc.isEmpty()) continue; doclengths.append(check_doc.length()); const QString ajournal(bp.abbreviatedJournal(reference.value("journal"))); const QString fjournal(bp.fullJournal(reference.value("journal"))); if (fjournal.isEmpty()) continue; if (ajournal == fjournal && (ajournal.count('.') > 0 || ajournal.count(' ') > 0)) { qDebug() << "not in db:" << fjournal; continue; } bp.clearCurrentReference(); bp.guessFields(doc); // const QString guess(bp.abbreviatedJournal(bp.currentReference().value("journal"))); const QString guess(bp.fullJournal(bp.currentReference().value("journal"))); if (guess.isEmpty()) continue; bool passed(guess == fjournal); if (!passed) { cout << QString("[%1] '%2'\n").arg(boolToStr(passed)).arg(fjournal); cout << QString(" '%1'\n").arg(guess); qDebug() << "jn:" << fjournal; qDebug() << "gn:" << guess; qDebug() << reference.value("file"); qDebug() << "DOCUMENT: \n" << doc << _QT_6_endl << _QT_6_endl; } else cout << QString("[%1] '%2'\n").arg(boolToStr(passed)).arg(fjournal); ++n_pdf; if (!passed) ++n_failed_pdf; } } cout << "PDF Tests: " << n_pdf << _QT_6_endl; cout << "Succeded: " << n_pdf - n_failed_pdf << _QT_6_endl; cout << "Ratio: " << double(n_pdf) / double(n_failed_pdf) << _QT_6_endl; _test_count += n_pdf; _failed_test_count += n_failed_pdf; std::sort(doclengths.begin(), doclengths.end()); cout << "doclengths min max median: " << doclengths.first() << ' ' << doclengths.last() << ' ' << doclengths.at(doclengths.count() / 2) << _QT_6_endl; #endif } void c2bTests::author_parser() { cout << _QT_6_endl; cout << "------------------" << _QT_6_endl; cout << "Test author parser" << _QT_6_endl; cout << "------------------" << _QT_6_endl; bibParser bp; QString author; QString input; author = "J.-L. Smith and R. Jones and K. McGibbons"; input = "SMITH, J.-L., R. JONES, AND K. MCGIBBONS"; check_test(author == bp.parse("author", input), input, author); input = "Smith, J.-L., Jones, R., and McGibbons, K."; check_test(author == bp.parse("author", input), input, author); input = "Smith, J.-L., Jones, R., McGibbons, K."; check_test(author == bp.parse("author", input), input, author); author = "J. L. Brooks Jr"; input = "Brooks Jr, John L"; check_test(author == bp.parse("author", input), input, author); author = "E. B. Melissa and W. F. Tohnson Jr and C. Z. Ortiz and S. J. van der Burgh"; input = "Melissa, Elizabeth Baines; Tohnson, Walter F., Jr.; Zapa Ortiz, Carlos; van der Burgh, S. J."; check_test(author == bp.parse("author", input), input, author); input = "Melissa, E.B., Tohnson Jr, Walter F., Zapa Ortiz, C., van der Burgh, S. J."; check_test(author == bp.parse("author", input), input, author); input = "Melissa, E.B., Tohnson Jr, Walter F., Zapa Ortiz, C., and van der Burgh, S. J."; check_test(author == bp.parse("author", input), input, author); author = "B. B. Aaaaaaa"; input = "Aaaaaaa, BB"; check_test(author == bp.parse("author", input), input, author); // author = "J. R. Aaaaaaa"; // input = "Aaaaaaa, JR"; // Gives wrong processing of the initials JR (set to Jr) // check_test(author == bp.parse("author", input), input, author); author = "J. Pi"; input = "Joan Pi"; check_test(author == bp.parse("author", input), input, author); input = "JOAN PI"; check_test(author == bp.parse("author", input), input, author); author = "P. I. Joan"; input = "Joan PI"; check_test(author == bp.parse("author", input), input, author); author = "C. V. Pi"; input = "Carles Vidal Pi"; check_test(author == bp.parse("author", input), input, author); input = "Carles VIDAL PI"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles"; check_test(author == bp.parse("author", input), input, author); input = "Pi, Carles Vidal"; check_test(author == bp.parse("author", input), input, author); input = "PI, CARLES VIDAL"; check_test(author == bp.parse("author", input), input, author); author = "C. V. Pi and M. R. Catala"; input = "Carles Vidal Pi, Maria Rosa Catala"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles and Catala, Maria Rosa"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles and Catala, MR"; check_test(author == bp.parse("author", input), input, author); input = "VIDAL PI, Carles and CATALA, MR"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles and Catala, M.R."; check_test(author == bp.parse("author", input), input, author); author = "C. V. Pi and M. R. Catala"; input = "Carles Vidal Pi, Maria Ros Catala"; check_test(author == bp.parse("author", input), input, author); input = "Carles VIDAL PI, Maria ROS CATALA"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles and Ros Catala, Maria"; check_test(author == bp.parse("author", input), input, author); author = "M. R. R. Catala"; input = "Maria Rosa Ros Catala"; check_test(author == bp.parse("author", input), input, author); input = "Ros Catala, MR"; check_test(author == bp.parse("author", input), input, author); input = "Ros Catala, M R"; check_test(author == bp.parse("author", input), input, author); input = "Ros Catala, M. R."; check_test(author == bp.parse("author", input), input, author); author = "M. d'Errico"; input = "Monica d'Errico"; check_test(author == bp.parse("author", input), input, author); author = "J. V. Mael Jr"; input = "JAMES V. MAEL, Jr."; check_test(author == bp.parse("author", input), input, author); author = "J. V. Mael III"; input = "JAMES V. MAEL, III"; check_test(author == bp.parse("author", input), input, author); author = "V. Yu. Dmitri and A. Karpoff"; input = "VICTOR Yu. DMITRI,3 ANDRIY KARPOFF"; check_test(author == bp.parse("author", input), input, author); author = "Yu. Dmitri and A. Karpoff"; input = "Yu. Dmitri,3 Andriy Karpoff"; check_test(author == bp.parse("author", input), input, author); input = "Yu. DMITRI,3 ANDRIY KARPOFF"; check_test(author == bp.parse("author", input), input, author); input = "YU. DMITRI,3 ANDRIY KARPOFF"; check_test(author == bp.parse("author", input), input, author); cout << "From medline:" << _QT_6_endl; author = "C. L. Maggi III"; input = "Maggi, Carla L., III"; check_test(author == bp.parse("author", input), input, author); input = "Maggi III CL"; check_test(author == bp.parse("author", input), input, author); check_test(author == bp.parse("author", bp.authorFromMedline(input)), input, author); input = "Maggi, Carla L 3rd"; check_test(author == bp.parse("author", bp.authorFromMedline(input)), input, author); input = "Maggi CL 3rd"; check_test(author == bp.parse("author", bp.authorFromMedline(input)), input, author); author = "A. M. C. Lourtau"; input = "Carr Lourtau, A M"; check_test(author == bp.parse("author", input), input, author); check_test(author == bp.parse("author", bp.authorFromMedline(input)), input, author); input = "Carr Lourtau, AM"; check_test(author == bp.parse("author", input), input, author); // input = "Carr Lourtau AM"; // Gives 'L. A. Carr' (rare AU formatting) // check_test(author == bp.parse("author", author::fromMedline(input)), input, author); author = "B. de Rivas"; input = "de Rivas, Beatriz"; check_test(author == bp.parse("author", bp.authorFromMedline(input)), input, author); input = "de Rivas B"; check_test(author == bp.parse("author", bp.authorFromMedline(input)), input, author); author = "B. De Baets"; input = " De Baets, B "; check_test(author == bp.parse("author", bp.authorFromMedline(input)), input, author); } void c2bTests::heuristic_pvny() { cout << _QT_6_endl; cout << "---------------------------------------------------------" << _QT_6_endl; cout << "Test heuristic pages - volume - number - year recognition" << _QT_6_endl; cout << "---------------------------------------------------------" << _QT_6_endl; bibParser bp; bibReference reference; /**************************************************************** journal-pages-volume ****************************************************************/ reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "927")); reference.insert("volume", bp.parse("volume", "120")); write(bp, reference); heuristic(bp, reference, "jmathchem. 120: 927"); heuristic(bp, reference, "jmathchem. 120, 927"); heuristic(bp, reference, "j.math.chem. 120, 927"); heuristic(bp, reference, "j. math. chem. 120, 927"); heuristic(bp, reference, "jmathchem 120, 927"); heuristic(bp, reference, "jmathchem 120, pp. 927"); heuristic(bp, reference, "j math chem 120, pp. 927"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "927 - 993")); reference.insert("volume", bp.parse("volume", "120")); write(bp, reference); heuristic(bp, reference, "jmathchem. 120: 927 - 993"); heuristic(bp, reference, "jmathchem. 120, 927 - 93"); heuristic(bp, reference, "jmathchem 120, 927 - 993"); heuristic(bp, reference, "jmathchem 120, pp. 927 - 993"); /**************************************************************** journal-pages-volume-number ****************************************************************/ reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "927")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 3")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1 - 3), 927"); heuristic(bp, reference, "jmathchem 120(1 - 3), pp. 927"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "927 - 993")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 3")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1 - 3), 927 - 993"); heuristic(bp, reference, "jmathchem 120(1 - 3), pp. 927 - 993"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "927 - 993")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); write(bp, reference); heuristic(bp, reference, "jmathchem, Volume 120, Number 1, 927 - 993"); /**************************************************************** journal-pages-volume-year ****************************************************************/ reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "1922")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 2007, 120, 1922"); heuristic(bp, reference, "jmathchem 2007 120: 1922"); heuristic(bp, reference, "jmathchem. 120: 1922, 2007"); heuristic(bp, reference, "(2007) jmathchem 120: 1922"); heuristic(bp, reference, "jmathchem 120, 1922 2007"); heuristic(bp, reference, "jmathchem 120, 1922(2007)"); heuristic(bp, reference, "jmathchem 120(2007) 1922"); heuristic(bp, reference, "jmathchem 2007;120:1922."); heuristic(bp, reference, "jmathchem 2007 May 2;120:1922"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "22")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 2007, 120, 22"); heuristic(bp, reference, "jmathchem 2007 120: 22"); heuristic(bp, reference, "jmathchem 2007 May 2, 120: 22"); heuristic(bp, reference, "jmathchem. 120: 22, 2007"); heuristic(bp, reference, "(2007) jmathchem 120: 22"); heuristic(bp, reference, "jmathchem 120, 22 2007"); heuristic(bp, reference, "jmathchem 120, 22(2007)"); heuristic(bp, reference, "jmathchem 120(2007) 22"); // Usual pages reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "3 - 7")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem. 120, 3 - 7(2007)"); heuristic(bp, reference, "jmathchem. 120: 3 - 7, 2007"); heuristic(bp, reference, "jmathchem, 120(2007), pp. 3 - 7"); heuristic(bp, reference, "jmathchem 120(2007) 3 - 7"); heuristic(bp, reference, "2007 jmathchem 120 3 - 7"); heuristic(bp, reference, "jmathchem. 2007, 120, 3 - 7"); heuristic(bp, reference, "jmathchem. 2007 120: 3 - 7"); heuristic(bp, reference, "jmathchem. 2007 May 2, 120: 3 - 7"); heuristic(bp, reference, "jmathchem. 2007, 120, 3 - 5pp"); heuristic(bp, reference, "jmathchem 2007;120: 3 - 7"); // Pages susceptible to be confused by years reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "1997 - 2001")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem. 120, 1997 - 2001(2007)"); heuristic(bp, reference, "jmathchem. 120, 1997 - 2001, 2007"); heuristic(bp, reference, "jmathchem. 120: 1997 - 2001, 2007"); heuristic(bp, reference, "jmathchem, 120(2007), pp. 1997 - 2001"); heuristic(bp, reference, "jmathchem 120(2007) 1997 - 2001"); heuristic(bp, reference, "2007 jmathchem 120 1997 - 2001"); heuristic(bp, reference, "jmathchem. 2007, 120, 1997 - 2001"); heuristic(bp, reference, "jmathchem. 2007 May 2, 120, 1997 - 2001"); heuristic(bp, reference, "jmathchem. 2007 120: 1997 - 2001"); heuristic(bp, reference, "jmathchem. 2007, 120, 1997 - 5pp"); heuristic(bp, reference, "jmathchem 2007;120: 1997 - 2001"); // Pages starting by zero reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "044103 - 044110")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem. 120, 044103 - 044110(2007)"); heuristic(bp, reference, "jmathchem. 120: 044103 - 044110, 2007"); heuristic(bp, reference, "jmathchem, 120(2007), pp. 044103 - 044110"); heuristic(bp, reference, "jmathchem 120(2007) 044103 - 044110"); heuristic(bp, reference, "2007 jmathchem 120 044103 - 044110"); heuristic(bp, reference, "2007 j. math. chem. 120 044103 - 044110"); heuristic(bp, reference, "2007 j math chem 120 044103 - 044110"); heuristic(bp, reference, "jmathchem. 2007, 120, 044103 - 044110"); heuristic(bp, reference, "jmathchem. 2007 May 2; 120, 044103 - 044110"); heuristic(bp, reference, "jmathchem. 2007 120: 044103 - 044110"); heuristic(bp, reference, "jmathchem 2007;120: 044103 - 044110"); /**************************************************************** journal-pages-volume-number-year ****************************************************************/ // Usual pages reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "117")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1), 117(2007)"); heuristic(bp, reference, "jmathchem 120(1), 117(2007)"); heuristic(bp, reference, "jmathchem 120(1): 117, 2007"); heuristic(bp, reference, "jmathchem 2007, 120(1): 117"); heuristic(bp, reference, "jmathchem 2007 120(1): 117"); heuristic(bp, reference, "jmathchem 2007, 120(1), 117"); heuristic(bp, reference, "jmathchem, 2007, 120 (1), p 117"); heuristic(bp, reference, "jmathchem 2007 January 25; 120(1), 117"); heuristic(bp, reference, "jmathchem 2007 January 25 120(1), 117"); heuristic(bp, reference, "jmathchem 2007 May 25 120(1), 117"); heuristic(bp, reference, "jmathchem (2007), 120, 1, 117"); heuristic(bp, reference, "jmathchem, Vol. 120, No. 1 (2007) 117"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "10 - 17")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1), 10 - 17(2007)"); heuristic(bp, reference, "jmathchem 120(1), 10 - 17(2007)"); heuristic(bp, reference, "jmathchem 120(1): 10 - 17, 2007"); heuristic(bp, reference, "jmathchem 2007, 120(1): 10 - 17"); heuristic(bp, reference, "jmathchem. 2007, 120(1): 10 - 7"); heuristic(bp, reference, "jmathchem. 2007 120(1): 10 - 7"); heuristic(bp, reference, "jmathchem. 2007, 120(1): 10 8pp"); heuristic(bp, reference, "jmathchem. 2007, 120(1), 10 - 17"); heuristic(bp, reference, "jmathchem. 2007, 120(1), pp 10 - 17"); heuristic(bp, reference, "jmathchem. 2007 January 25, 120(1), pp 10 - 17"); heuristic(bp, reference, "jmathchem (2007), 120, 1, pp. 10-17"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "117")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 6")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1 - 6), 117(2007)"); heuristic(bp, reference, "jmathchem 120(1 - 6), 117(2007)"); heuristic(bp, reference, "jmathchem 120(1 - 6): 117, 2007"); heuristic(bp, reference, "jmathchem 2007, 120(1 - 6): 117"); heuristic(bp, reference, "jmathchem 2007 120(1 - 6): 117"); heuristic(bp, reference, "jmathchem 2007 May 25 120(1 - 6): 117"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "10 - 17")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 6")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1 - 6), 10 - 17(2007)"); heuristic(bp, reference, "jmathchem 120(1 - 6), 10 - 17(2007)"); heuristic(bp, reference, "jmathchem 120(1 - 6): 10 - 17, 2007"); heuristic(bp, reference, "jmathchem 2007, 120(1 - 6): 10 - 17"); heuristic(bp, reference, "jmathchem. 2007, 120(1 - 6): 10 - 7"); heuristic(bp, reference, "jmathchem. 2007, 120(1 - 6): 10 8pp"); heuristic(bp, reference, "jmathchem 2007 120(1 - 6): 10 8pp"); heuristic(bp, reference, "jmathchem 2007 May 25 120(1 - 6): 10 8pp"); // Pages susceptible to be confused by years reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "1922")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1), 1922(2007)"); heuristic(bp, reference, "jmathchem 120(1), 1922(2007)"); heuristic(bp, reference, "jmathchem 120(1): 1922, 2007"); heuristic(bp, reference, "jmathchem 2007, 120(1): 1922"); heuristic(bp, reference, "jmathchem 2007, 120(1), 1922"); heuristic(bp, reference, "jmathchem 2007 120(1): 1922"); heuristic(bp, reference, "jmathchem 2007 May 25 120(1): 1922"); heuristic(bp, reference, "jmathchem, Vol. 120, No. 1 (2007) 1922"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "1922 - 1927")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1), 1922 - 1927(2007)"); heuristic(bp, reference, "jmathchem 120(1), 1922 - 1927(2007)"); heuristic(bp, reference, "jmathchem 120(1): 1922 - 1927, 2007"); heuristic(bp, reference, "jmathchem 2007, 120(1): 1922 - 1927"); heuristic(bp, reference, "jmathchem. 2007, 120(1): 1922 - 1927"); heuristic(bp, reference, "jmathchem. 2007, 120(1): 1922 6pp"); heuristic(bp, reference, "jmathchem. 2007 120(1): 1922 6pp"); heuristic(bp, reference, "jmathchem. 2007, 120(1), 1922 - 1927"); heuristic(bp, reference, "jmathchem. 2007, 120(1), pp 1922 - 1927"); heuristic(bp, reference, "jmathchem. 2007 May 25, 120(1), pp 1922 - 1927"); heuristic(bp, reference, "jmathchem (2007), 120, 1, pp. 1922-1927"); heuristic(bp, reference, "jmathchem, Vol. 120, No. 1 (2007) 1922 - 1927"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "1922")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 6")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1 - 6), 1922(2007)"); heuristic(bp, reference, "jmathchem 120(1 - 6), 1922(2007)"); heuristic(bp, reference, "jmathchem 120(1 - 6): 1922, 2007"); heuristic(bp, reference, "jmathchem 2007, 120(1 - 6): 1922"); heuristic(bp, reference, "jmathchem 2007 120(1 - 6): 1922"); heuristic(bp, reference, "jmathchem 2007 May 25 120(1 - 6): 1922"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "jmathchem")); reference.insert("pages", bp.parse("pages", "1922 - 1927")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 6")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "jmathchem 120(1 - 6), 1922 - 1927(2007)"); heuristic(bp, reference, "jmathchem 120(1 - 6), 1922 - 1927(2007)"); heuristic(bp, reference, "jmathchem 120(1 - 6): 1922 - 1927, 2007"); heuristic(bp, reference, "jmathchem 2007, 120(1 - 6): 1922 - 1927"); heuristic(bp, reference, "jmathchem 2007 120(1 - 6): 1922 - 1927"); heuristic(bp, reference, "jmathchem. 2007, 120(1 - 6): 1922 - 7"); heuristic(bp, reference, "jmathchem. 2007, 120(1 - 6): 1922 6pp"); heuristic(bp, reference, "jmathchem. 2007 May 25, 120(1 - 6): 1922 6pp"); } void c2bTests::heuristic_misc() { cout << _QT_6_endl; cout << "-----------------------------" << _QT_6_endl; cout << "Test miscellaneous heuristics" << _QT_6_endl; cout << "-----------------------------" << _QT_6_endl; bibParser bp; bibReference reference; // abstract reference.clearReference(); reference.insert("abstract", bp.parse("abstract", "Some text.")); write(bp, reference); heuristic(bp, reference, "...\n\nAbstract. Some text.\n"); heuristic(bp, reference, "...\n\nAbstract.\n Some text.\n"); heuristic(bp, reference, "...\n\nAbstract:\n Some text.\n"); heuristic(bp, reference, "...\n\nAbstract\n Some text.\n"); heuristic(bp, reference, "...\n\nSummary. Some text.\n"); heuristic(bp, reference, "...\n\nSummary:\n Some text.\n"); heuristic(bp, reference, "...\n\nSummary\n Some text.\n"); // keywords reference.clearReference(); reference.insert("keywords", bp.parse("keywords", "Some text.")); write(bp, reference); heuristic(bp, reference, "...\n\nKeywords:\n Some text.\n"); heuristic(bp, reference, "...\n\nKeywords. Some text.\n"); // title reference.clearReference(); reference.insert("title", bp.parse("title", "Some text.")); write(bp, reference); heuristic(bp, reference, "...\n\nTitle: Some text.\n"); heuristic(bp, reference, "...\n\nTitle:\n Some text.\n"); } void c2bTests::heuristic(bibParser& bp, const bibReference& reference, const QString& text) { bp.clearCurrentReference(); bp.guessFields(text); const bool passed(bp.toBibTeX() == bp.toBibTeX(reference)); ++_test_count; if (!passed) ++_failed_test_count; cout << QString("[%1]\t'%2'\n").arg(boolToStr(passed), text); if (!passed) qDebug() << "Guessed:\n" << bp.toBibTeX(); } void c2bTests::check_test(const bool passed, const QString& input, const QString& output) { ++_test_count; if (!passed) ++_failed_test_count; cout << QString("[%1]\t'%2'\n").arg(boolToStr(passed), input); if (!passed) qDebug() << output; } void c2bTests::write(const bibParser& bp, const bibReference& reference) { cout << _QT_6_endl; const QStringList& bibliographicFields = bp.bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) { const QString fvalue(reference.value(bibliographicFields.at(i))); if (!fvalue.isEmpty()) { const QString& fd = bibliographicFields.at(i); const QString padding(QString().fill(' ', 12 - fd.length())); cout << (fd + padding + " = {" + fvalue + '}') << _QT_6_endl; } } } #if C2B_CHECK_PATTERNS #include "frequentPatterns.h" #endif void c2bTests::heuristic_check_patterns() { #if C2B_CHECK_PATTERNS frequentPatterns fp; fp.process(); return; #endif cout << _QT_6_endl; cout << "-----------------------------------------------------" << _QT_6_endl; cout << "Check pattern clashes in heuristic author recognition" << _QT_6_endl; cout << "-----------------------------------------------------" << _QT_6_endl; cout << _QT_6_endl; QFileInfoList flist = QDir(_bibliographic_dir).entryInfoList(QStringList() << "*.bib"); bibParser bp; bibReference reference; QStringList fields; fields.append("author"); QHash adictionary; for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString a(c2bUtils::toAscii(reference.value("author"), c2bUtils::Collation)); const QStringList as(c2bUtils::split(a, c2bUtils::nonLetter, _QT_6_KeepEmptyParts)); for (int i = 0; i < as.count(); ++i) adictionary.insert(as.at(i), 1 + adictionary.value(as.at(i), 0)); } } QStringList word_prefix_lexicon(c2bUtils::split(c2bUtils::fileToString(":/txt/txt/word_prefix_lexicon.txt"), c2bUtils::nonLetter, _QT_6_SkipEmptyParts)); for (int i = 0; i < word_prefix_lexicon.count(); ++i) word_prefix_lexicon[i].replace('_', "\\b"); QStringList anames(adictionary.keys()); QRegExp wre; for (int i = 0; i < word_prefix_lexicon.count(); ++i) for (int j = 0; j < anames.count(); ++j) { const QString& wp = word_prefix_lexicon.at(i); const QString& a = anames.at(j); wre.setPattern(wp); if (wre.indexIn(a) >= 0) cout << "LEXICON CLASH: " << wp << ' ' << a << _QT_6_endl; } } QString c2bTests::decomposition(const QChar& c) { // Write char decomposition const QString d(c.decomposition()); QString wd; for (int i = 0; i < d.length(); ++i) wd += '[' + d.at(i) + ']'; return wd; } cb2bib-2.0.3/src/PaxHeaders/c2bConsole.cpp0000644000000000000000000000013115104461633015203 xustar0030 mtime=1762812827.410764306 29 atime=1762812827.99875967 30 ctime=1762812827.414764275 cb2bib-2.0.3/src/c2bConsole.cpp0000644000175000001440000000567415104461633017211 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bConsole.h" #include "c2bNetworkQuery.h" #include "c2bSettings.h" #include "c2bTests.h" #include #include #include #include #include #include #include c2bConsole::c2bConsole(QObject* parento) : QObject(parento) {} c2bConsole::~c2bConsole() {} void c2bConsole::load() { // Send _process to application cue QTimer::singleShot(0, this, SLOT(_process())); } void c2bConsole::_process() { int code(0); if (c2bSettingsP->cl_html_annote) code = cl_html_annote(); else if (c2bSettingsP->cl_doc2bib) code = cl_doc2bib(); else if (c2bSettingsP->cl_txt2bib) code = cl_txt2bib(); else if (c2bSettingsP->cl_index) code = cl_index(); else if (c2bSettingsP->cl_cb2bib_tests) code = cl_cb2bib_tests(); else if (c2bSettingsP->cl_cb2bib_information) code = cl_cb2bib_information(); QCoreApplication::exit(code); } int c2bConsole::cl_html_annote() { if (QFileInfo::exists(c2bSettingsP->cl_annote_filename)) { const QString tex(c2bUtils::fileToString(c2bSettingsP->cl_annote_filename)); const QString htmlf(c2bSettingsP->cl_annote_filename + ".html"); texToHtml t2h; t2h.toHtml(tex, htmlf); return 0; } else { c2bUtils::warn(QObject::tr("Error: Could not open %1 file for reading").arg(c2bSettingsP->cl_annote_filename)); return 1; } } int c2bConsole::cl_doc2bib() { bibParser bp; metadataParser mp(&bp); c2bNetworkQuery nq(&bp); // needs c2bUtils::fromHtmlString bibExtractor be(&bp, &mp, &nq); const int c(be.extract(c2bSettingsP->cl_extract_input_filenames, c2bSettingsP->cl_extract_output_filename, bibExtractor::Document)); return c; } int c2bConsole::cl_txt2bib() { bibParser bp; metadataParser mp(&bp); c2bNetworkQuery nq(&bp); bibExtractor be(&bp, &mp, &nq); const int c(be.extract(c2bSettingsP->cl_extract_input_filenames, c2bSettingsP->cl_extract_output_filename, bibExtractor::PlainText)); return c; } int c2bConsole::cl_index() { bibParser bp; collectionIndex ci(&bp); const int c(ci.index(c2bSettingsP->cl_index_dirname)); return c; } int c2bConsole::cl_cb2bib_information() { c2bTests* t(new c2bTests()); const int passed(t->writeInformation()); delete t; return passed; } int c2bConsole::cl_cb2bib_tests() { c2bTests* t(new c2bTests()); const int passed(t->allTests()); delete t; return passed; } cb2bib-2.0.3/src/PaxHeaders/c2bExportDialog.ui0000644000000000000000000000007415104461330016035 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.190766041 cb2bib-2.0.3/src/c2bExportDialog.ui0000644000175000001440000001254615104461330020031 0ustar00constansusers00000000000000 c2bExportDialog 0 0 563 308 Dialog BibTeX File: 6 0 Select BibTeX directory :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Qt::Horizontal Copy Documents Documents Directory 6 0 Select PDF directory :/icons/icons/mimeFolder.png:/icons/icons/mimeFolder.png Set directory relative to the BibTeX File Directory Qt::Vertical 20 20 Qt::Horizontal Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help c2bLineEdit QLineEdit
c2bLineEdit.h
buttonBox rejected() c2bExportDialog reject() 603 259 630 156 CopyDocuments clicked(bool) DocumentsDirectoryBox setEnabled(bool) 23 80 154 134
cb2bib-2.0.3/src/PaxHeaders/c2bUtils.cpp0000644000000000000000000000013215104461633014702 xustar0030 mtime=1762812827.486763707 30 atime=1762812828.042759324 30 ctime=1762812827.486763707 cb2bib-2.0.3/src/c2bUtils.cpp0000644000175000001440000000243515104461633016677 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bUtils.h" #include #include namespace c2bUtils { bool openFile(const QString& fn, QWidget* w) { // URL fn is decoded always, in the hope of making openFile encoding agnostic const QString decoded(QUrl::fromPercentEncoding(fn.toUtf8())); const QUrl url(stringToUrl(decoded)); if (!url.isValid()) { if (w) QMessageBox::warning(w, QObject::tr("Warning - cb2Bib"), QObject::tr("Unable to open file.\nError: URL '%1' is not valid.").arg(url.toString()), QMessageBox::Ok); return false; } if (!QDesktopServices::openUrl(url)) { if (w) QMessageBox::warning(w, QObject::tr("Warning - cb2Bib"), QObject::tr("Unable to open file '%1'.").arg(fn), QMessageBox::Ok); return false; } return true; } } // namespace c2bUtils cb2bib-2.0.3/src/PaxHeaders/c2bColors.cpp0000644000000000000000000000013115104461633015042 xustar0030 mtime=1762812827.398764401 29 atime=1762812827.99875967 30 ctime=1762812827.398764401 cb2bib-2.0.3/src/c2bColors.cpp0000644000175000001440000000743415104461633017044 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bColors.h" #include "c2bSettings.h" c2bColors::c2bColors() { colorList.insert("BibTeX delimiters", &bib_delimiter_color); colorList.insert("BibTeX reference field", &bib_reference_field_color); colorList.insert("BibTeX reference type", &bib_reference_type_color); colorList.insert("Comments and line numbers", &comment_color); colorList.insert("NetQInf command contents", &netqinf_command_content_color); colorList.insert("NetQInf command keys", &netqinf_command_key_color); colorList.insert("RegExp and NetQInf cb2Bib tags", &cb2bib_tag_color); colorList.insert("cb2Bib digits", &cb2bib_digit_color); colorList.insert("cb2Bib highly relevant text", &cb2bib_highly_relevant_color); colorList.insert("cb2Bib metadata", &cb2bib_metadata_color); colorList.insert("cb2Bib relevant text", &cb2bib_relevant_color); colorList.insert("cb2Bib unrelevant text", &cb2bib_unrelevant_color); } c2bColors::~c2bColors() {} void c2bColors::updateColor(const QColor& color, const QString& colorName) { *colorList[colorName] = color; } void c2bColors::saveColors(c2bSettings* settings) { settings->setValue("c2bColors/bib_delimiter_color", bib_delimiter_color); settings->setValue("c2bColors/bib_reference_field_color", bib_reference_field_color); settings->setValue("c2bColors/bib_reference_type_color", bib_reference_type_color); settings->setValue("c2bColors/cb2bib_digit_color", cb2bib_digit_color); settings->setValue("c2bColors/cb2bib_highly_relevant_color", cb2bib_highly_relevant_color); settings->setValue("c2bColors/cb2bib_metadata_color", cb2bib_metadata_color); settings->setValue("c2bColors/cb2bib_relevant_color", cb2bib_relevant_color); settings->setValue("c2bColors/cb2bib_tag_color", cb2bib_tag_color); settings->setValue("c2bColors/cb2bib_unrelevant_color", cb2bib_unrelevant_color); settings->setValue("c2bColors/comment_color", comment_color); settings->setValue("c2bColors/netqinf_command_content_color", netqinf_command_content_color); settings->setValue("c2bColors/netqinf_command_key_color", netqinf_command_key_color); } void c2bColors::loadColors(c2bSettings* settings) { bib_delimiter_color = settings->value("c2bColors/bib_delimiter_color", "#555555").value(); bib_reference_field_color = settings->value("c2bColors/bib_reference_field_color", "#00007f").value(); bib_reference_type_color = settings->value("c2bColors/bib_reference_type_color", "#00007f").value(); cb2bib_digit_color = settings->value("c2bColors/cb2bib_digit_color", "#005500").value(); cb2bib_highly_relevant_color = settings->value("c2bColors/cb2bib_highly_relevant_color", "#0000ff").value(); cb2bib_metadata_color = settings->value("c2bColors/cb2bib_metadata_color", "#595942").value(); cb2bib_relevant_color = settings->value("c2bColors/cb2bib_relevant_color", "#005500").value(); cb2bib_tag_color = settings->value("c2bColors/cb2bib_tag_color", "#550000").value(); cb2bib_unrelevant_color = settings->value("c2bColors/cb2bib_unrelevant_color", "#595942").value(); comment_color = settings->value("c2bColors/comment_color", "#595942").value(); netqinf_command_content_color = settings->value("c2bColors/netqinf_command_content_color", "#000000").value(); netqinf_command_key_color = settings->value("c2bColors/netqinf_command_key_color", "#00007f").value(); } cb2bib-2.0.3/src/PaxHeaders/c2bExportDialog.cpp0000644000000000000000000000013115104461633016202 xustar0030 mtime=1762812827.422764212 30 atime=1762812828.042759324 29 ctime=1762812827.42676418 cb2bib-2.0.3/src/c2bExportDialog.cpp0000644000175000001440000001133415104461633020176 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bExportDialog.h" #include "c2b.h" #include "c2bFileDialog.h" #include "c2bSettings.h" #include "c2bUtils.h" #include #include c2bExportDialog::c2bExportDialog(const QString& fn, const QString& contents, const QStringList& keys, QWidget* parentw) : QDialog(parentw) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); _ed.bibtex_fn = fn; if (contents.isEmpty()) _ed.bibtex_contents = c2bUtils::fileToString(fn); else _ed.bibtex_contents = contents; _ed.bibtex_keys = keys; ui.setupUi(this); setWindowTitle(tr("Export Entries - cb2Bib")); QPushButton* buttonExport = new QPushButton(tr("Export")); ui.buttonBox->addButton(buttonExport, QDialogButtonBox::ActionRole); buttonExport->setAutoDefault(true); buttonExport->setDefault(true); connect(buttonExport, SIGNAL(clicked()), this, SLOT(_export())); settings = c2bSettingsP; ui.ExportFile->setText(settings->value("c2bExportDialog/ExportFile", QString()).toString()); ui.DocumentsDirectory->setText(settings->value("c2bExportDialog/DocumentsDirectory", QString()).toString()); ui.CopyDocuments->setChecked(settings->value("c2bExportDialog/CopyDocuments").toBool()); ui.RelativeDocumentDirectory->setChecked(settings->value("c2bExportDialog/RelativeDocumentDirectory").toBool()); ui.DocumentsDirectoryBox->setEnabled(ui.CopyDocuments->isChecked()); connect(ui.ExportFileDir, SIGNAL(clicked()), this, SLOT(getExportFile())); connect(ui.DocumentsDirectoryDir, SIGNAL(clicked()), this, SLOT(getDocumentsDirectory())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); } c2bExportDialog::~c2bExportDialog() { if (result() == QDialog::Accepted) { settings->setValue("c2bExportDialog/CopyDocuments", ui.CopyDocuments->isChecked()); settings->setValue("c2bExportDialog/DocumentsDirectory", ui.DocumentsDirectory->text()); settings->setValue("c2bExportDialog/ExportFile", ui.ExportFile->text()); settings->setValue("c2bExportDialog/RelativeDocumentDirectory", ui.RelativeDocumentDirectory->isChecked()); } } void c2bExportDialog::_export() { _ed.copy_documents = ui.CopyDocuments->isChecked(); _ed.documents_dir = ui.DocumentsDirectory->text(); _ed.export_fn = ui.ExportFile->text(); _ed.relative_dir = ui.RelativeDocumentDirectory->isChecked(); // Check files if (QFileInfo::exists(_ed.export_fn)) { const int button(QMessageBox::warning( this, tr("Warning - cb2Bib"), tr("File %1 already exists.\nDo you want to replace it?").arg(_ed.export_fn), QMessageBox::Yes | QMessageBox::No)); if (button == QMessageBox::No) return; } if (_ed.copy_documents) { const QString ddname( c2bUtils::documentAbsoluteName(_ed.relative_dir, _ed.export_fn, _ed.documents_dir, QString()) + QDir::separator()); QDir doc_dir(ddname); if (!doc_dir.exists()) if (!doc_dir.mkpath(ddname)) { QMessageBox::warning(this, tr("Warning - cb2Bib"), tr("Unable to create directory %1.").arg(ddname), QMessageBox::Ok); return; } } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); c2bExport e(this); e.exportEntries(_ed); QApplication::restoreOverrideCursor(); accept(); } void c2bExportDialog::getExportFile() { const QString fn(ui.ExportFile->text()); const QString new_fn(c2bFileDialog::getFilename(this, tr("Select export filename"), fn, "BibTeX (*.bib)")); if (!new_fn.isEmpty()) ui.ExportFile->setText(new_fn); } void c2bExportDialog::getDocumentsDirectory() { const QString dir(c2bUtils::documentAbsoluteName(ui.RelativeDocumentDirectory->isChecked(), ui.ExportFile->text(), ui.DocumentsDirectory->text(), QString())); QString new_dir(c2bFileDialog::getExistingDirectory(this, tr("Select documents directory"), dir)); if (!new_dir.isEmpty()) { new_dir = c2bUtils::documentDirName(ui.RelativeDocumentDirectory->isChecked(), ui.ExportFile->text(), new_dir); ui.DocumentsDirectory->setText(new_dir); } } void c2bExportDialog::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/bibeditor/#export-selected-entries"); } cb2bib-2.0.3/src/PaxHeaders/cb2Bib.h0000644000000000000000000000013215104461633013743 xustar0030 mtime=1762812827.630762572 30 atime=1762812828.042759324 30 ctime=1762812827.634762541 cb2bib-2.0.3/src/cb2Bib.h0000644000175000001440000000777415104461633015753 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef CB2BIB_H #define CB2BIB_H #include "ui_cb2Bib.h" #include #include #include class bibSearcher; class c2bBibMenu; class c2bBibParser; class c2bCiterWidget; class c2bClipEdit; class c2bEditor; class c2bNetworkQuery; class c2bPdfImport; class c2bSearchInFiles; class c2bSettings; class c2bTextBrowser; class cb2Bib : public QMainWindow { Q_OBJECT public: explicit cb2Bib(QWidget* parentw = 0); ~cb2Bib(); public slots: void show(); signals: void addedBibToFile(const QString&); void endedProcessing(bool status); private: QHash _openDocuments; QPointer _pdfImportP; QPointer _searchInFilesP; QString _dropped_document_file; QString _raw_input_data; QString _target_document_file; QString buttonStatusTip(const QString& ms, const QKeySequence& ks) const; Ui::cb2Bib ui; bool _connected; bool _is_check_repeated_done; bool _is_check_ssl_done; bool _modified; bool _tagged_view_mode; bool isReferenceRepeated(); c2bBibMenu* _bib_menu; c2bBibParser* _bpP; c2bCiterWidget* _citerP; c2bClipEdit* BibBrowser; c2bClipEdit* ClipEdit; c2bNetworkQuery* _netQP; c2bSettings* _settingsP; c2bTextBrowser* AboutBrowser; void annoteEditor(const QString& annotefile); void c2bParse(const QString& text); void c2bPreparse(const QString& text); void checkNetQuerySsl(); void closeEvent(QCloseEvent* qevent); void dragEnterEvent(QDragEnterEvent* qevent); void dropEvent(QDropEvent* qevent); void fileDroppedByUser(const QString& fn); void initAsBibTeXEditor(); void processingEnded(); void setBibMenu(); void setWidgetMapping(); void updateBibfile(const QString& fn); void updateViewButtons(); private slots: void abbreviationsEditor(); void addAuthors(); void addEditors(); void addMetadata(); void addToFile(bool ready); void anyPattern(); void bibEditor(const QString& bibtexfile, bibSearcher* searcher = 0); void bibModified(bool modified); void bookmarksEditor(); void c2bInit(); void checkRepeated(); void dataChanged(const QString& str); void deleteTmpBib(); void doSearchInFiles(const QString& string = QString(), const QString& fn = QString()); void fileDropped(const QString& fn); void forceDataChange(const QString& str); void guessFields(); void insertRegExp(); void linkClicked(const QUrl& link); void loadSettings(); void makeNetQuery(); void netQueryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib); void on_AddBibB_clicked(); void on_BibTeXDir_clicked(); void on_ConfigureB_clicked(); void on_ConnectB_clicked(); void on_EditBibTeXB_clicked(); void on_ExitB_clicked(); void on_MakeNetworkQueryB_clicked(); void on_PdfImportB_clicked(); void on_SearchInFilesB_clicked(); void on_ViewAboutB_clicked(); void on_ViewBibB_clicked(); void openAnnote(); void openFileDocument(); void postprocessBibTeX(); void preparseClipboard(); void readField(const QPoint& position); void regExpsEditor(); void restartEngine(); void savePattern(const QString& rx, const QString& rxname); void selectFile(); void setDocumentFilename(); void setTaggedClipEditMode(bool tagged); void setWindowTitle(); void showLink(const QUrl& link); void showMessage(const QString& ms); void toggleReferenceTabs(); void updateCheckRepeatedAction(); void updateOpenDocuments(QObject* obj); void updateOpenDocuments(const QString& old_name, const QString& new_name); }; #endif cb2bib-2.0.3/src/PaxHeaders/bookmarkPlugin.cpp0000644000000000000000000000013115104461633016176 xustar0030 mtime=1762812827.362764685 29 atime=1762812827.99875967 30 ctime=1762812827.366764654 cb2bib-2.0.3/src/bookmarkPlugin.cpp0000644000175000001440000000755715104461633020206 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bookmarkPlugin.h" #include "c2b.h" #include "c2bFileSystemWatcher.h" #include "c2bSettings.h" #include "c2bUtils.h" #include bookmarkPlugin::bookmarkPlugin(QWidget* parentw) : QMenu(parentw) { setObjectName(QString::fromUtf8("menuBookmarks")); setTitle(QApplication::translate("c2bEditor", "&Bookmarks", 0)); connect(c2bSettingsP, SIGNAL(newSettings()), this, SLOT(init())); _fsw = new c2bFileSystemWatcher(this); connect(_fsw, SIGNAL(fileChanged(QString)), this, SLOT(parseBookmarks())); init(); } bookmarkPlugin::~bookmarkPlugin() {} void bookmarkPlugin::init() { const QString nfn(c2bSettingsP->fileName("cb2Bib/NetworkFile")); if (nfn == _bookmark_file) return; if (QFileInfo::exists(nfn)) { if (!_bookmark_file.isEmpty()) _fsw->removePath(_bookmark_file); _bookmark_file = nfn; _fsw->addPath(_bookmark_file); } parseBookmarks(); } void bookmarkPlugin::parseBookmarks() { clear(); const QString bmf(c2bUtils::fileToString(_bookmark_file)); QStringList bookmarks(c2bUtils::split(bmf, QRegExp("[\\r\\n]"), _QT_6_KeepEmptyParts)); const QRegExp _bookmark("^editorbookmark="); const QRegExp _separator("^editorbookmark=\\s*$"); for (int i = 0; i < bookmarks.count(); ++i) { if (_separator.indexIn(bookmarks.at(i)) >= 0) { addSeparator(); continue; } if (_bookmark.indexIn(bookmarks.at(i)) >= 0) { c2bUtils::remove(bookmarks[i], _bookmark); const QStringList bm_parts(bookmarks.at(i).split('|', _QT_6_KeepEmptyParts)); if (bm_parts.count() != 4) { c2bUtils::warn(tr("bookmarkPlugin::parseBookmarks: Syntax error at '%1'").arg(bookmarks.at(i))); continue; } QAction* act = addAction(bm_parts.at(0), this, SLOT(openBookmark())); act->setData(bm_parts.at(1)); act->setStatusTip(QString("%1 [%2]").arg(bm_parts.at(0), bm_parts.at(1))); act->setShortcut(bm_parts.at(2)); act->setIcon(QIcon(iconProvider(bm_parts.at(1), bm_parts.at(3)))); } } addSeparator(); QAction* edit_bookmarks = addAction(tr("Edit Bookmarks"), this, SIGNAL(editBookmarks())); edit_bookmarks->setStatusTip(tr("Edit bookmarks")); edit_bookmarks->setIcon(QIcon(":/icons/icons/edit.png")); } QString bookmarkPlugin::iconProvider(const QString& fn, const QString& iconFile) { if (!iconFile.isEmpty()) return iconFile; if (QRegExp("\\.(tex|dvi)\\b", Qt::CaseInsensitive).indexIn(fn) >= 0) return ":/icons/icons/application-x-tex.png"; if (QRegExp("\\.(chm|djvu|pdf|ps)\\b", Qt::CaseInsensitive).indexIn(fn) >= 0) return ":/icons/icons/application-x-pdf.png"; if (QRegExp("\\.(htm|html|php)\\b", Qt::CaseInsensitive).indexIn(fn) >= 0) return ":/icons/icons/application-x-html.png"; if (QRegExp("\\.txt\\b", Qt::CaseInsensitive).indexIn(fn) >= 0) return ":/icons/icons/application-x-tex.png"; if (QRegExp("\\.bib\\b", Qt::CaseInsensitive).indexIn(fn) >= 0) return ":/icons/icons/cb2bib.png"; return ":/icons/icons/application-x-none.png"; } void bookmarkPlugin::openBookmark() { QAction* act = static_cast(sender()); if (act) { const QString fn(act->data().toString()); if (fn.endsWith(".bib")) // Open BiBTeX files internally emit openFile(fn); else c2bUtils::openFile(fn, parentWidget()); } } cb2bib-2.0.3/src/PaxHeaders/c2bBibHighlighter.h0000644000000000000000000000013215104461633016122 xustar0030 mtime=1762812827.518763455 30 atime=1762812828.042759324 30 ctime=1762812827.518763455 cb2bib-2.0.3/src/c2bBibHighlighter.h0000644000175000001440000000156415104461633020121 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BBIBHIGHLIGHTER_H #define C2BBIBHIGHLIGHTER_H #include #include /** BibTeX SyntaxHighLighter @author Pere Constans */ class c2bColors; class c2bBibHighlighter : public QSyntaxHighlighter { public: explicit c2bBibHighlighter(QTextDocument* doc); ~c2bBibHighlighter(); protected: virtual void highlightBlock(const QString& text); private: QColor text_color; QRegExp rx0; QRegExp rx1; QRegExp rx2; QRegExp rx3; c2bColors* c; }; #endif cb2bib-2.0.3/src/PaxHeaders/main.cpp0000644000000000000000000000013215104461633014137 xustar0030 mtime=1762812827.510763518 30 atime=1762812828.042759324 30 ctime=1762812827.510763518 cb2bib-2.0.3/src/main.cpp0000644000175000001440000001020015104461633016121 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "qtsingleapplication/src/qtsingleapplication.h" #include "qtsingleapplication/src/qtsinglecoreapplication.h" #include "c2bConfigure.h" #include "c2bConsole.h" #include "c2bSettings.h" #include "cb2Bib.h" #ifdef C2B_USE_QWEB #include "c2bAnnote.h" #endif int main(int argc, char* argv[]) { Q_INIT_RESOURCE(cb2bib); Q_INIT_RESOURCE(c2blib); c2bSettings* c2b_settings; // Delete before app, this avoids QVariant::save: unable to save type 67/64 int code(0); if (c2bSettings::isConsoleCheckMode(argc, argv)) { // Non GUI mode. Uses QCoreApplication, thus no graphic server connection is made. QCoreApplication app(argc, argv); app.setOrganizationName(C2B_ORGANIZATION); app.setApplicationName(C2B_APPLICATION); c2b_settings = c2bSettings::initSettings(); if (c2b_settings->loaded()) { c2bConsole c2B; c2B.load(); code = app.exec(); } delete c2b_settings; } else if (c2bSettings::isConsoleMode(argc, argv)) { // Non GUI mode. However, QApplication and not QCoreApplication is used // because c2bUtils::fromHtmlString requires QTextDocument, and // c2bSettings::decodeFilename() requires QFileDialog as a workaround // for proper filename display on Windows. QApplication app(argc, argv); app.setOrganizationName(C2B_ORGANIZATION); app.setApplicationName(C2B_APPLICATION); c2b_settings = c2bSettings::initSettings(); if (c2b_settings->loaded()) { c2bConsole c2B; c2B.load(); code = app.exec(); } delete c2b_settings; } else if (c2bSettings::isSingleApplicationMode(argc, argv)) { // Avoid connecting to the graphic server. On Windows it would create a void window. { QtSingleCoreApplication* capp = new QtSingleCoreApplication(argc, argv); const bool is_running = capp->sendMessage(QString()); delete capp; if (is_running) return code; } QtSingleApplication app(argc, argv); if (app.isRunning()) // Activate local peer return code; app.setQuitOnLastWindowClosed(false); app.setOrganizationName(C2B_ORGANIZATION); app.setApplicationName(C2B_APPLICATION); app.setWindowIcon(QIcon(":/icons/icons/cb2bib.ico")); c2b_settings = c2bSettings::initSettings(); if (c2b_settings->loaded()) { cb2Bib c2B; c2B.show(); QObject::connect(&app, SIGNAL(messageReceived(QString)), &c2B, SLOT(show())); code = app.exec(); } delete c2b_settings; } else { QApplication app(argc, argv); app.setOrganizationName(C2B_ORGANIZATION); app.setApplicationName(C2B_APPLICATION); app.setWindowIcon(QIcon(":/icons/icons/cb2bib.ico")); c2b_settings = c2bSettings::initSettings(); if (c2b_settings->loaded()) { if (c2b_settings->cl_cb2bib_import_mode) code = app.exec(); else if (c2b_settings->cl_configure) { c2bConfigure c2B; c2B.show(); code = app.exec(); } else if (c2b_settings->cl_view_annote) { #ifdef C2B_USE_QWEB c2bAnnote c2B; if (c2B.show()) code = app.exec(); #else fprintf(stdout, "cb2Bib Annote is disabled. Recompile using QtWebKit or QtWebEngine library.\n"); #endif } else { cb2Bib c2B; c2B.show(); code = app.exec(); } } delete c2b_settings; } return code; } cb2bib-2.0.3/src/PaxHeaders/c2bCitePatternLineEedit.cpp0000644000000000000000000000013115104461633017606 xustar0030 mtime=1762812827.378764559 29 atime=1762812827.99875967 30 ctime=1762812827.382764528 cb2bib-2.0.3/src/c2bCitePatternLineEedit.cpp0000644000175000001440000000524215104461633021603 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCitePatternLineEedit.h" #include "c2bUtils.h" #include #include c2bCitePatternLineEedit::c2bCitePatternLineEedit(QWidget* parentw) : c2bLineEdit(parentw) { a_citeid = new QAction(this); a_citeids_comma = new QAction(this); a_citeids_semicolon = new QAction(this); a_latex = new QAction(this); a_markdown = new QAction(this); c2bUtils::addSeparator(this); addAction(a_latex); addAction(a_markdown); c2bUtils::addSeparator(this); addAction(a_citeid); addAction(a_citeids_comma); addAction(a_citeids_semicolon); c2bUtils::addSeparator(this); a_citeid->setText(tr("Insert <>")); a_citeids_comma->setText(tr("Insert << |citeids|,>>")); a_citeids_semicolon->setText(tr("Insert << |citeids|;>>")); a_latex->setText(tr("LaTeX Command")); a_markdown->setText(tr("Markdown Command")); connect(a_citeid, SIGNAL(triggered()), this, SLOT(citeid())); connect(a_citeids_comma, SIGNAL(triggered()), this, SLOT(citeids_comma())); connect(a_citeids_semicolon, SIGNAL(triggered()), this, SLOT(citeids_semicolon())); connect(a_latex, SIGNAL(triggered()), this, SLOT(latex())); connect(a_markdown, SIGNAL(triggered()), this, SLOT(markdown())); connect(this, SIGNAL(textEdited(QString)), this, SLOT(check(QString))); setPlaceholderText(C2B_CITE_COMMAND_PATTERN); _citeids = QRegExp("^[^<]*<<[^\\|]*\\|citeids\\|[^>]*>>.*$"); } c2bCitePatternLineEedit::~c2bCitePatternLineEedit() {} void c2bCitePatternLineEedit::check(const QString& pattern) { if (!pattern.isEmpty() && ((_citeids.indexIn(pattern) == -1 && !pattern.contains(QLatin1String("<>"))) || pattern.count(QLatin1String("citeid")) > 1)) emit statusMessage(tr("Cite Command Pattern is misspecified")); else emit statusMessage(QString()); } void c2bCitePatternLineEedit::latex() { setText(C2B_CITE_COMMAND_PATTERN); } void c2bCitePatternLineEedit::markdown() { setText(QLatin1String("[<<@|citeids|;>>]")); } void c2bCitePatternLineEedit::citeid() { insert(QLatin1String("<>")); } void c2bCitePatternLineEedit::citeids_comma() { insert(QLatin1String("<< |citeids|,>>")); } void c2bCitePatternLineEedit::citeids_semicolon() { insert(QLatin1String("<< |citeids|;>>")); } cb2bib-2.0.3/src/PaxHeaders/c2bConfigure.h0000644000000000000000000000013215104461633015170 xustar0030 mtime=1762812827.558763139 30 atime=1762812828.042759324 30 ctime=1762812827.558763139 cb2bib-2.0.3/src/c2bConfigure.h0000644000175000001440000000370215104461633017163 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCONFIGURE_H #define C2BCONFIGURE_H #include "c2bColors.h" #include "ui_c2bConfigure.h" #include #include class c2bSettings; class c2bConfigure : public QDialog { Q_OBJECT public: explicit c2bConfigure(QWidget* parentw = 0); ~c2bConfigure(); void setPage(int index); protected slots: void FindReplaceDialog_Delete(); void FindReplaceDialog_Edit(); void FindReplaceDialog_New(); void accept(); void apply(); void changeContextColor(QTreeWidgetItem* item); void changePage(QListWidgetItem* current, QListWidgetItem* previous); void comboFamilyChanged(const QString& family); void comboSizeChanged(const QString& pt); void getAnnoteCssFile(); void getBibSearcherPdf2TextBin(); void getBrowserCssFile(); void getCacheDirectory(); void getExifToolBin(); void getFmClientCopyBin(); void getFmClientMoveBin(); void getJournalFile(); void getMathJaxHeaderFile(); void getNetworkFile(); void getPdfDirectory(); void getPdfImportPdf2TextBin(); void getPosLexiconFile(); void getPostprocessBibTeXBin(); void getPreparserBin(); void getRegularExpressionFile(); void help(); void showMessage(const QString& ms); void updateFindReplaceInputButtons(); private: QFont c2bMonoFont; QFont selectedFont(QFontComboBox* fc, QComboBox* sc) const; Ui::c2bConfigure ui; bool event(QEvent* qevent); c2bColors colors; c2bSettings* settings; void fontSelection(const QFont& f, QFontComboBox* fc, QComboBox* sc); void populateFontCombos(); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bCiterWidget.h0000644000000000000000000000013215104461633015461 xustar0030 mtime=1762812827.538763297 30 atime=1762812828.042759324 30 ctime=1762812827.538763297 cb2bib-2.0.3/src/c2bCiterWidget.h0000644000175000001440000000343315104461633017455 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITERWIDGET_H #define C2BCITERWIDGET_H #include "ui_c2bCiterWidget.h" #include class QLabel; class c2bCiterModel; class c2bCoreCiter; class c2bSettings; class c2bCiterWidget : public QWidget { Q_OBJECT public: explicit c2bCiterWidget(QWidget* parentw = 0); ~c2bCiterWidget(); public: void load(); void setTrayIcon(); public slots: void show(); void toggleVisible(); signals: void openAnnote(); void openFile(const QString& fn); private: QString _status_label; QStringList _bibtex_files; QSystemTrayIcon* _tray_icon; Ui::c2bCiterWidget ui; bool _clipboard_connected; c2bCiterModel* _citations; c2bCoreCiter* _citerP; c2bSettings* _settingsP; void reload(const c2bCiter::State& state); void setActions(); private slots: void citeReferences(); void doSearchInFiles(); void editReference(); void filterDataChanged(const QString& filter); void help(); void indexDocuments(); void openDirectory(); void openFile(); void openFiles(); void openUrl(); void reload(); void showLabel(); void showLabel(const QString& label); void showMessage(const QString& message); void toggleCb2Bib(); void toggleClipboard(); void toggleFullScreen(); void trayIconActivated(QSystemTrayIcon::ActivationReason r); void updatePatternFilter(const bool mode, const QString& pattern); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bLogWidget.ui0000644000000000000000000000007415104461330015321 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.190766041 cb2bib-2.0.3/src/c2bLogWidget.ui0000644000175000001440000000400015104461330017277 0ustar00constansusers00000000000000 Pere Constans c2bLogWidget 0 0 827 347 Process Log - cb2Bib 6 6 QFrame::StyledPanel QFrame::Raised true QFrame::HLine QFrame::Sunken Qt::Horizontal Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Help Log buttonBox rejected() c2bLogWidget reject() 797 330 830 305 cb2bib-2.0.3/src/PaxHeaders/clipboardPoll.h0000644000000000000000000000013215104461633015446 xustar0030 mtime=1762812827.634762541 30 atime=1762812828.042759324 30 ctime=1762812827.634762541 cb2bib-2.0.3/src/clipboardPoll.h0000644000175000001440000000476415104461633017452 0ustar00constansusers00000000000000/*************************************************************************** * clipboardPoll, modified by Pere Constans for cb2Bib, 2005 * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * * * Author and Copyright (C) 2003 by Lubos Lunak * Distributed under the GNU General Public License * * * This file is part of the KDE project * Copyright (C) 2003 by Lubos Lunak * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. ***************************************************************************/ #ifndef CLIPBOARDPOLL_H #define CLIPBOARDPOLL_H #include #include #include #include #undef Bool // Workaround for unqualified-id before 'int' for bool signal and slot /** @author Lubos Lunak */ class clipboardPoll : public QWidget { Q_OBJECT public: explicit clipboardPoll(QWidget* parentw = 0); ~clipboardPoll(); inline void startT(uint interval) { timer->start(interval); } inline void stopT() { timer->stop(); } signals: void clipboardChanged(bool selectionMode); protected: virtual bool x11Event(XEvent*); private slots: void timeout(); private: struct SelectionData { Atom atom; Atom sentinel_atom; Atom timestamp_atom; Window last_owner; bool owner_is_qt; Time last_change; bool waiting_for_timestamp; Time waiting_x_time; }; Atom xa_clipboard; Atom xa_timestamp; bool changedTimestamp(SelectionData& sData, const XEvent& ev); bool checkTimestamp(SelectionData& sData); QTimer* timer; SelectionData clipboard; SelectionData selection; void updateQtOwnership(SelectionData& sData); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bSaveRegExp.cpp0000644000000000000000000000013115104461633015612 xustar0029 mtime=1762812827.45476396 30 atime=1762812828.042759324 30 ctime=1762812827.458763928 cb2bib-2.0.3/src/c2bSaveRegExp.cpp0000644000175000001440000002060015104461633017602 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSaveRegExp.h" #include "c2b.h" #include "c2bSaveREHighlighter.h" #include "c2bSettings.h" #include "c2bUtils.h" #include /** \page regexpeditor Regular Expression Editor Once a manual processing is done, cb2Bib clipboard area contains the extraction tags, plus, possibly, some other cb2Bib tags introduced during the preprocessing (see \ref clipboard). The RegExp Editor will generate a guess regular expression or matching pattern usable for automated extractions. The cb2Bib matching patterns consist of four lines: a brief description, the reference type, an ordered list of captured fields, and the regular expression itself. \htmlonly
# cb2Bib GET_VERSION Pattern:
American Chemical Society Publications
article
journal volume pages year title author abstract
^(.+), (\d+) \(.+\), ([\d|\-|\s]+),(\d\d\d\d)\..+<NewLine3>(.+)<NewLine4>
(.+)<NewLine5>.+Abstract:<NewLine\d+>(.+)$
\endhtmlonly The Regular Expression Editor provides the basic skeleton and a set of predefined suggestions. The regular expressions follow a Perl-like sintax. There are, however, some slight differences and minor limitations. Information about the basics on the editing and working with Regular Expressions as used by cb2Bib can be found at the Qt document file \htmlonly Qt Documentation's QRegExp Class. \endhtmlonly Remember when creating and editing regular expressions: - Switch the clipboard mode to 'Tagged Clipboard Data', using the clipboard panel context menu. - Extract the bibliographic reference manually. On the clipboard panel will appear some cb2Bib tags that indicate which fields are being extracted. Once done, type Alt+I to enter to the regular expression editor. In the editor, there are the four line edits that define a cb2Bib pattern, one copy of the clipboard panel, and an information panel. The information panel displays possible issues, and, once everything is correct, the actual extracted fields. The clipboard panel highlights the captures for the current regular expression and current input text. - Patterns can be modified at any time by typing Alt+E to edit the regular expression file. Patterns are reloaded each time the automatic pattern recognition is started. This permits editing and testing. - cb2Bib processes sequentially the list of regular expressions as found in the regular expression file. It stops and picks the first match for the current input. Therefore, the order of the regular expressions is important. Consequently, to avoid possible clashing among similar patterns, consider sorting them from the most restrictive pattern to the less one. As a rule of thumb, the more captions it has the most restrictive a pattern is. - The cb2Bib proposed patterns are general, and not necessarily the most appropriate for a particular capture. E.g. tag pages becomes ([\\d|\\-|\\s]+), which considers digits, hyphens, and spaces. It must be modified accordingly for reference sources with, e.g., pages written as Roman ordinals. - Avoid whenever possible general patterns (.+). There is a risk that such a caption could include text intended for a posterior caption. This is why, sometimes, the cb2Bib proposed pattern is not hit by the input stream that originated it. Use, whenever possible, cb2Bib anchors like \ instead of \. They prevent (.+) captions to overextend. - To debug a large regular expression it might be useful to break it to the first capturing parenthesis. For instance, the above pattern will be \verbatim # cb2Bib GET_VERSION Pattern: American Chemical Society Publications article journal ^(.+), \endverbatim - Then, check if anything is captured and if this corresponds to journal. - Add on successive steps your set of captions and BibTeX fields. */ c2bSaveRegExp::c2bSaveRegExp(const QStringList& pattern, const QString& input, QWidget* parentw) : QDialog(parentw) { Q_ASSERT_X(pattern.count() == 3, "c2bSaveRegExp", "Expected exactly three strings for pattern"); ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); c2bSettings* settings(c2bSettingsP); ui.Input->setFont(settings->c2bMonoFont); ui.Type->setText(pattern.at(0)); ui.Fields->setText(pattern.at(1)); ui.RegExp->setText(pattern.at(2)); ui.Name->setFocus(); updateInput(input); _pattern_rx.setMinimal(true); _sreS = new c2bSaveREHighlighter(_pattern_rx, ui.Input->document()); setInformation(); connect(ui.Type, SIGNAL(textChanged(QString)), this, SLOT(setInformation())); connect(ui.Fields, SIGNAL(textChanged(QString)), this, SLOT(setInformation())); connect(ui.RegExp, SIGNAL(textChanged(QString)), this, SLOT(setInformation())); connect(ui.Input, SIGNAL(textChanged()), this, SLOT(inputMightHaveChanged())); } c2bSaveRegExp::~c2bSaveRegExp() {} void c2bSaveRegExp::setInformation() { QString info; bool can_save(false); const QStringList field_list(ui.Fields->text().split(' ', _QT_6_SkipEmptyParts)); const int fields(field_list.count()); _pattern_rx.setPattern(ui.RegExp->text()); const int captures(_pattern_rx.captureCount()); if (_pattern_rx.isValid() && fields > 0 && fields == captures && !ui.Type->text().isEmpty()) { info += tr("Reference type: %1\n").arg(ui.Type->text()); info += tr("Number of fields: %1\n").arg(fields); can_save = true; } else { if (ui.Type->text().isEmpty()) info += tr("[Error] Invalid pattern: empty reference type\n"); if (fields == 0) info += tr("[Error] Invalid pattern: no fields declared\n"); if (_pattern_rx.isValid()) { if (captures == 0) { if (_pattern_rx.pattern().isEmpty()) info += tr("[Error] Invalid pattern: empty regular expression\n"); else info += tr("[Error] Invalid pattern: no captures defined in the regular expression\n"); } else if (fields != captures) info += tr("[Error] Invalid pattern: declared %1 fields while the regular expression has %2 captures\n") .arg(fields) .arg(captures); } else info += tr("[Error] Invalid regular expression: %1\n").arg(_pattern_rx.errorString()); } if (can_save) { if (_pattern_rx.indexIn(ui.Input->toPlainText()) == -1 || _pattern_rx.matchedLength() < 1) info += tr("[Info] Regular expression does not match input text\n"); else { bibParser* bp = c2b::bibParser(); for (int i = 0; i < fields; ++i) { const QString& f = field_list.at(i); const QString v(bp->parse(f, _pattern_rx.cap(i + 1))); info += QString("[%1]: '%2'\n").arg(f, v); } } } ui.Information->setPlainText(info); ui.buttonBox->button(QDialogButtonBox::Save)->setEnabled(can_save); _sreS->rehighlight(); } void c2bSaveRegExp::updateInput(const QString& text) { if (!ui.Input->textCursor().hasSelection()) ui.Input->setPlainText(c2b::bibParser()->setTags(text)); } void c2bSaveRegExp::inputMightHaveChanged() { // Avoid recursively calling setInformation due to syntax highlighting if (_input_text == ui.Input->toPlainText()) return; _input_text = ui.Input->toPlainText(); setInformation(); } void c2bSaveRegExp::accept() { const QString rx(ui.Type->text() + '\n' + ui.Fields->text() + '\n' + ui.RegExp->text()); emit savePatternInfo(rx, ui.Name->text()); QDialog::accept(); } void c2bSaveRegExp::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/regexpeditor/"); } cb2bib-2.0.3/src/PaxHeaders/c2bConfigureFR.cpp0000644000000000000000000000013115104461633015752 xustar0030 mtime=1762812827.406764338 29 atime=1762812827.99875967 30 ctime=1762812827.406764338 cb2bib-2.0.3/src/c2bConfigureFR.cpp0000644000175000001440000000223215104461633017743 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bConfigureFR.h" #include c2bConfigureFR::c2bConfigureFR(QTreeWidgetItem* item, QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); itemFindReplace = item; ui.lineEditFind->setText(itemFindReplace->text(0)); ui.lineEditReplace->setText(itemFindReplace->text(1)); ui.lineEditDescription->setText(itemFindReplace->text(2)); ui.lineEditFind->setFocus(); } c2bConfigureFR::~c2bConfigureFR() {} void c2bConfigureFR::reject() { QDialog::reject(); } void c2bConfigureFR::accept() { itemFindReplace->setText(0, ui.lineEditFind->text()); itemFindReplace->setText(1, ui.lineEditReplace->text()); itemFindReplace->setText(2, ui.lineEditDescription->text()); QDialog::accept(); } cb2bib-2.0.3/src/PaxHeaders/c2bConfigure.cpp0000644000000000000000000000013115104461633015522 xustar0030 mtime=1762812827.402764369 29 atime=1762812827.99875967 30 ctime=1762812827.406764338 cb2bib-2.0.3/src/c2bConfigure.cpp0000644000175000001440000013536015104461633017524 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bConfigure.h" #include "c2b.h" #include "c2bConfigureFR.h" #include "c2bFileDialog.h" #include "c2bSettings.h" #include "c2bUtils.h" #include #include #include /** \page configuration Configuration

 

GET_TABLE_OF_CONTENTS

 

\section c2bconf_annote Configuring Annote - Annote Cascading Style Sheet (CSS) \n This file contains the style sheet to personalize the appearance of the HTML notes generated by the cb2Bib. The cb2Bib distribution includes the tex2html.css file as a CSS template. - MathJax Header File \n The mathematical notation in the text notes is displayed by \htmlonly MathJax, \endhtmlonly the successor of the \htmlonly jsMath \endhtmlonly Java Script library. Its location and configuration must be specified inside the HTML files in order to be known by the browser. Check and eventually edit the distribution file tex2html_local_mathjax_header.html. Should web script be preferred set script source to https://cdn.mathjax.org/mathjax/latest/MathJax.js. - Include CSS in HTML \n Styles for the notes will be included, if checked, into the HTML file. In this way, all the information, text and layout, is contained in one single file. - Use relative links \n If checked, linked local files will be set relative to the current HTML document. - Annote Viewer Fonts \n Selects default and monospaced fonts for the Annote viewer. Changes in the fonts might need restarting the viewer unless using some of the latest QtWebKit libraries. The viewer is disabled if cb2Bib was not compiled and linked against QtWebKit or QtWebEngine. Note also that fonts specified in the CSS prevail over this selection. \section c2bconf_bibtex Configuring BibTeX - Cite ID Pattern \n Specifies the pattern for formatting cite's ID. Predefined placeholders are available as a context menu, by right-clicking this edit line. Placeholders will be substituted by the actual reference field values. See \ref idplaceholders for descriptions. - Author and Editor Name Format \n Sets Authors and Editor names in abbreviated or full form, if the latter is available. - Journal Name Format \n Sets output journal names in abbreviated or full form. Note that this feature only works if journal names are found in the Journal Abbreviation List file. See \ref journalproc. - Number Separator \n Sets number separator, e.g., ' - ' or ' -- '. Spaces count. It applies to pages, multiple volume, number, and year cases. - Cite Command Pattern \n Specifies the pattern for formatting cite command. Predefined command patterns for LaTeX and Markdown (see \htmlonly Pandoc User's Guide) \endhtmlonly are available in the line context menu. Other, customized command patterns are also available, see \ref citeplaceholders for descriptions. - Convert entry strings to LaTeX \n If checked, cb2Bib converts special characters to LaTeX commands. Most BibTeX import filters do not process LaTeX escaped characters. Therefore, keeping this box unchecked can be appropriate when using cb2Bib as a temporary media to transfer references to non BibTeX reference managers. - Set 'title' in double braces \n If checked, it writes extra braces in title. This will keep capitalization as is, when processed by BibTeX. - Postprocess 'month' \n If checked, cb2Bib elaborates the 'month' string on a BibTeX fashion. E.g., 'April 1' becomes '"1~" # apr'. No processing is done if the input string is not written in English. - Try Heuristic Guess if recognition fails \n If checked, when automatic recognition fails, cb2Bib tries to catch some of the fields of the reference through an heuristic set of rules. See \ref heuristics. - Check Repeated On Save \n If checked, cb2Bib looks for existing references in the BibTeX directory similar to the one being saved. The search is based on exact cite ID match, or on reference contents, by considering title and author field values, or, if empty, booktitle and editor, and using the \htmlonly approximate string \endhtmlonly search pattern. If similar references are found, the current reference is not saved, and the similar ones are displayed. Pressing the save button one second time will proceed to actually saving the current reference. Note that this feature is not applied in command line mode, when using cb2bib --txt2bib or cb2bib --doc2bib. See also \ref keyboard. - External BibTeX Postprocessing \n Use this box to select a BibTeX postprocessing external tool. The name of the executable, the command arguments and the output file extension are required fields. Arguments, any number, are passed to the executable. For the sake of generality, it is required to specify the \%finput and \%foutput placeholders. The first one is later substituted by the current BibTeX filename. The second one is substituted by the current filename with the specified output extension. Caution: Be careful if using the same file extension for input and output, e.g., using bib because you want to use a beautifier or a sorting script. cb2Bib has no control on external disk modifications. Therefore, if the script failed, the input data would possibly be lost. See also \ref keyboard. \section c2bconf_clipboard Configuring Clipboard - Replace/Remove from Input Stream \n If checked, input stream is preprocessed by performing a customizable set of string substitutions/removals. This option is mainly intended to remove image HTML alt tags. Although not visible, alt tags reach the clipboard when selecting and copying text. Author lists with email icons may contain alt strings that would interfere with the author names processing. In addition, this option is also appropriate to help translating special characters to Unicode and LaTeX. Use it carefully, as to avoid unwanted or unsuspected substitutions. See also \ref clipboard. - External Clipboard Preparsing Command \n Preparses input stream through an external, user-defined tool. Use the box bellow to specify its name and path. cb2Bib executes the command tool_name tmp_inputfile tmp_outputfile. You might consider a wrapper shell script to fullfill this particular syntax requirement. Two examples, isi2bib and ris2bib are provided. To test them, make sure the \htmlonly BibUtils Package \endhtmlonly is available on your machine. Otherwise, modify these scripts according to your needs. See also \ref keyboard, \ref clipboard, and the examples \ref ex_isi_format and \ref ex_ris. - Perform always, as part of an automatic extraction \n Performs preparsing each time the recognition engine is invoked. Caution: cb2Bib, when not in disconnected mode, starts the recognition engine each time the clipboard changes. Therefore, it might send arbitrary data to the external parsing tool. The tool might not be prepared to handle 'any data' and might fall into a sort of 'infinite loop'. cb2Bib kills the external tool after a reasonable waiting. But, if the tool is called through a wrapper script, killing the script will not end the tool itself. Therefore, check this box only when needed. If you write your own preparser, design it as to write no data to output file whenever it can not process an input properly. When the preparser produces no data, cb2Bib sends instead the input stream to the recognition engine. In this way, preparsing and normal cb2Bib functioning will work harmoniously. - Do not show log \n If unchecked, the external process messages, and the input and output streams are shown in a log window. Showing output logs is useful for debugging purposes. - Add document metadata to Input Stream \n When checked, if the document linked to a reference contains relevant metadata, then metadata will be added to the current clipboard contents. The metadata is included at the time of adding the document to the current reference, e. g., when dropping a file into the cb2Bib panel. If the document has BibTeX information, cb2Bib will automatically set the corresponding fields. If it has not, but relevant bibliographic information is found, this data is only added to the clipboard panel. To insert it in the edit lines, activate the Heuristic Guess (Alt+G). The option Prepend or Append to the clipboard contents is provided for conveniently writing regular expressions considering metadata contents. File documents are linked to the references by the BibTeX tag 'file'. See also \ref metadata. \section c2bconf_documents Configuring Documents - Rename and Copy/Move document files to Directory \n If selected, each file 'drag and dropped' onto the cb2Bib main window is renamed to DocumentID.pdf (or DocumentID.ps, DocumentID.dvi, etc.) and moved to the storage directory. If unselected, the file URL is written to the file BibTeX keyword, without any renaming or moving of the file. The actual copy/move action is scheduled and performed once the reference is accepted, e.g., once it is saved. - Copy or Move document files \n Choose whether copy or move Network Files dropped onto the cb2Bib main window. See also Use External Network Client. - Set directory relative to the BibTeX File Directory \n If checked, the document file is copied/moved to the current BibTeX file directory. If the Documents Directory box contains a relative directory it will be added to the file name. For example, if it contains articles, files will be copied to /current_bibtex_path/articles/. An absolute path in the Documents Directory box will be ignored in this context. Note that the file dialog returns here relative file addresses. Consequently, only the necessary portion of the full name, instead of the fullpath filename, is written to the BibTeX entry. File retrieving from within the cb2Bib browser will be relative to the BibTeX file absolute location. \n Use this option if you plan to store in a same or a related directory the BibTeX and document files. This option is appropriate for storing bibliographic collections in removal devices. Likewise, when cb2Bib is launched in USB mode, by means of the command line switch --conf, the alternate option is not available. See \ref relnotes084 and \ref export_entries. - Insert BibTeX metadata to document files \n If checked, cb2Bib will write bibliographic metadata to the linked document, once the current reference is accepted and saved. See also \ref metadata. - Document ID Pattern \n Specifies the pattern for formatting the document's filenames. Predefined placeholders are available as a context menu, by right-clicking this edit line. Placeholders will be substituted by the actual reference field values. See \ref idplaceholders for descriptions. - ExifTool Metadata writer \n cb2Bib uses \htmlonly ExifTool \endhtmlonly for writing bibliographic metadata to the attached documents. Select here the ExifTool path name. On Windows, remember renaming exiftool(-k).exe to exiftool.exe for command line use. See also \ref metadata_write. \section c2bconf_files Configuring Files - Journal Abbreviation List File \n This file contains a list of journal names equivalences: a capital-letter acronym, standard abbreviated form, and full name of the journal. If an input journal name is recognized, cb2Bib will use the standard abbreviated form for the journal bibkey. If your usual journal were not within the distributed, default abbreviations.txt, you could edit this file, or point to a personalized abbreviation file. Note: Changes in the abbreviation file only take place after reestarting cb2Bib. See \ref journalproc. - Regular Expression List File \n The cb2Bib distribution includes the file regexps.txt with a few set of rules for reference extraction. This includes most of the scientific literature. Extracting from email alerts or publisher abstract pages is a volatile task. Information does not follow a standardized structure. Extraction pattern may then change as often as the web design needs to. Besides, such extraction from the clipboard is system dependent, in a way that produces different formatting of the text copies on different systems. You can use your personalized regexps.txt file, for testing, debugging -regular expressions are reloaded each time the automatic recognition engine executes-, and fullfiling your particular extraction needs. - Bookmarks and Network Query Info File \n The cb2Bib distribution includes the file netqinf.txt that contains bookmarks data, and server related information for bibliographic querying. Note that cb2Bib treats bibliographic queries as generalized net bookmarks. This allows accessing almost any online bibliographic resource. Check this file for implementations details and customization. - Browser Cascading Style Sheet (CSS) \n This file contains the style sheet to configure the appearance of the bibliographic references when viewed in browser mode. The cb2Bib distribution includes the references.css and references-dark.css file as a CSS examples. - Part Of Speech (POS) Lexicon \n This box must contain the address to the cb2Bib distribution file lexicon.pos. This file contains a set of patterns and related POS information required for indexing documents, i. e., to extract keywords from documents for the c2bCiter module. - Search In Files Cache Directory \n Directory containing internal data for Search In Files functionality. If an existing directory is selected cb2Bib will write all internal data on it. If otherwise, cache data will be written on the same directory from where BibTeX are searched. It might be, therefore, convenient to group all this files in a separate directory that does not need to be backup, and that can easily be deleted whenever desired. \section c2bconf_fonts Configuring Fonts - Font Selector \n Selects the main window and editor font family and size. - Context Colors \n Doubleclick on context color items to select syntax highlighter font color. Besides syntax highlighting, and to ease manual bibliographic extractions, cb2Bib has the following coloring convention. 'cb2Bib unrelevant text' colors non-word, non-digit, and cb2Bib's internal tags. 'cb2Bib relevant text' refers to the reference's year. 'cb2Bib highly relevant' attempts to guess text sectioning, highlighting 'abstract', 'introduction', and 'keywords'. \section c2bconf_network Configuring Network - Use External Network Client \n cb2Bib manages local and network files in an equivalent manner. Network file retrieving, however, requires sometimes password and/or cookies administration. The KDE desktop incorporates kfmclient utility. A command kfmclient (copy|move|exec) source [destination] permits copying or moving files, with kfmclient taking care of advanced browsing preferences. By checking this box, cb2Bib will use the specified file manger client. - Use Proxy \n If checked, cb2Bib will access the network through a proxy host. Set the Host name, the Port, and the proxy Type. A login dialog will appear if the proxy requires authentication. Login data is not stored, it must be entered at each session. - Perform Network Queries after automatic reference extractions \n Network queries can be used to complete a partial reference extraction. For instance, provided a reference 'J. Name, 25, 103' and an appropriate pattern to extract it, cb2Bib will attempt to complete the reference automatically. No query is performed if automatic reference extraction was tagged as BibTeX. - Download document if available \n If checked, cb2Bib downloads document files to the directory specified in Rename and Copy/Move document files to Directory. See also the file netqinf.txt for details. Download is scheduled and performed once the reference is accepted, e.g., once it is saved. Note that when document file is local, e.g., when PDFImport or switch --doc2bib is used, no document is downloaded. - Keep Query temporary files (Debug Only) \n cb2Bib may use up to three temporary files to perform a network query. If this box is checked, the temporary files are not deleted. This facilitates the testing and customization of the information file netqinf.txt. \section c2bconf_shortcuts Configuring Shortcuts - Customizes most key sequences for actions shortcuts. Concretely, cb2Bib specific actions are configurable, but not standard actions such as 'Open', 'Exit', 'Copy', or 'Paste', which are already predefined to the standard, specific key sequences for each platform. Shortcuts are customizable for the cb2Bib main panel, editor, and reference list actions. Single-key shortcuts, i.e., for manual reference extraction and shortcuts in c2bCiter, are non-configurable, since they they closely map non-translatable BibTeX keywords. \section c2bconf_utilities Configuring Utilities - To plain text converter \n Selects the external some_format_to_text tool that cb2Bib uses to convert document files prior to reference extraction and searching. cb2Bib executes the line command converter [options] inputfile tmp_output.txt, where [options] are user defined arguments. As a default, cb2Bib launches pdf2cb, a modified PDF to text utility found in the XPDF package. Modifications are available at xpdf/ directory in the cb2Bib sources. Default arguments are -q -f 1 -l 1 to extract only the first, title page when used within PDFImport, and -q, to convert the complete document when used within Search in Files. Appropriate for PDFImport could also be a document metadata extractor. Often metadata contains structured information regarding document authors, title, and source. A simple shell script wrapper could be the following any2text_search: \verbatim #!/bin/csh # Convert documents to text according to filename extension # any2text_search input_fn.ext output_fn.txt set ext = $1:e if ( $ext == 'djvu' ) then /usr/bin/djvutxt "$1" "$2" if ($status) exit 1 else if ( $ext == 'chm' ) then (/usr/local/bin/archmage -c text "$1" "$2") >& /dev/null if ($status) exit 1 else # If using pdf2cb /path/to/pdf2cb -q "$1" "$2" # If using pdftotex # /usr/bin/pdftotext -enc UTF-8 "$1" "$2" if ($status) exit 1 endif \endverbatim

 

*/ c2bConfigure::c2bConfigure(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags() | Qt::WindowMinMaxButtonsHint); resize(QSize(1, 1)); // Set it at minimum size settings = c2bSettingsP; for (int i = 0; i < ui.contentsWidget->count(); ++i) ui.contentsWidget->item(i)->setStatusTip(tr("Configure %1").arg(ui.contentsWidget->item(i)->text())); connect(ui.contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*))); ui.contentsWidget->setCurrentItem(ui.contentsWidget->item(settings->value("c2bConfigure/CurrentPage", 0).toInt())); ui.buttonBox->button(QDialogButtonBox::Apply)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Cancel)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Help)->setAutoDefault(false); connect(ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(apply())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); populateFontCombos(); // Annote ui.AnnoteCssFile->setText(settings->fileName("c2bAnnote/AnnoteCssFile")); connect(ui.AnnoteCssDir, SIGNAL(clicked()), this, SLOT(getAnnoteCssFile())); ui.MathJaxHeaderFile->setText(settings->fileName("c2bAnnote/MathJaxHeaderFile")); connect(ui.MathJaxDir, SIGNAL(clicked()), this, SLOT(getMathJaxHeaderFile())); ui.IncludeCSS->setChecked(settings->value("c2bAnnote/IncludeCSS").toBool()); ui.UseRelativeLinks->setChecked(settings->value("c2bAnnote/UseRelativeLinks").toBool()); fontSelection(settings->value("c2bAnnote/Font").value(), ui.af_familycombo, ui.af_psizecombo); fontSelection(settings->value("c2bAnnote/FixedFont").value(), ui.aff_familycombo, ui.aff_psizecombo); #ifndef C2B_USE_QWEB ui.AnnoteViewerFont->setDisabled(true); ui.AnnoteViewerFixedFont->setDisabled(true); #endif // BibTeX ui.CiteIdPattern->setText(settings->value("cb2Bib/CiteIdPattern").toString()); ui.UseAbbreviatedNames->setChecked(!settings->value("cb2Bib/UseFullNames").toBool()); ui.UseFullNames->setChecked(settings->value("cb2Bib/UseFullNames").toBool()); ui.SetJournalsToAbbreviated->setChecked(!settings->value("cb2Bib/SetJournalsToFullname").toBool()); ui.SetJournalsToFullname->setChecked(settings->value("cb2Bib/SetJournalsToFullname").toBool()); ui.PageNumberSeparator->setText(settings->value("cb2Bib/PageNumberSeparator").toString()); ui.CiteCommandPattern->setText(settings->value("cb2Bib/CiteCommandPattern").toString()); ui.ConvertReferenceToLaTeX->setChecked(settings->value("cb2Bib/ConvertReferenceToLaTeX").toBool()); ui.UseDoubleBraces->setChecked(settings->value("cb2Bib/UseDoubleBraces").toBool()); ui.PostprocessMonth->setChecked(settings->value("cb2Bib/PostprocessMonth").toBool()); ui.DoHeuristicGuess->setChecked(settings->value("cb2Bib/DoHeuristicGuess").toBool()); ui.CheckRepeatedOnSave->setChecked(settings->value("cb2Bib/CheckRepeatedOnSave").toBool()); ui.PostprocessBibTeXBin->setText(settings->fileName("cb2Bib/PostprocessBibTeXBin")); ui.PostprocessBibTeXArg->setText(settings->value("cb2Bib/PostprocessBibTeXArg").toString()); ui.PostprocessBibTeXExt->setText(settings->value("cb2Bib/PostprocessBibTeXExt").toString()); connect(ui.CiteCommandPattern, SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); connect(ui.PostprocessBibTeXDir, SIGNAL(clicked()), this, SLOT(getPostprocessBibTeXBin())); // Clipboard ui.FindReplaceInput->setChecked(settings->value("cb2Bib/FindReplaceInput").toBool()); connect(ui.FindReplaceInput, SIGNAL(toggled(bool)), this, SLOT(updateFindReplaceInputButtons())); updateFindReplaceInputButtons(); QStringList FindReplaceInputList(settings->value("cb2Bib/FindReplaceInputList").toStringList()); QStringList::Iterator i = FindReplaceInputList.begin(); while (i != FindReplaceInputList.end()) { const QStringList spLine((*i).split('|')); new QTreeWidgetItem(ui.FindReplaceList, spLine); ++i; } connect(ui.FindReplaceList, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(FindReplaceDialog_Edit())); connect(ui.FindReplaceList, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(updateFindReplaceInputButtons())); connect(ui.FRNew, SIGNAL(clicked()), this, SLOT(FindReplaceDialog_New())); connect(ui.FREdit, SIGNAL(clicked()), this, SLOT(FindReplaceDialog_Edit())); connect(ui.FRDelete, SIGNAL(clicked()), this, SLOT(FindReplaceDialog_Delete())); ui.AddMetadata->setChecked(settings->value("cb2Bib/AddMetadata").toBool()); const QString PreAppendMetadata(settings->value("cb2Bib/PreAppendMetadata").toString()); if (PreAppendMetadata == "prepend") ui.Prepend->setChecked(true); else if (PreAppendMetadata == "append") ui.Append->setChecked(true); if (ui.AddMetadata->isChecked()) ui.PreAppendMetadata->setEnabled(true); else ui.PreAppendMetadata->setEnabled(false); connect(ui.AddMetadata, SIGNAL(toggled(bool)), ui.PreAppendMetadata, SLOT(setEnabled(bool))); ui.PreparserAutomatic->setChecked(settings->value("cb2Bib/PreparserAutomatic").toBool()); ui.PreparserShowLog->setChecked(!settings->value("cb2Bib/PreparserShowLog").toBool()); ui.PreparserBin->setText(settings->fileName("cb2Bib/PreparserBin")); connect(ui.PreparserDir, SIGNAL(clicked()), this, SLOT(getPreparserBin())); // Documents ui.MovePdf->setChecked(settings->value("cb2Bib/MovePdf").toBool()); ui.PdfDirectory->setText(settings->fileName("cb2Bib/PdfDirectory")); connect(ui.PdfDir, SIGNAL(clicked()), this, SLOT(getPdfDirectory())); const QString CopyMovePdf(settings->value("cb2Bib/CopyMovePdf").toString()); if (CopyMovePdf == "copy") ui.Copy->setChecked(true); else if (CopyMovePdf == "move") ui.Move->setChecked(true); if (ui.MovePdf->isChecked()) { ui.RenameCopyMovePdf->setEnabled(true); ui.DocumentIdPatternBox->setEnabled(true); } else { ui.RenameCopyMovePdf->setEnabled(false); ui.DocumentIdPatternBox->setEnabled(false); } connect(ui.MovePdf, SIGNAL(toggled(bool)), ui.RenameCopyMovePdf, SLOT(setEnabled(bool))); ui.RelativePdfDirectory->setChecked(settings->value("cb2Bib/RelativePdfDirectory").toBool()); ui.RelativePdfDirectory->setDisabled(settings->isUsbConfiguredMode()); ui.InsertMetadata->setChecked(settings->value("cb2Bib/InsertMetadata").toBool()); ui.DocumentIdPattern->setDocumentIDEdit(); ui.DocumentIdPattern->setText(settings->value("cb2Bib/DocumentIdPattern").toString()); connect(ui.MovePdf, SIGNAL(toggled(bool)), ui.DocumentIdPatternBox, SLOT(setEnabled(bool))); ui.ExifToolBin->setText(settings->fileName("cb2Bib/ExifToolBin")); connect(ui.ExifToolDir, SIGNAL(clicked()), this, SLOT(getExifToolBin())); // Files ui.JournalFile->setText(settings->fileName("cb2Bib/JournalFile")); connect(ui.JournalDir, SIGNAL(clicked()), this, SLOT(getJournalFile())); ui.RegularExpressionFile->setText(settings->fileName("cb2Bib/RegularExpressionFile")); connect(ui.RegularExpressionDir, SIGNAL(clicked()), this, SLOT(getRegularExpressionFile())); ui.NetworkFile->setText(settings->fileName("cb2Bib/NetworkFile")); connect(ui.NetworkDir, SIGNAL(clicked()), this, SLOT(getNetworkFile())); ui.BrowserCssFile->setText(settings->fileName("cb2Bib/BrowserCssFile")); connect(ui.BrowserCssDir, SIGNAL(clicked()), this, SLOT(getBrowserCssFile())); ui.PosLexiconFile->setText(settings->fileName("cb2Bib/PosLexiconFile")); connect(ui.PosLexiconDir, SIGNAL(clicked()), this, SLOT(getPosLexiconFile())); ui.CacheDirectory->setText(settings->fileName("cb2Bib/CacheDirectory")); connect(ui.CacheDir, SIGNAL(clicked()), this, SLOT(getCacheDirectory())); // Fonts c2bMonoFont = settings->c2bMonoFont; ui.samplelineedit->setFont(c2bMonoFont); fontSelection(c2bMonoFont, ui.familycombo, ui.psizecombo); #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) connect(ui.familycombo, SIGNAL(textActivated(QString)), this, SLOT(comboFamilyChanged(QString))); connect(ui.psizecombo, SIGNAL(textActivated(QString)), this, SLOT(comboSizeChanged(QString))); #else connect(ui.familycombo, SIGNAL(activated(QString)), this, SLOT(comboFamilyChanged(QString))); connect(ui.psizecombo, SIGNAL(activated(QString)), this, SLOT(comboSizeChanged(QString))); #endif colors.loadColors(settings); QHashIterator cit(colors.colorList); while (cit.hasNext()) { cit.next(); QTreeWidgetItem* item = new QTreeWidgetItem(QStringList(cit.key())); item->setData(0, Qt::DecorationRole, *cit.value()); item->setData(0, Qt::ForegroundRole, *cit.value()); ui.ColorList->insertTopLevelItem(0, item); } ui.ColorList->header()->setSortIndicatorShown(false); ui.ColorList->viewport()->setCursor(QCursor(static_cast(Qt::PointingHandCursor))); ui.ColorList->sortItems(0, Qt::AscendingOrder); connect(ui.ColorList, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(changeContextColor(QTreeWidgetItem*))); connect(ui.ColorList, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(changeContextColor(QTreeWidgetItem*))); // Network ui.FmClient->setChecked(settings->value("cb2Bib/FmClient").toBool()); ui.clientGroupBox->setEnabled(settings->value("cb2Bib/FmClient").toBool()); ui.FmClientCopyBin->setText(settings->fileName("cb2Bib/FmClientCopyBin")); ui.FmClientCopyArg->setText(settings->value("cb2Bib/FmClientCopyArg").toString()); ui.FmClientMoveBin->setText(settings->fileName("cb2Bib/FmClientMoveBin")); ui.FmClientMoveArg->setText(settings->value("cb2Bib/FmClientMoveArg").toString()); connect(ui.FmClientCopyDir, SIGNAL(clicked()), this, SLOT(getFmClientCopyBin())); connect(ui.FmClientMoveDir, SIGNAL(clicked()), this, SLOT(getFmClientMoveBin())); ui.UseProxy->setChecked(settings->value("cb2Bib/UseProxy").toBool()); ui.proxyGroupBox->setEnabled(settings->value("cb2Bib/UseProxy").toBool()); ui.ProxyHostName->setText(settings->value("cb2Bib/ProxyHostName", QString()).toString()); QValidator* proxyPortValidator = new QIntValidator(0, 999999, this); ui.ProxyPort->setValidator(proxyPortValidator); ui.ProxyPort->setText(settings->value("cb2Bib/ProxyPort").toString()); ui.ProxyType->setCurrentIndex(settings->value("cb2Bib/ProxyType").toInt()); ui.AutomaticQuery->setChecked(settings->value("cb2Bib/AutomaticQuery").toBool()); ui.AutomaticPdfDownload->setChecked(settings->value("cb2Bib/AutomaticPdfDownload").toBool()); ui.KeepTmpNQFiles->setChecked(settings->value("cb2Bib/KeepTmpNQFiles").toBool()); // Shortcuts ui.cb2BibShortcuts->setShortcutNames("Shortcuts/cb2Bib/", settings->shortcutNames()); connect(ui.cb2BibShortcuts, SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); ui.EditorShortcuts->setShortcutNames("Shortcuts/Editor/", settings->shortcutNames()); connect(ui.EditorShortcuts, SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); // Utilities ui.PdfImportPdf2TextBin->setText(settings->fileName("c2bPdfImport/Pdf2TextBin")); ui.PdfImportPdf2TextArg->setText(settings->value("c2bPdfImport/Pdf2TextArg").toString()); connect(ui.PdfImportPdf2TextDir, SIGNAL(clicked()), this, SLOT(getPdfImportPdf2TextBin())); ui.BibSearcherPdf2TextBin->setText(settings->fileName("c2bBibSearcher/Pdf2TextBin")); ui.BibSearcherPdf2TextArg->setText(settings->value("c2bBibSearcher/Pdf2TextArg").toString()); connect(ui.BibSearcherPdf2TextDir, SIGNAL(clicked()), this, SLOT(getBibSearcherPdf2TextBin())); } c2bConfigure::~c2bConfigure() {} void c2bConfigure::setPage(int index) { ui.contentsWidget->setCurrentItem(ui.contentsWidget->item(index)); } void c2bConfigure::accept() { apply(); QDialog::accept(); } void c2bConfigure::apply() { settings->setValue("c2bConfigure/CurrentPage", ui.contentsWidget->row(ui.contentsWidget->currentItem())); // Annote settings->setFilename("c2bAnnote/AnnoteCssFile", ui.AnnoteCssFile->text()); settings->setFilename("c2bAnnote/MathJaxHeaderFile", ui.MathJaxHeaderFile->text()); settings->setValue("c2bAnnote/IncludeCSS", ui.IncludeCSS->isChecked()); settings->setValue("c2bAnnote/UseRelativeLinks", ui.UseRelativeLinks->isChecked()); settings->setValue("c2bAnnote/Font", selectedFont(ui.af_familycombo, ui.af_psizecombo)); settings->setValue("c2bAnnote/FixedFont", selectedFont(ui.aff_familycombo, ui.aff_psizecombo)); // BibTeX settings->setValue("cb2Bib/CiteIdPattern", ui.CiteIdPattern->text()); settings->setValue("cb2Bib/UseFullNames", ui.UseFullNames->isChecked()); settings->setValue("cb2Bib/SetJournalsToFullname", ui.SetJournalsToFullname->isChecked()); settings->setValue("cb2Bib/PageNumberSeparator", ui.PageNumberSeparator->text()); settings->setValue("cb2Bib/CiteCommandPattern", ui.CiteCommandPattern->text()); settings->setValue("cb2Bib/ConvertReferenceToLaTeX", ui.ConvertReferenceToLaTeX->isChecked()); settings->setValue("cb2Bib/UseDoubleBraces", ui.UseDoubleBraces->isChecked()); settings->setValue("cb2Bib/PostprocessMonth", ui.PostprocessMonth->isChecked()); settings->setValue("cb2Bib/DoHeuristicGuess", ui.DoHeuristicGuess->isChecked()); settings->setValue("cb2Bib/CheckRepeatedOnSave", ui.CheckRepeatedOnSave->isChecked()); settings->setFilename("cb2Bib/PostprocessBibTeXBin", ui.PostprocessBibTeXBin->text()); settings->setValue("cb2Bib/PostprocessBibTeXArg", ui.PostprocessBibTeXArg->text()); settings->setValue("cb2Bib/PostprocessBibTeXExt", ui.PostprocessBibTeXExt->text()); // Clipboard QStringList FindReplaceInputList; QTreeWidgetItemIterator it(ui.FindReplaceList); while (*it) { QTreeWidgetItem* item(*it); FindReplaceInputList.append(QString("%1|%2|%3").arg(item->text(0), item->text(1), item->text(2))); ++it; } if (FindReplaceInputList.isEmpty()) { FindReplaceInputList = QString(C2B_FIND_REPLACE_LIST).split("^e"); settings->setValue("cb2Bib/FindReplaceInput", false); } else settings->setValue("cb2Bib/FindReplaceInput", ui.FindReplaceInput->isChecked()); settings->setValue("cb2Bib/FindReplaceInputList", FindReplaceInputList); QString PreAppendMetadata; if (ui.Prepend->isChecked()) PreAppendMetadata = "prepend"; else PreAppendMetadata = "append"; settings->setValue("cb2Bib/PreAppendMetadata", PreAppendMetadata); settings->setValue("cb2Bib/AddMetadata", ui.AddMetadata->isChecked()); settings->setValue("cb2Bib/PreparserAutomatic", ui.PreparserAutomatic->isChecked()); settings->setValue("cb2Bib/PreparserShowLog", !ui.PreparserShowLog->isChecked()); settings->setFilename("cb2Bib/PreparserBin", ui.PreparserBin->text()); // Documents QString CopyMovePdf; if (ui.Copy->isChecked()) CopyMovePdf = "copy"; else CopyMovePdf = "move"; settings->setValue("cb2Bib/CopyMovePdf", CopyMovePdf); settings->setValue("cb2Bib/MovePdf", ui.MovePdf->isChecked()); settings->setFilename("cb2Bib/PdfDirectory", ui.PdfDirectory->text()); settings->setValue("cb2Bib/RelativePdfDirectory", ui.RelativePdfDirectory->isChecked()); settings->setValue("cb2Bib/InsertMetadata", ui.InsertMetadata->isChecked()); settings->setValue("cb2Bib/DocumentIdPattern", ui.DocumentIdPattern->text()); settings->setFilename("cb2Bib/ExifToolBin", ui.ExifToolBin->text()); // Files settings->setFilename("cb2Bib/JournalFile", ui.JournalFile->text()); settings->setFilename("cb2Bib/RegularExpressionFile", ui.RegularExpressionFile->text()); settings->setFilename("cb2Bib/NetworkFile", ui.NetworkFile->text()); settings->setFilename("cb2Bib/BrowserCssFile", ui.BrowserCssFile->text()); settings->setFilename("cb2Bib/PosLexiconFile", ui.PosLexiconFile->text()); settings->setFilename("cb2Bib/CacheDirectory", ui.CacheDirectory->text()); // Fonts settings->setValue("cb2Bib/MonoFont", c2bMonoFont); colors.saveColors(settings); // Network settings->setValue("cb2Bib/FmClient", ui.FmClient->isChecked()); settings->setFilename("cb2Bib/FmClientCopyBin", ui.FmClientCopyBin->text()); settings->setFilename("cb2Bib/FmClientMoveBin", ui.FmClientMoveBin->text()); settings->setValue("cb2Bib/FmClientCopyArg", ui.FmClientCopyArg->text().simplified()); settings->setValue("cb2Bib/FmClientMoveArg", ui.FmClientMoveArg->text().simplified()); settings->setValue("cb2Bib/UseProxy", ui.UseProxy->isChecked()); settings->setValue("cb2Bib/ProxyHostName", ui.ProxyHostName->text().trimmed()); settings->setValue("cb2Bib/ProxyPort", ui.ProxyPort->text().trimmed()); settings->setValue("cb2Bib/ProxyType", ui.ProxyType->currentIndex()); settings->setValue("cb2Bib/AutomaticQuery", ui.AutomaticQuery->isChecked()); settings->setValue("cb2Bib/AutomaticPdfDownload", ui.AutomaticPdfDownload->isChecked()); settings->setValue("cb2Bib/KeepTmpNQFiles", ui.KeepTmpNQFiles->isChecked()); // Shortcuts settings->setKeysequences(ui.cb2BibShortcuts->modifiedKeysequences()); settings->setKeysequences(ui.EditorShortcuts->modifiedKeysequences()); // Utilities settings->setValue("c2bPdfImport/Pdf2TextArg", ui.PdfImportPdf2TextArg->text().simplified()); settings->setFilename("c2bPdfImport/Pdf2TextBin", ui.PdfImportPdf2TextBin->text()); settings->setValue("c2bBibSearcher/Pdf2TextArg", ui.BibSearcherPdf2TextArg->text().simplified()); settings->setFilename("c2bBibSearcher/Pdf2TextBin", ui.BibSearcherPdf2TextBin->text()); // Notify settings settings->notify(); } void c2bConfigure::comboFamilyChanged(const QString& family) { ui.samplelineedit->setFont(QFont(family, ui.psizecombo->currentText().toInt())); c2bMonoFont.setFamily(family); } void c2bConfigure::comboSizeChanged(const QString& pt) { ui.samplelineedit->setFont(QFont(ui.familycombo->currentText(), pt.toInt())); c2bMonoFont.setPointSize(pt.toInt()); } void c2bConfigure::FindReplaceDialog_Delete() { QTreeWidgetItem* item(ui.FindReplaceList->currentItem()); delete item; item = ui.FindReplaceList->currentItem(); if (item) item->setSelected(true); updateFindReplaceInputButtons(); } void c2bConfigure::FindReplaceDialog_Edit() { QTreeWidgetItem* item(ui.FindReplaceList->currentItem()); if (item) { c2bConfigureFR* frD(new c2bConfigureFR(item, this)); frD->exec(); delete frD; } } void c2bConfigure::FindReplaceDialog_New() { QStringList newlist; newlist << QString() << QString() << QString(); QTreeWidgetItem* fri(new QTreeWidgetItem(ui.FindReplaceList, newlist)); c2bConfigureFR* frD(new c2bConfigureFR(fri, this)); if (frD->exec() != QDialog::Accepted) delete fri; delete frD; } void c2bConfigure::updateFindReplaceInputButtons() { if (!ui.FindReplaceInput->isChecked()) { ui.FindReplaceList->setEnabled(false); ui.FRNew->setEnabled(false); ui.FREdit->setEnabled(false); ui.FRDelete->setEnabled(false); return; } else { ui.FindReplaceList->setEnabled(true); ui.FRNew->setEnabled(true); if (ui.FindReplaceList->topLevelItemCount() > 0) { ui.FREdit->setEnabled(true); ui.FRDelete->setEnabled(true); } else { ui.FREdit->setEnabled(false); ui.FRDelete->setEnabled(false); } } } void c2bConfigure::getAnnoteCssFile() { const QString fn(ui.AnnoteCssFile->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, tr("Select CSS filename"), fn, tr("Cascading Style Sheets (*.css);;All (*)"))); if (!new_fn.isEmpty()) ui.AnnoteCssFile->setText(new_fn); } void c2bConfigure::getMathJaxHeaderFile() { const QString fn(ui.MathJaxHeaderFile->text()); const QString new_fn( c2bFileDialog::getOpenFilename(this, tr("Select MathJax filename"), fn, tr("HTML Header (*.html);;All (*)"))); if (!new_fn.isEmpty()) ui.MathJaxHeaderFile->setText(new_fn); } void c2bConfigure::getJournalFile() { const QString fn(ui.JournalFile->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, tr("Select a filename (Restart to apply changes)"), fn, tr("cb2Bib Journal Lists (*.txt);;All (*)"))); if (!new_fn.isEmpty()) ui.JournalFile->setText(new_fn); } void c2bConfigure::getRegularExpressionFile() { const QString fn(ui.RegularExpressionFile->text()); const QString new_fn(c2bFileDialog::getFilename(this, QString(), fn, tr("cb2Bib RegExp Lists (*.txt);;All (*)"))); if (!new_fn.isEmpty()) ui.RegularExpressionFile->setText(new_fn); } void c2bConfigure::getNetworkFile() { const QString fn(ui.NetworkFile->text()); const QString new_fn( c2bFileDialog::getFilename(this, QString(), fn, tr("cb2Bib Network Query Info (*.txt);;All (*)"))); if (!new_fn.isEmpty()) ui.NetworkFile->setText(new_fn); } void c2bConfigure::getBrowserCssFile() { const QString fn(ui.BrowserCssFile->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, tr("Select a filename (Restart browser to apply changes)"), fn, tr("Cascading Style Sheets (*.css);;All (*)"))); if (!new_fn.isEmpty()) ui.BrowserCssFile->setText(new_fn); } void c2bConfigure::getFmClientCopyBin() { const QString fn(ui.FmClientCopyBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("File Manager Client executable (*)"))); if (!new_fn.isEmpty()) ui.FmClientCopyBin->setText(new_fn); } void c2bConfigure::getPreparserBin() { const QString fn(ui.PreparserBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("External Parser executable (*)"))); if (!new_fn.isEmpty()) ui.PreparserBin->setText(new_fn); } void c2bConfigure::getFmClientMoveBin() { const QString fn(ui.FmClientMoveBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("File Manager Client executable (*)"))); if (!new_fn.isEmpty()) ui.FmClientMoveBin->setText(new_fn); } void c2bConfigure::getPostprocessBibTeXBin() { const QString fn(ui.PostprocessBibTeXBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("BibTeX Postprocess executable (*)"))); if (!new_fn.isEmpty()) ui.PostprocessBibTeXBin->setText(new_fn); } void c2bConfigure::getPdfImportPdf2TextBin() { const QString fn(ui.PdfImportPdf2TextBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("PDF to text converter (*)"))); if (!new_fn.isEmpty()) ui.PdfImportPdf2TextBin->setText(new_fn); } void c2bConfigure::getBibSearcherPdf2TextBin() { const QString fn(ui.BibSearcherPdf2TextBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("PDF to text converter (*)"))); if (!new_fn.isEmpty()) ui.BibSearcherPdf2TextBin->setText(new_fn); } void c2bConfigure::getExifToolBin() { const QString fn(ui.ExifToolBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("ExifTool (*)"))); if (!new_fn.isEmpty()) ui.ExifToolBin->setText(new_fn); } void c2bConfigure::getPosLexiconFile() { const QString fn(ui.PosLexiconFile->text()); const QString new_fn( c2bFileDialog::getFilename(this, QString(), fn, tr("cb2Bib Part Of Speech Lexicon (*.pos);;All (*)"))); if (!new_fn.isEmpty()) ui.PosLexiconFile->setText(new_fn); } void c2bConfigure::getCacheDirectory() { const QString new_dir( c2bFileDialog::getExistingDirectory(this, tr("Select a cache directory"), ui.CacheDirectory->text())); if (!new_dir.isEmpty()) ui.CacheDirectory->setText(new_dir); } void c2bConfigure::getPdfDirectory() { const QString dir(c2bUtils::documentAbsoluteName(ui.RelativePdfDirectory->isChecked(), settings->fileName("cb2Bib/BibTeXFile"), ui.PdfDirectory->text(), QString())); QString new_dir(c2bFileDialog::getExistingDirectory(this, tr("Select documents directory"), dir)); if (!new_dir.isEmpty()) { new_dir = c2bUtils::documentDirName(ui.RelativePdfDirectory->isChecked(), settings->fileName("cb2Bib/BibTeXFile"), new_dir); ui.PdfDirectory->setText(new_dir); } } void c2bConfigure::populateFontCombos() { QList sizes(QFontDatabase::standardSizes()); QList::Iterator it(sizes.begin()); while (it != sizes.end()) { ui.psizecombo->insertItem(0, QString::number(*it)); ui.af_psizecombo->insertItem(0, QString::number(*it)); ui.aff_psizecombo->insertItem(0, QString::number(*it)); it++; } } void c2bConfigure::fontSelection(const QFont& f, QFontComboBox* fc, QComboBox* sc) { fc->setCurrentFont(f); const int p_font_size(f.pointSize()); int i(0); while (i < sc->count()) { if (sc->itemText(i) == QString::number(p_font_size)) { sc->setCurrentIndex(i); break; } i++; } } QFont c2bConfigure::selectedFont(QFontComboBox* fc, QComboBox* sc) const { QFont f(fc->currentFont()); f.setPointSize(sc->currentText().toInt()); return f; } void c2bConfigure::changeContextColor(QTreeWidgetItem* item) { const QColor newColor(QColorDialog::getColor(item->foreground(0).color(), this)); if (newColor.isValid()) { item->setData(0, Qt::ForegroundRole, newColor); item->setData(0, Qt::DecorationRole, newColor); colors.updateColor(newColor, item->text(0)); } } void c2bConfigure::changePage(QListWidgetItem* current, QListWidgetItem* previous) { if (!current) current = previous; setWindowTitle(tr("Configure %1 - cb2Bib").arg(current->text())); ui.pagesWidget->setCurrentIndex(ui.contentsWidget->row(current)); } void c2bConfigure::showMessage(const QString& ms) { ui.statusBar->showMessage(ms, C2B_MESSAGE_TIME); } bool c2bConfigure::event(QEvent* qevent) { if (qevent->type() == QEvent::StatusTip) { ui.statusBar->showMessage(static_cast(qevent)->tip()); return true; } else return QDialog::event(qevent); } void c2bConfigure::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/configuration/#configuring-" + ui.contentsWidget->currentItem()->text().toLower()); } cb2bib-2.0.3/src/PaxHeaders/c2bSaveREHighlighter.h0000644000000000000000000000013115104461633016552 xustar0030 mtime=1762812827.606762761 30 atime=1762812828.042759324 29 ctime=1762812827.61076273 cb2bib-2.0.3/src/c2bSaveREHighlighter.h0000644000175000001440000000154215104461633020546 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSAVEREHIGHLIGHTER_H #define C2BSAVEREHIGHLIGHTER_H #include #include /** Save RegExp SyntaxHighLighter @author Pere Constans */ class c2bColors; class c2bSaveREHighlighter : public QSyntaxHighlighter { public: c2bSaveREHighlighter(QRegExp& rx, QTextDocument* doc); ~c2bSaveREHighlighter(); protected: virtual void highlightBlock(const QString& text); private: QColor text_color; QRegExp& _current_rx; c2bColors* c; }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bConfigureFR.ui0000644000000000000000000000007415104461330015605 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.186766073 cb2bib-2.0.3/src/c2bConfigureFR.ui0000644000175000001440000001027015104461330017571 0ustar00constansusers00000000000000 Pere Constans c2bConfigureFR 0 0 666 151 0 0 Edit Find-Replace - cb2Bib 6 6 Qt::LeftToRight true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok false Qt::Horizontal QSizePolicy::Expanding 271 20 QFrame::HLine QFrame::Sunken Qt::Horizontal 0 6 Description: Find: Replace: c2bLineEdit QLineEdit
c2bLineEdit.h
lineEditFind lineEditReplace lineEditDescription buttonBox rejected() c2bConfigureFR reject() 637 119 104 117 buttonBox accepted() c2bConfigureFR accept() 558 122 24 118
cb2bib-2.0.3/src/PaxHeaders/c2bAnnote.h0000644000000000000000000000013115104461633014472 xustar0030 mtime=1762812827.514763487 29 atime=1762812827.99875967 30 ctime=1762812827.518763455 cb2bib-2.0.3/src/c2bAnnote.h0000644000175000001440000000205415104461633016465 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BANNOTE_H #define C2BANNOTE_H #include class c2bFileSystemWatcher; class c2bSettings; class c2bWebBrowser; class texToHtml; class c2bAnnote : public QMainWindow { Q_OBJECT public: explicit c2bAnnote(QWidget* parentw = 0); ~c2bAnnote(); bool show(); private: QString _annote_filename; QString _html_filename; c2bFileSystemWatcher* _fsw; c2bSettings* _settingsP; c2bWebBrowser* _view_port; texToHtml* _t2h; private slots: void annote(); void configure(); void edit(); void help(); void loadSettings(); void setWindowTitle(const QString& title); void showMessage(const QString& ms); void update(); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bEditor.ui0000644000000000000000000000007415104461330014662 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.186766073 cb2bib-2.0.3/src/c2bEditor.ui0000644000175000001440000002454015104461330016653 0ustar00constansusers00000000000000 Pere Constans c2bEditor 0 0 801 600 Editor - cb2Bib 0 0 801 30 &Help &Edit &View &Settings &File Tools Qt::Horizontal TopToolBarArea false :/icons/icons/filesave22.png:/icons/icons/filesave22.png Save Save :/icons/icons/filesaveas22.png:/icons/icons/filesaveas22.png Save As... Save As Save As Save as... :/icons/icons/exec22.png:/icons/icons/exec22.png Exec :/icons/icons/fileclose22.png:/icons/icons/fileclose22.png Close Document Close Document Close Document Close document :/icons/icons/exit.png:/icons/icons/exit.png Exit Exit cb2Bib Exit cb2Bib Exit cb2Bib :/icons/icons/help16.png:/icons/icons/help16.png Editor Help Editor Help Editor Help Editor context help :/icons/icons/cb2bib22.png:/icons/icons/cb2bib22.png Toggle cb2Bib Toggle cb2Bib Toggle cb2Bib F2 Set LyX Pipe Set active LyX pipe Set LyX pipe Set active LyX pipe true :/icons/icons/edit22.png:/icons/icons/edit22.png Toggle Editing and Browsing Toggle Editing and Browsing Toggle Editing and Browsing Toggle editing and browsing modes false :/icons/icons/viewZoomIn.png:/icons/icons/viewZoomIn.png Zoom In Zoom in false :/icons/icons/viewZoomOut.png:/icons/icons/viewZoomOut.png Zoom Out Zoom out false :/icons/icons/cb2bib22.png:/icons/icons/cb2bib22.png cb2Bib Help cb2Bib Help cb2Bib Help cb2Bib context help Shift+F1 :/icons/icons/configure.png:/icons/icons/configure.png cb2Bib Settings cb2Bib Settings cb2Bib Settings cb2Bib settings :/icons/icons/fileopen22.png:/icons/icons/fileopen22.png Open Open Open document false false :/icons/icons/configure_bibtex.png:/icons/icons/configure_bibtex.png Export Entries Export Entries Export Entries Export selected entries false cb2bib-2.0.3/src/PaxHeaders/c2bNetworkQuery.h0000644000000000000000000000013115104461633015725 xustar0029 mtime=1762812827.58276295 30 atime=1762812828.042759324 30 ctime=1762812827.586762919 cb2bib-2.0.3/src/c2bNetworkQuery.h0000644000175000001440000000203115104461633017713 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BNETWORKQUERY_H #define C2BNETWORKQUERY_H #include "c2bUtils.h" #include class c2bNetworkQuery : public networkQuery { Q_OBJECT public: explicit c2bNetworkQuery(bibParser* bp, QObject* parento = 0); c2bNetworkQuery(bibParser* bp, network* net, QObject* parento = 0); ~c2bNetworkQuery(); protected: bool checkQueryFile(const QString& fn) const override; inline QString fromHtmlString(const QString& str, const bool addMetadata = false) const override { return c2bUtils::fromHtmlString(str, addMetadata); } bool openFile(const QString& fn) const override { return c2bUtils::openFile(fn); } }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bPdfImport.h0000644000000000000000000000013215104461633015153 xustar0030 mtime=1762812827.586762919 30 atime=1762812828.042759324 30 ctime=1762812827.590762887 cb2bib-2.0.3/src/c2bPdfImport.h0000644000175000001440000000266315104461633017153 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BPDFIMPORT_H #define C2BPDFIMPORT_H #include "ui_c2bPdfImport.h" #include class c2bSettings; class c2bPdfImport : public QDialog { Q_OBJECT public: explicit c2bPdfImport(QWidget* parentw = 0); ~c2bPdfImport(); QString processedFile; public slots: void processNext(); void referenceExtacted(bool status); void show(); void showMessage(const QString& ms); signals: void fileProcessed(const QString& filename); void saveReferenceRequest(); void setClipboardDisabled(bool disable); void textProcessed(const QString& text); protected: bool event(QEvent* qevent); void dragEnterEvent(QDragEnterEvent* qevent); void dropEvent(QDropEvent* qevent); private slots: void abort(); void help(); void loadSettings(); void processOneFile(); void saveSettings(); void selectFiles(); private: QPushButton* buttonProcess; QPushButton* buttonSelectFiles; Ui::c2bPdfImport ui; bool c2bAutomaticQuery; bool m_aborted; c2bSettings* settings; void processDocument(); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bTextEdit.h0000644000000000000000000000013215104461633015001 xustar0030 mtime=1762812827.622762635 30 atime=1762812828.042759324 30 ctime=1762812827.626762604 cb2bib-2.0.3/src/c2bTextEdit.h0000644000175000001440000000523715104461633017001 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BTEXTEDIT_H #define C2BTEXTEDIT_H #include class c2bSettings; class c2bTextEdit : public QPlainTextEdit { Q_OBJECT public: explicit c2bTextEdit(QWidget* parentw = 0); ~c2bTextEdit(); QAction* convertSelection2LaTeXAction; QAction* convertSelection2UnicodeAction; QAction* journalsToAbbreviatedAction; QAction* journalsToAlternateAbbreviatedAction; QAction* journalsToAlternateFullAction; QAction* journalsToFullAction; QAction* pasteCurrentBibTeXAction; QAction* toggleWordWrappingAction; QAction* updateMetadataAction; void cursorPosition(int* line_number, int* line_position) const; void setBibTeXActions(); void setLaTeXActions(); void updatePlainText(const QString& text); inline const QString editorFilename() const { return _editor_filename; } void setEditorFilename(const QString& fn) { _editor_filename = fn; } signals: void overwriteModeChanged(); public slots: void toggleWordWrapping(); protected slots: void convert2LaTeX(); void convert2Unicode(); protected: void contextMenuEvent(QContextMenuEvent* qevent); void keyPressEvent(QKeyEvent* qevent); void resizeEvent(QResizeEvent* qevent); private: QColor _line_number_area_color; QColor* _line_number_color_p; QString _editor_filename; QWidget* _line_number_area; c2bSettings* _settingsP; int lineNumberAreaWidth(); void lineNumberAreaPaintEvent(QPaintEvent* qevent); private slots: void loadSettings(); void updateLineNumberAreaWidth(); void updateLineNumberArea(const QRect& qrect, int dy); friend class LineNumberArea; }; /*************************************************************************** * Line number area (From CodeEditor Qt's example) ***************************************************************************/ class LineNumberArea : public QWidget { public: explicit LineNumberArea(c2bTextEdit* editor) : QWidget(editor) { _editor = editor; } ~LineNumberArea() {} QSize sizeHint() const { return QSize(_editor->lineNumberAreaWidth(), 0); } protected: void paintEvent(QPaintEvent* qevent) { _editor->lineNumberAreaPaintEvent(qevent); } private: c2bTextEdit* _editor; }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bCiterWidget.cpp0000644000000000000000000000013115104461633016013 xustar0030 mtime=1762812827.390764464 29 atime=1762812827.99875967 30 ctime=1762812827.390764464 cb2bib-2.0.3/src/c2bCiterWidget.cpp0000644000175000001440000003002115104461633020001 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterWidget.h" #include "c2b.h" #include "c2bCiterModel.h" #include "c2bClipboard.h" #include "c2bCollectionIndex.h" #include "c2bCoreCiter.h" #include "c2bFileDialog.h" #include "c2bSettings.h" #include "c2bUtils.h" #include #include #include c2bCiterWidget::c2bCiterWidget(QWidget* parentw) : QWidget(parentw) { ui.setupUi(this); ui.clipboardIcon->setVisible(true); ui.filterIcon->setVisible(false); _citerP = new c2bCoreCiter(this); _tray_icon = 0; setActions(); _settingsP = c2bSettingsP; resize(_settingsP->value("c2bCiter/size", size()).toSize()); move(_settingsP->value("c2bCiter/position", pos()).toPoint()); _clipboard_connected = true; _citations = new c2bCiterModel(this); connect(_citations, SIGNAL(statusLabel(QString)), this, SLOT(showLabel(QString))); connect(_citations, SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); connect(c2b::clipboard(), SIGNAL(cbDataChanged(QString)), this, SLOT(filterDataChanged(QString))); connect(ui.citationsView, SIGNAL(activated(QModelIndex)), _citations, SLOT(selectCitation(QModelIndex))); connect(ui.citationsView, SIGNAL(citeReferences()), this, SLOT(citeReferences())); connect(ui.citationsView, SIGNAL(editReference()), this, SLOT(editReference())); connect(ui.citationsView, SIGNAL(hideCiter()), this, SLOT(hide())); connect(ui.citationsView, SIGNAL(openAnnote()), this, SIGNAL(openAnnote())); connect(ui.citationsView, SIGNAL(openFile()), this, SLOT(openFile())); connect(ui.citationsView, SIGNAL(openUrl()), this, SLOT(openUrl())); connect(ui.citationsView, SIGNAL(patternFilterChanged(bool,QString)), this, SLOT(updatePatternFilter(bool,QString))); connect(ui.citationsView, SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); } c2bCiterWidget::~c2bCiterWidget() { if (!isFullScreen()) { _settingsP->setValue("c2bCiter/position", pos()); _settingsP->setValue("c2bCiter/size", size()); } _settingsP->setValue("c2bCiter/format", static_cast(_citations->lastCitationFormat())); } void c2bCiterWidget::load() { _bibtex_files.clear(); if (_settingsP->cl_citer_filenames.count() == 0) _bibtex_files = c2bUtils::filesInDir(QFileInfo(_settingsP->fileName("cb2Bib/BibTeXFile")).absolutePath(), QStringList() << "*.bib"); else for (int i = 0; i < _settingsP->cl_citer_filenames.count(); ++i) _bibtex_files += c2bUtils::filesInDir(_settingsP->cl_citer_filenames.at(i), QStringList() << "*.bib"); c2bCiter::State state; state.format = static_cast(_settingsP->value("c2bCiter/format", state.format).toInt()); reload(state); } void c2bCiterWidget::reload() { const c2bCiter::State state(ui.citationsView->currentState()); reload(state); } void c2bCiterWidget::reload(const c2bCiter::State& state) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); updatePatternFilter(false, QString()); if (_bibtex_files.count() == 1) setWindowTitle( tr("%1 - cb2Bib").arg(QDir::toNativeSeparators(QFileInfo(_bibtex_files.at(0)).absoluteFilePath()))); else if (_bibtex_files.count() > 1) setWindowTitle(tr("%1 - cb2Bib").arg(QDir::toNativeSeparators(QFileInfo(_bibtex_files.at(0)).absolutePath()))); else setWindowTitle(tr("Citer - cb2Bib")); ui.citationsView->reloadModel(_citations, _bibtex_files, state); QApplication::restoreOverrideCursor(); } void c2bCiterWidget::toggleVisible() { if (isVisible()) hide(); else show(); } void c2bCiterWidget::show() { if (isHidden()) QWidget::show(); raise(); activateWindow(); ui.citationsView->setFocus(); } void c2bCiterWidget::setTrayIcon() { _tray_icon = new QSystemTrayIcon(this); _tray_icon->setIcon(QIcon(":/icons/icons/cb2bib.ico")); _tray_icon->setToolTip("c2bBib Citer"); QMenu* tray_icon_menu = new QMenu(this); foreach (QAction* a, actions()) { tray_icon_menu->addAction(a); } _tray_icon->setContextMenu(tray_icon_menu); _tray_icon->show(); connect(_tray_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason))); } void c2bCiterWidget::trayIconActivated(QSystemTrayIcon::ActivationReason r) { if (r == QSystemTrayIcon::Context) return; show(); } void c2bCiterWidget::setActions() { QAction* a; a = new QAction(this); a->setText(tr("Citer Help")); a->setShortcut(QKeySequence(QKeySequence::HelpContents)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(help())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Open Directory")); a->setShortcut(QKeySequence(QKeySequence::Open)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(openDirectory())); a = new QAction(this); a->setText(tr("Open Files")); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) a->setShortcut(QKeySequence(Qt::ALT | Qt::Key_O)); #else a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_O)); #endif addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(openFiles())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Refresh")); a->setShortcut(QKeySequence(QKeySequence::Refresh)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(reload())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Search In Files")); a->setShortcut(QKeySequence(QKeySequence::Find)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(doSearchInFiles())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Set LyX Pipe")); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) a->setShortcut(QKeySequence(Qt::ALT | Qt::Key_L)); #else a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_L)); #endif addAction(a); connect(a, SIGNAL(triggered()), _citerP, SLOT(setLyXPipe())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Toggle cb2Bib")); a->setShortcut(QKeySequence(Qt::Key_F2)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(toggleCb2Bib())); a = new QAction(this); a->setText(tr("Toggle Clipboard")); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) a->setShortcut(QKeySequence(Qt::ALT | Qt::Key_C)); #else a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_C)); #endif addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(toggleClipboard())); a = new QAction(this); a->setText(tr("Toggle Full Screen")); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) a->setShortcut(QKeySequence(Qt::ALT | Qt::Key_F)); #else a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_F)); #endif addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Index Documents")); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(indexDocuments())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Exit")); a->setShortcut(QKeySequence(QKeySequence::Quit)); addAction(a); connect(a, SIGNAL(triggered()), c2b::instance(), SLOT(exitRequested())); } void c2bCiterWidget::openDirectory() { QString dir; if (_bibtex_files.count() > 0) dir = _bibtex_files.at(0); dir = c2bFileDialog::getExistingDirectory(this, tr("Select BibTeX directory"), dir); if (dir.isEmpty()) return; _bibtex_files = c2bUtils::filesInDir(dir, QStringList() << "*.bib"); reload(); } void c2bCiterWidget::openFiles() { QString dir; if (_bibtex_files.count() > 0) dir = _bibtex_files.at(0); const QStringList fns( c2bFileDialog::getOpenFilenames(this, "Select BibTeX filenames", dir, "BibTeX (*.bib);;All (*)")); if (fns.count() > 0) { _bibtex_files = fns; reload(); } } void c2bCiterWidget::doSearchInFiles() { const QString fn(_citations->isKeywordView() ? QString() : _citations->dataBibTeXFile(ui.citationsView->currentIndex())); if (fn.isEmpty()) showMessage(tr("No active reference.")); else c2b::doSearchInFiles(QString(), fn); } void c2bCiterWidget::toggleCb2Bib() { if (c2b::mainWidget()->isVisible()) c2b::mainWidget()->hide(); else c2bUtils::setWidgetOnTop(c2b::mainWidget()); } void c2bCiterWidget::toggleClipboard() { _clipboard_connected = !_clipboard_connected; ui.clipboardIcon->setVisible(_clipboard_connected); if (_clipboard_connected) showMessage(tr("Filter set to clipboard contents.")); } void c2bCiterWidget::toggleFullScreen() { if (isFullScreen()) showNormal(); else showFullScreen(); } void c2bCiterWidget::indexDocuments() { c2bCollectionIndex* ci(new c2bCollectionIndex(0)); ci->setAttribute(Qt::WA_DeleteOnClose); ci->show(); ci->index(); } void c2bCiterWidget::filterDataChanged(const QString& filter) { if (_clipboard_connected && isVisible()) { const QString p(c2bUtils::toAscii(filter, c2bUtils::Collation).simplified()); updatePatternFilter(false, p); ui.citationsView->setPatternFilter(p); } } void c2bCiterWidget::updatePatternFilter(const bool mode, const QString& pattern) { ui.filterIcon->setVisible(mode); if (mode) showLabel(tr("Filter: %1_").arg(pattern)); else { if (pattern.isEmpty()) showLabel(_citations->isKeywordView() ? tr("Glossary of terms") : pattern); else showLabel(tr("Filter: %1").arg(pattern)); } } void c2bCiterWidget::citeReferences() { const QStringList k(_citations->dataSelectedCiteIds()); if (k.count() > 0) { hide(); _citerP->cite(k); } else showMessage(tr("No selected references.")); } void c2bCiterWidget::editReference() { if (_citations->isKeywordView()) { showMessage(tr("No active reference.")); return; } const QString r(_citations->dataBibTeXPosition(ui.citationsView->currentIndex())); if (r.isEmpty()) showMessage(tr("No active reference.")); else emit openFile(r); } void c2bCiterWidget::openFile() { if (_citations->count() == 0) return; if (_citations->isKeywordView()) { showMessage(tr("No active reference.")); return; } const QString f(_citations->dataFile(ui.citationsView->currentIndex())); if (f.isEmpty()) showMessage(tr("No File entry in this reference.")); else { showMessage(tr("Opening %1").arg(f)); c2bUtils::openFile(f, parentWidget()); } } void c2bCiterWidget::openUrl() { if (_citations->count() == 0) return; if (_citations->isKeywordView()) { showMessage(tr("No active reference.")); return; } const QString u(_citations->dataUrl(ui.citationsView->currentIndex())); if (u.isEmpty()) showMessage(tr("No URL entry in this reference.")); else { showMessage(tr("Opening %1").arg(QUrl::fromPercentEncoding(u.toUtf8()))); c2bUtils::openFile(u, parentWidget()); } } void c2bCiterWidget::showLabel() { ui.statusBar->showMessage(_status_label, 0); } void c2bCiterWidget::showLabel(const QString& label) { _status_label = label; ui.statusBar->showMessage(_status_label, 0); } void c2bCiterWidget::showMessage(const QString& message) { QTimer::singleShot(C2B_MESSAGE_TIME, this, SLOT(showLabel())); ui.statusBar->showMessage(message, 0); } void c2bCiterWidget::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/c2bciter/"); } cb2bib-2.0.3/src/PaxHeaders/c2bCiterModel.cpp0000644000000000000000000000013115104461633015630 xustar0030 mtime=1762812827.386764496 29 atime=1762812827.99875967 30 ctime=1762812827.386764496 cb2bib-2.0.3/src/c2bCiterModel.cpp0000644000175000001440000007073415104461633017635 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterModel.h" #include #include "c2b.h" #include #include namespace { template class ascending { public: explicit ascending(const T& data) : _data(data) {} inline bool operator()(const int i, const int j) { return _data.at(i) < _data.at(j); } private: const T& _data; }; } // namespace c2bCiterModel::c2bCiterModel(QObject* parento) : QAbstractTableModel(parento) { _first_column_color = QApplication::palette().color(QPalette::Active, QPalette::Base).darker(110); _clear(); } void c2bCiterModel::loadCitations(const QStringList& fns) { emit layoutAboutToBeChanged(); _clear(); _analyzer.reload(); for (int i = 0; i < fns.count(); ++i) _add_citations(fns.at(i)); _set_table_data(); _set_sort_indices(); _update_format(); emit layoutChanged(); emit statusMessage(tr("Loaded %1 references from %2 files.").arg(_citation_count).arg(fns.count())); } void c2bCiterModel::loadCitations(const QString& fn) { emit layoutAboutToBeChanged(); _clear(); _analyzer.reload(); _add_citations(fn); _set_table_data(); _set_sort_indices(); _update_format(); emit layoutChanged(); emit statusMessage(tr("Loaded %1 references.").arg(_citation_count)); } void c2bCiterModel::reloadCitations(const QStringList& fns, const c2bCiter::State& state, QModelIndex* current_index) { emit layoutAboutToBeChanged(); _clear(); _analyzer.reload(); for (int i = 0; i < fns.count(); ++i) _add_citations(fns.at(i)); _set_table_data(); _set_sort_indices(); _update_format(state.format); const int current_item(_current_item(state.index_data)); _update_current_index(current_item, current_index); _history.saveCurrentState(_format, _filter, current_item, current_index, _fstring); emit layoutChanged(); emit statusMessage(tr("Loaded %1 references from %2 files.").arg(_citation_count).arg(fns.count())); } QVariant c2bCiterModel::data(const QModelIndex& i, int role) const { if (role == Qt::DisplayRole) return (this->*_display_ptr)(i.row(), i.column()); else if (role == Qt::DecorationRole) { if (_format == c2bCiter::K && i.column() == 0) return QVariant(QIcon(":/icons/icons/bullet.png")); if (i.column() == 0) { if (_is_selected.at(_offset(i.row()))) return QVariant(QIcon(":/icons/icons/citer_citation_checked.png")); else return QVariant(QIcon(":/icons/icons/citer_citation.png")); } return QVariant(); } else if (role == Qt::BackgroundRole) { if (i.column() == 0 && _column_count > 1 && _format != c2bCiter::K) return _first_column_color; else return QVariant(); } else return QVariant(); } QStringList c2bCiterModel::dataSelectedCiteIds() const { QStringList ids; for (int i = 0; i < _citation_count; ++i) if (_is_selected.at(_map_yajt.at(i))) ids.append(_citeId.at(_map_yajt.at(i))); return ids; } void c2bCiterModel::setPatternFilter(const QString& pattern, QModelIndex* current_index, const c2bCiter::Format format) { _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); const QStringList word(c2bUtils::split(pattern, c2bUtils::nonLetter, _QT_6_SkipEmptyParts)); _filter = word.count() > 0 ? c2bCiter::Pattern : c2bCiter::None; _format = format; if (_filter == c2bCiter::Pattern) { _fstring = pattern; if (_format == c2bCiter::K) { int j(0); for (int i = 0; i < _keyword_count; ++i) { const QString& str = _analyzer.sentence(i); bool mf(true); for (int w = 0; w < word.count(); ++w) if (!str.contains(word.at(w), Qt::CaseSensitive)) { mf = false; break; } if (mf) _map_filter[j++] = i; } _row_count = j; } else { for (int i = 0; i < _citation_count; ++i) { _matches_filter[i] = true; const QString& str = _search_string.at(i); for (int w = 0; w < word.count(); ++w) if (!str.contains(word.at(w), Qt::CaseSensitive)) { _matches_filter[i] = false; break; } } } } else _fstring.clear(); _update_format(_format == c2bCiter::R ? _history.lastCitationFormat() : _format); _update_current_index(_format == c2bCiter::K ? _history.lastKeyword() : _history.lastCitation(), current_index); emit layoutChanged(); } void c2bCiterModel::setSelectedFilter(QModelIndex* current_index) { emit statusLabel(tr("Selected")); _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); for (int i = 0; i < _citation_count; ++i) _matches_filter[i] = _is_selected.at(i); _filter = c2bCiter::Selected; _fstring.clear(); _update_format(_history.lastCitationFormat()); _update_current_index(_history.lastSelectionCitation(), current_index); emit layoutChanged(); } void c2bCiterModel::setRelatedFilter(const QString& documentfn, QModelIndex* current_index, const c2bCiter::Format format) { _analyzer.setSimilarDocuments(documentfn); if (_analyzer.similarCount() == 0) { emit statusMessage(tr("No related references.")); return; } emit statusLabel(tr("Related to '%1'").arg(_title.at(_file.value(documentfn)))); _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); for (int i = 0; i < _citation_count; ++i) _matches_filter[i] = false; const int sc(_analyzer.similarCount()); _related_count = 0; for (int i = 0; i < sc; ++i) { // Note that data in collectionAnalyzer index might not match // BibTeX files data (outdated index or users browsing // particular BibTeX file sets). Use full path document // filenames to set a mapping. const int j(_file.value(_analyzer.similar(i), -1)); if (j == -1) { _analyzer.skipSimilarDocument(i); continue; } _matches_filter[j] = true; _map_filter[i] = j; ++_related_count; } _filter = c2bCiter::Related; _fstring = documentfn; _update_format(format); _update_current_index(_history.lastCitation(), current_index); emit layoutChanged(); } void c2bCiterModel::setKeywordFilter(const QString& keyword, QModelIndex* current_index) { _analyzer.setKeywordDocuments(keyword); if (_analyzer.documentCount() == 0) { emit statusMessage(tr("No related references.")); return; } emit statusLabel(tr("Related to '%1'").arg(keyword)); _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); for (int i = 0; i < _citation_count; ++i) _matches_filter[i] = false; const int dc(_analyzer.documentCount()); for (int i = 0; i < dc; ++i) { // See comment at c2bCiterModel::setRelatedFilter const int j(_file.value(_analyzer.document(i), -1)); if (j == -1) continue; _matches_filter[j] = true; } _filter = c2bCiter::Keyword; _fstring = keyword; _update_format(_history.lastCitationFormat()); _update_current_index(_history.lastKeyword(), current_index); emit layoutChanged(); } void c2bCiterModel::setDocumentFilter(const QString& documentfn, QModelIndex* current_index) { _analyzer.setDocumentKeywords(documentfn); const int nk(_analyzer.keywordCount()); if (nk == 0) { emit statusMessage(tr("No keywords from this reference.")); return; } emit statusLabel(tr("Keywords from '%1'").arg(_title.at(_file.value(documentfn)))); _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); int j(0); for (int i = 0; i < nk; ++i) _map_filter[j++] = _analyzer.keywordid(i); _row_count = j; _filter = c2bCiter::Document; _fstring = documentfn; _update_format(c2bCiter::K); _update_current_index(_history.lastKeyword(), current_index); emit layoutChanged(); } void c2bCiterModel::setGlossaryView(QModelIndex* current_index) { _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); _filter = c2bCiter::None; _fstring.clear(); _update_format(c2bCiter::K); _update_current_index(_history.lastKeyword(), current_index); emit patternFilterChanged(_fstring); emit layoutChanged(); } void c2bCiterModel::selectCitation(const QModelIndex& i) { if (_format == c2bCiter::K) return; _is_selected[_offset(i.row())] = !_is_selected.at(_offset(i.row())); emit layoutChanged(); } QList c2bCiterModel::sizeHintForColumns() const { QList sizes; switch (_format) { case c2bCiter::AJYT: sizes.append(std::min(20, _author_max_length + 2)); sizes.append(20); sizes.append(6); sizes.append(100); break; case c2bCiter::IT: sizes.append(12); sizes.append(100); break; case c2bCiter::JYA: sizes.append(std::min(25, _journal_max_length)); sizes.append(6); sizes.append(100); break; case c2bCiter::K: sizes.append(100); break; case c2bCiter::R: sizes.append(9); sizes.append(100); break; case c2bCiter::T: sizes.append(100); break; case c2bCiter::YAJT: default: sizes.append(8); sizes.append(75); sizes.append(25); sizes.append(100); break; } return sizes; } void c2bCiterModel::clearSelection() { emit layoutAboutToBeChanged(); for (int i = 0; i < _citation_count; ++i) _is_selected[i] = false; emit layoutChanged(); } void c2bCiterModel::clearCurrentFilter(QModelIndex* current_index) { if (_filter == c2bCiter::None) return; if (_filter != c2bCiter::Pattern && _history.lastState().filter == c2bCiter::Pattern) { const c2bCiter::State& s(_history.lastState()); setPatternFilter(s.filter_string, current_index, s.format); emit patternFilterChanged(s.filter_string); } else { _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); _filter = c2bCiter::None; _fstring.clear(); _update_format(_format == c2bCiter::R ? _history.lastCitationFormat() : _format); _update_current_index(_format == c2bCiter::K ? _history.lastKeyword() : _history.lastCitation(), current_index); emit patternFilterChanged(_fstring); emit layoutChanged(); } } c2bCiter::State c2bCiterModel::currentState(const QModelIndex& current_index) const { const int current_item(_current_item(current_index)); c2bCiter::State s(_format == c2bCiter::R ? _history.lastCitationFormat() : _format, _filter, current_index.row(), _fstring); if (current_item > -1) s.index_data = (_format == c2bCiter::K) ? _analyzer.sentence(current_item) : _search_string.at(current_item); return s; } void c2bCiterModel::restoreState(const c2bCiter::State& s, QModelIndex* current_index) { if (current_index) _history.saveCurrentItemIndex(_format, _filter, _current_item(current_index)); switch (s.filter) { case c2bCiter::None: emit layoutAboutToBeChanged(); _filter = c2bCiter::None; _fstring.clear(); _update_format(s.format); emit patternFilterChanged(_fstring); emit layoutChanged(); break; case c2bCiter::Document: if (_file.contains(s.filter_string)) emit statusLabel(tr("Keywords from '%1'").arg(_title.at(_file.value(s.filter_string)))); setDocumentFilter(s.filter_string, 0); break; case c2bCiter::Keyword: setKeywordFilter(s.filter_string, 0); break; case c2bCiter::Pattern: setPatternFilter(s.filter_string, 0, s.format); emit patternFilterChanged(s.filter_string); break; case c2bCiter::Related: setRelatedFilter(s.filter_string, 0, s.format); break; case c2bCiter::Selected: emit statusLabel(tr("Selected")); setSelectedFilter(0); break; default: break; } if (current_index) *current_index = index(s.viewer_index, 0); } void c2bCiterModel::restorePreviousState(QModelIndex* current_index) { if (_history.currentState() == -1) _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); const c2bCiter::State& s(_history.previousState()); restoreState(s, 0); if (current_index) *current_index = index(s.viewer_index, 0); } void c2bCiterModel::restoreNextState(QModelIndex* current_index) { if (_history.currentState() == -1) return; const c2bCiter::State& s(_history.nextState()); restoreState(s, 0); if (current_index) *current_index = index(s.viewer_index, 0); } void c2bCiterModel::updateFormat(const c2bCiter::Format format, QModelIndex* current_index) { if (_format == c2bCiter::K) { c2bCiter::State s(_history.lastNonKeywordState()); s.format = format; restoreState(s, current_index); } else { emit layoutAboutToBeChanged(); const int current_item(_current_item(current_index)); _update_format(format); _update_current_index(current_item, current_index); emit layoutChanged(); } } void c2bCiterModel::_update_format(const c2bCiter::Format format) { _format = format; _history.saveCurrentCitationFormat(_format); switch (_format) { case c2bCiter::AJYT: _column_count = 4; _display_ptr = &c2bCiterModel::_display_ajyt; break; case c2bCiter::IT: _column_count = 2; _display_ptr = &c2bCiterModel::_display_it; break; case c2bCiter::JYA: _column_count = 3; _display_ptr = &c2bCiterModel::_display_jya; break; case c2bCiter::K: _column_count = 1; _display_ptr = &c2bCiterModel::_display_k; break; case c2bCiter::R: _column_count = 2; _display_ptr = &c2bCiterModel::_display_r; break; case c2bCiter::T: _column_count = 1; _display_ptr = &c2bCiterModel::_display_t; break; case c2bCiter::YAJT: default: _column_count = 4; _display_ptr = &c2bCiterModel::_display_yajt; break; } _set_mapping(); } int c2bCiterModel::_current_item(const QString& index_data) const { int current_item(-1); if (!index_data.isEmpty()) { if (_format == c2bCiter::K) { for (int i = 0; i < _keyword_count; ++i) if (index_data == _analyzer.sentence(i)) { current_item = i; break; } } else { for (int i = 0; i < _citation_count; ++i) if (index_data == _search_string.at(i)) { current_item = i; break; } } } return current_item; } void c2bCiterModel::_update_current_index(const int current_item, QModelIndex* current_index) const { if (!current_index) return; if (current_item >= 0) for (int i = 0; i < _row_count; ++i) if (_offset(i) == current_item) { *current_index = index(i, 0); return; } *current_index = index(0, 0); } void c2bCiterModel::_add_citations(const QString& fn) { bibParser* bpP = c2b::bibParser(); const QString tag_author("author"); const QString tag_booktitle("booktitle"); const QString tag_doi("doi"); const QString tag_editor("editor"); const QString tag_file("file"); const QString tag_journal("journal"); const QString tag_title("title"); const QString tag_url("url"); const QString tag_year("year"); const QString template_position("%1:%2"); QStringList fields; fields.append(tag_author); fields.append(tag_booktitle); fields.append(tag_doi); fields.append(tag_editor); fields.append(tag_file); fields.append(tag_journal); fields.append(tag_title); fields.append(tag_url); fields.append(tag_year); bibReference ref; bpP->initReferenceParsing(fn, fields, &ref); const QRegExp initials1("\\b\\w\\b"); const QRegExp initials2("[^\\w\\s]"); const QString bibtex(c2bUtils::fileToString(fn)); while (bpP->referencesIn(bibtex, &ref)) { QString author(ref.anyAuthor()); if (!author.isEmpty()) { author = bpP->authorFromBibTeX(author); c2bUtils::remove(author, initials1); c2bUtils::remove(author, initials2); author.replace(" and ", ", "); c2bUtils::simplifyString(author); } QString title(ref.anyTitle()); c2bUtils::cleanTitle(title, true); QString url(ref.value(tag_url)); if (url.isEmpty()) { const QString doi(ref.value(tag_doi)); if (!doi.isEmpty()) { if (doi.startsWith("http")) url = QUrl::toPercentEncoding(doi); else url = "https://dx.doi.org/" + QUrl::toPercentEncoding(doi); } } QString file(ref.value(tag_file)); if (!file.isEmpty()) file = QDir::cleanPath(file); uint included_date; const QFileInfo finf(file); if (finf.exists()) #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) included_date = finf.lastModified().date().startOfDay().toSecsSinceEpoch(); #elif QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) included_date = finf.lastModified().date().startOfDay().toTime_t(); #else included_date = QDateTime(finf.lastModified().date()).toTime_t(); #endif else included_date = 0; _author_string.append(author); _bibtex_position.append(template_position.arg(fn).arg(ref.positionValue)); _citeId.append(ref.citeidName); _included_date.append(included_date); _journal.append(ref.anyJournal()); _title.append(title); _url.append(url); _year.append(ref.value(tag_year)); if (!file.isEmpty()) _file.insert(file, _citation_count); _citation_count++; } } void c2bCiterModel::_clear() { _filter = c2bCiter::None; _format = c2bCiter::AJYT; _author.clear(); _author_string.clear(); _bibtex_position.clear(); _citeId.clear(); _file.clear(); _fstring.clear(); _history.clear(); _included_date.clear(); _is_selected.clear(); _journal.clear(); _map_ajyt.clear(); _map_author.clear(); _map_filter.clear(); _map_it.clear(); _map_jya.clear(); _map_t.clear(); _map_yajt.clear(); _matches_filter.clear(); _search_string.clear(); _title.clear(); _url.clear(); _year.clear(); _author_count = 0; _author_max_length = 0; _citation_count = 0; _column_count = 0; _journal_max_length = 0; _keyword_count = 0; _mapping = 0; _related_count = 0; _row_count = 0; } /**************************************************************************** SETTING DATA POINTERS *****************************************************************************/ void c2bCiterModel::_set_table_data() { const QString sep(", "); const QChar dot('.'); for (int i = 0; i < _citation_count; ++i) _author_count += _author_string.at(i).count(sep) + 1; _author.resize(_author_count); _map_author.resize(_author_count); int ij(0); for (int i = 0; i < _citation_count; ++i) { const QStringList authors(_author_string.at(i).split(sep, _QT_6_KeepEmptyParts)); for (int j = 0; j < authors.count(); ++j) { _author[ij] = authors.at(j).trimmed(); _map_author[ij] = i; _author_max_length = std::max(_author_max_length, int(_author.at(ij).length())); ++ij; } } if (_author_count != ij) qFatal("c2bCiterModel::_set_table_data: Mismatch author mapping"); bibParser* bpP = c2b::bibParser(); for (int i = 0; i < _citation_count; ++i) { _journal[i] = bpP->abbreviatedJournal(_journal.at(i)); _journal[i].remove(dot); _journal_max_length = std::max(_journal_max_length, int(_journal.at(i).length())); } _is_selected.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _is_selected[i] = false; _keyword_count = _analyzer.sentenceCount(); const int mca(std::max(_citation_count, _author_count)); const int mcas(std::max(mca, _keyword_count)); _matches_filter.resize(mca); _map_filter.resize(mcas); } void c2bCiterModel::_set_sort_indices() { const QChar sp(' '); // AJYT // Use _search_string as temporary for sorting _search_string.resize(_author_count); for (int i = 0; i < _author_count; ++i) { const int j(_map_author.at(i)); _search_string[i] = c2bUtils::toAscii( _author.at(i) + sp + _journal.at(j) + sp + _year.at(j) + sp + _title.at(j), c2bUtils::Collation); } _map_ajyt.resize(_author_count); for (int i = 0; i < _author_count; ++i) _map_ajyt[i] = i; ascending> ajyt(_search_string); std::sort(_map_ajyt.begin(), _map_ajyt.end(), ajyt); // IT _search_string.resize(_citation_count); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) const qint64 current_dtt(QDateTime::currentDateTime().toSecsSinceEpoch()); #else const int current_dtt(QDateTime::currentDateTime().toTime_t()); #endif const QString dtt("%1"); const QChar padding('0'); for (int i = 0; i < _citation_count; ++i) _search_string[i] = c2bUtils::toAscii( dtt.arg(current_dtt - _included_date.at(i), 10, 10, padding) + sp + _title.at(i), c2bUtils::Collation); _map_it.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _map_it[i] = i; ascending> it(_search_string); std::sort(_map_it.begin(), _map_it.end(), it); // JYA for (int i = 0; i < _citation_count; ++i) _search_string[i] = c2bUtils::toAscii(_journal.at(i) + sp + _year.at(i) + sp + _author_string.at(i), c2bUtils::Collation); _map_jya.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _map_jya[i] = i; ascending> jya(_search_string); std::sort(_map_jya.begin(), _map_jya.end(), jya); // T for (int i = 0; i < _citation_count; ++i) _search_string[i] = c2bUtils::toAscii(_title.at(i), c2bUtils::Collation); _map_t.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _map_t[i] = i; ascending> t(_search_string); std::sort(_map_t.begin(), _map_t.end(), t); // YAJT for (int i = 0; i < _citation_count; ++i) _search_string[i] = c2bUtils::toAscii( _year.at(i) + sp + _author_string.at(i) + sp + _journal.at(i) + sp + _title.at(i), c2bUtils::Collation); _map_yajt.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _map_yajt[i] = i; ascending> yajt(_search_string); std::sort(_map_yajt.begin(), _map_yajt.end(), yajt); // Keep _search_string for filtering } void c2bCiterModel::_set_mapping() { switch (_format) { case c2bCiter::AJYT: _row_count = _author_count; _mapping = &_map_ajyt; break; case c2bCiter::IT: _row_count = _citation_count; _mapping = &_map_it; break; case c2bCiter::JYA: _row_count = _citation_count; _mapping = &_map_jya; break; case c2bCiter::K: _row_count = _filter == c2bCiter::None ? _keyword_count : _row_count; break; case c2bCiter::R: _row_count = _related_count; _mapping = &_map_filter; break; case c2bCiter::T: _row_count = _citation_count; _mapping = &_map_t; break; case c2bCiter::YAJT: default: _row_count = _citation_count; _mapping = &_map_yajt; break; } if (_filter == c2bCiter::None) return; if (_format == c2bCiter::K) { _mapping = &_map_filter; return; } if (_format == c2bCiter::R) // _map_filter is already set in setRelatedFilter return; int r(0); if (_format == c2bCiter::AJYT) { for (int i = 0; i < _row_count; ++i) if (_matches_filter.at(_map_author.at(_mapping->at(i)))) _map_filter[r++] = _mapping->at(i); } else { for (int i = 0; i < _row_count; ++i) if (_matches_filter.at(_mapping->at(i))) _map_filter[r++] = _mapping->at(i); } _row_count = r; _mapping = &_map_filter; } QString c2bCiterModel::_display_ajyt(const int row, const int column) const { switch (column) { case 0: return _author.at(_mapping->at(row)); case 1: return _journal.at(_map_author.at(_mapping->at(row))); case 2: return _year.at(_map_author.at(_mapping->at(row))); case 3: return _title.at(_map_author.at(_mapping->at(row))); default: return QString(); } } QString c2bCiterModel::_display_it(const int row, const int column) const { switch (column) { case 0: #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) return _included_date.at(_offset(row)) > 0 ? QDateTime::fromSecsSinceEpoch(_included_date.at(_offset(row))).date().toString(Qt::ISODate) : QString(); #else return _included_date.at(_offset(row)) > 0 ? QDateTime::fromTime_t(_included_date.at(_offset(row))).date().toString(Qt::ISODate) : QString(); #endif case 1: return _title.at(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_jya(const int row, const int column) const { switch (column) { case 0: return _journal.at(_offset(row)); case 1: return _year.at(_offset(row)); case 2: return _author_string.at(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_k(const int row, const int column) const { switch (column) { case 0: return _analyzer.sentence(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_r(const int row, const int column) const { switch (column) { case 0: return QString("%1%").arg(100 * _analyzer.similarity(row), 3, 'f', 0); case 1: return _title.at(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_t(const int row, const int column) const { switch (column) { case 0: return _title.at(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_yajt(const int row, const int column) const { switch (column) { case 0: return _year.at(_offset(row)); case 1: return _author_string.at(_offset(row)); case 2: return _journal.at(_offset(row)); case 3: return _title.at(_offset(row)); default: return QString(); } } int c2bCiterModel::_offset(const int i) const { if (_format == c2bCiter::AJYT) return _map_author.at(_mapping->at(i)); else if (_format == c2bCiter::K && _filter == c2bCiter::None) return i; else return _mapping->at(i); } cb2bib-2.0.3/src/PaxHeaders/c2bCiterView.h0000644000000000000000000000013215104461633015150 xustar0030 mtime=1762812827.534763329 30 atime=1762812828.042759324 30 ctime=1762812827.538763297 cb2bib-2.0.3/src/c2bCiterView.h0000644000175000001440000000335615104461633017150 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITERVIEW_H #define C2BCITERVIEW_H #include "c2bCiterModel.h" #include class c2bCiterView : public QTableView { Q_OBJECT public: explicit c2bCiterView(QWidget* parentw = 0); inline ~c2bCiterView() {} c2bCiter::State currentState() const; void reloadModel(QAbstractItemModel* citations, const QStringList& bibtex_files, const c2bCiter::State& s); void setPatternFilter(const QString& pattern); signals: void citeReferences(); void editReference(); void hideCiter(); void openAnnote(); void openFile(); void openUrl(); void patternFilterChanged(const bool mode, const QString& pattern); void statusMessage(const QString& message); protected: void keyPressEvent(QKeyEvent* qevent); void keyboardSearch(const QString& search); void resizeEvent(QResizeEvent* qevent); public slots: void updatePatternFilter(const QString& pattern); private: void clearCurrentFilter(); void keywordDocumentSearch(); void setRelatedFilter(); void showNextState(); void showPreviousState(); void toggleGlossaryView(); void toggleKeywordView(); void toggleSelectedFilter(); void updateCurrentIndex(const QModelIndex& i); void updateFormat(const c2bCiter::Format& format); void updateViewport(); QString _filter_string; bool _filter_mode; c2bCiterModel* _citationsP; }; #endif cb2bib-2.0.3/src/PaxHeaders/findDialog.cpp0000644000000000000000000000013015104461633015251 xustar0029 mtime=1762812827.50676355 30 atime=1762812828.042759324 29 ctime=1762812827.50676355 cb2bib-2.0.3/src/findDialog.cpp0000644000175000001440000001304715104461633017251 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * findDialog was originally adapted from Qt Designer * Copyright (C) 2001 Trolltech AS. All rights reserved. ***************************************************************************/ #include "findDialog.h" #include #include #include #include #include findDialog::findDialog(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); resize(size().width(), 1); ui.buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Find")); _editor = 0; QAction* act = new QAction(this); act->setSeparator(true); addAction(act); findAction = new QAction(this); addAction(findAction); findAction->setShortcut(QKeySequence::Find); findAction->setText(tr("Find")); findAction->setStatusTip(tr("Find in text")); connect(findAction, SIGNAL(triggered()), this, SLOT(findText())); findNextAction = new QAction(this); addAction(findNextAction); findNextAction->setShortcut(QKeySequence::FindNext); findNextAction->setText(tr("Find Next")); findNextAction->setStatusTip(tr("Find next occurrence")); connect(findNextAction, SIGNAL(triggered()), this, SLOT(findNext())); findPreviousAction = new QAction(this); addAction(findPreviousAction); findPreviousAction->setShortcut(QKeySequence::FindPrevious); findPreviousAction->setText(tr("Find Previous")); findPreviousAction->setStatusTip(tr("Find previous occurrence")); connect(findPreviousAction, SIGNAL(triggered()), this, SLOT(findPrevious())); } findDialog::~findDialog() {} void findDialog::init() { ui.notFound->hide(); raise(); if (_editor->inherits("QPlainTextEdit")) ui.comboFind->setEditText(qobject_cast(_editor)->textCursor().selectedText().trimmed()); else if (_editor->inherits("QTextEdit")) ui.comboFind->setEditText(qobject_cast(_editor)->textCursor().selectedText().trimmed()); ui.comboFind->setFocus(); } void findDialog::setEditor(QPlainTextEdit* editor) { _editor = editor; } void findDialog::setEditor(QTextEdit* editor) { _editor = editor; } int findDialog::exec() { if (!_editor) return (-1); init(); return QDialog::exec(); } void findDialog::show() { if (!_editor) return; init(); QDialog::show(); } void findDialog::accept() { if (ui.comboFind->currentText().isEmpty()) return; if (_editor) { if (findText(ui.comboFind->currentText(), ui.radioForward->isChecked(), ui.checkCase->isChecked(), ui.checkWords->isChecked())) QDialog::accept(); else ui.notFound->show(); } } void findDialog::findText() { show(); } bool findDialog::findText(const QString& pattern, bool do_forward, bool do_case_sensitive, bool do_whole_words) { if (pattern.isEmpty()) return false; m_find_pattern = pattern; m_find_case = do_case_sensitive; m_find_words = do_whole_words; QTextDocument* doc; QTextCursor c; if (_editor->inherits("QPlainTextEdit")) { QPlainTextEdit* ed = qobject_cast(_editor); doc = ed->document(); c = ed->textCursor(); } else if (_editor->inherits("QTextEdit")) { QTextEdit* ed = qobject_cast(_editor); doc = ed->document(); c = ed->textCursor(); } else return false; QTextDocument::FindFlags options; if (c.hasSelection()) c.setPosition(do_forward ? c.position() : c.anchor(), QTextCursor::MoveAnchor); if (!do_forward) options |= QTextDocument::FindBackward; if (m_find_case) options |= QTextDocument::FindCaseSensitively; if (m_find_words) options |= QTextDocument::FindWholeWords; QTextCursor newCursor(doc->find(m_find_pattern, c, options)); bool found(true); if (newCursor.isNull()) { QTextCursor ac(doc); ac.movePosition((options & QTextDocument::FindBackward) ? QTextCursor::End : QTextCursor::Start); newCursor = doc->find(m_find_pattern, ac, options); if (newCursor.isNull()) { newCursor = c; found = false; } } if (!found) return false; if (_editor->inherits("QPlainTextEdit")) { QPlainTextEdit* ed = qobject_cast(_editor); ed->setTextCursor(newCursor); ed->verticalScrollBar()->setValue(ed->verticalScrollBar()->maximum()); ed->centerCursor(); } else if (_editor->inherits("QTextEdit")) { QTextEdit* ed = qobject_cast(_editor); ed->setTextCursor(newCursor); ed->verticalScrollBar()->setValue(ed->verticalScrollBar()->maximum()); ed->ensureCursorVisible(); ed->verticalScrollBar()->setValue(ed->verticalScrollBar()->value() - ed->viewport()->height() / 3); ed->ensureCursorVisible(); } return found; } void findDialog::findNext() { if (m_find_pattern.isEmpty()) findText(); else findText(m_find_pattern, true, m_find_case, m_find_words); } void findDialog::findPrevious() { if (m_find_pattern.isEmpty()) findText(); else findText(m_find_pattern, false, m_find_case, m_find_words); } cb2bib-2.0.3/src/PaxHeaders/clipboardPoll.cpp0000644000000000000000000000013115104461633016000 xustar0030 mtime=1762812827.502763581 30 atime=1762812828.042759324 29 ctime=1762812827.50676355 cb2bib-2.0.3/src/clipboardPoll.cpp0000644000175000001440000001671515104461633020004 0ustar00constansusers00000000000000/*************************************************************************** * clipboardPoll, modified by Pere Constans for cb2Bib, 2005 * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * * * Author and Copyright (C) 2003 by Lubos Lunak * Distributed under the GNU General Public License * * * This file is part of the KDE project * Copyright (C) 2003 by Lubos Lunak * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. ***************************************************************************/ #include "clipboardPoll.h" #include #include #include /* The polling magic: There's no way with X11 how to find out if the selection has changed (unless its ownership is taken away from the current client). In the future, there will be hopefully such notification, which will make this whole file more or less obsolete. But for now, Klipper has to poll. In order to avoid transferring all the data on every time pulse, this file implements two optimizations: The first one is checking whether the selection owner is Qt application (using the _QT_SELECTION/CLIPBOARD_SENTINEL atoms on the root window of screen 0), and if yes, Klipper can rely on QClipboard's signals. If the owner is not Qt app, and the ownership has changed, it means the selection has changed as well. Otherwise, first only the timestamp of the last selection change is requested using the TIMESTAMP selection target, and if it's the same, it's assumed the contents haven't changed. Note that some applications (like XEmacs) does not provide this information, so Klipper has to assume that the clipboard might have changed in this case --- this is what is meant by REFUSED below. */ clipboardPoll::clipboardPoll(QWidget* parentw) : QWidget(parentw) { // kapp->installX11EventFilter( this ); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(timeout())); const char* names[6] = { "_QT_SELECTION_SENTINEL", "_QT_CLIPBOARD_SENTINEL", "CLIPBOARD", "TIMESTAMP", "KLIPPER_SELECTION_TIMESTAMP", "KLIPPER_CLIPBOARD_TIMESTAMP" }; Atom atoms[6]; XInternAtoms(QX11Info::display(), const_cast(names), 6, False, atoms); selection.sentinel_atom = atoms[0]; clipboard.sentinel_atom = atoms[1]; xa_clipboard = atoms[2]; xa_timestamp = atoms[3]; selection.timestamp_atom = atoms[4]; clipboard.timestamp_atom = atoms[5]; selection.atom = XA_PRIMARY; clipboard.atom = xa_clipboard; selection.last_change = clipboard.last_change = QX11Info::appTime(); // don't trigger right after startup selection.last_owner = XGetSelectionOwner(QX11Info::display(), XA_PRIMARY); clipboard.last_owner = XGetSelectionOwner(QX11Info::display(), xa_clipboard); selection.waiting_for_timestamp = false; clipboard.waiting_for_timestamp = false; updateQtOwnership(selection); updateQtOwnership(clipboard); } clipboardPoll::~clipboardPoll() { delete timer; } bool clipboardPoll::x11Event(XEvent* e) { // note that this is also installed as app-wide filter if (e->type == SelectionNotify && e->xselection.requestor == winId()) { if (changedTimestamp(selection, *e)) { emit clipboardChanged(true); } if (changedTimestamp(clipboard, *e)) { emit clipboardChanged(false); } return true; // filter out } return false; } void clipboardPoll::updateQtOwnership(SelectionData& sData) { Atom type; int format; unsigned long nitems; unsigned long after; unsigned char* prop = NULL; if (XGetWindowProperty(QX11Info::display(), QX11Info::appRootWindow(0), sData.sentinel_atom, 0, 2, False, XA_WINDOW, &type, &format, &nitems, &after, &prop) != Success || type != XA_WINDOW || format != 32 || nitems != 2 || prop == NULL) { sData.owner_is_qt = false; if (prop != NULL) XFree(prop); return; } Window owner = reinterpret_cast(prop)[0]; // [0] is new owner, [1] is previous XFree(prop); Window current_owner = XGetSelectionOwner(QX11Info::display(), sData.atom); sData.owner_is_qt = (owner == current_owner); } void clipboardPoll::timeout() { // KlipperWidget::updateTimestamp(); if (!qApp->clipboard()->ownsSelection() && checkTimestamp(selection)) { emit clipboardChanged(true); } if (!qApp->clipboard()->ownsClipboard() && checkTimestamp(clipboard)) { emit clipboardChanged(false); } } bool clipboardPoll::checkTimestamp(SelectionData& sData) { Window current_owner = XGetSelectionOwner(QX11Info::display(), sData.atom); updateQtOwnership(sData); if (sData.owner_is_qt) { sData.last_change = CurrentTime; sData.last_owner = current_owner; sData.waiting_for_timestamp = false; return false; } if (current_owner != sData.last_owner) // owner has changed { sData.last_owner = current_owner; sData.waiting_for_timestamp = false; sData.last_change = CurrentTime; return true; } if (current_owner == None) { return false; // None also last_owner... } if (sData.waiting_for_timestamp) { // We're already waiting for the timestamp of the last check return false; } XDeleteProperty(QX11Info::display(), winId(), sData.timestamp_atom); XConvertSelection(QX11Info::display(), sData.atom, xa_timestamp, sData.timestamp_atom, winId(), QX11Info::appTime()); sData.waiting_for_timestamp = true; sData.waiting_x_time = QX11Info::appTime(); return false; } bool clipboardPoll::changedTimestamp(SelectionData& sData, const XEvent& ev) { if (ev.xselection.requestor != winId() || ev.xselection.selection != sData.atom || ev.xselection.time != sData.waiting_x_time) { return false; } sData.waiting_for_timestamp = false; if (ev.xselection.property == None) { return true; } Atom type; int format; unsigned long nitems; unsigned long after; unsigned char* prop = NULL; if (XGetWindowProperty(QX11Info::display(), winId(), ev.xselection.property, 0, 1, False, AnyPropertyType, &type, &format, &nitems, &after, &prop) != Success || format != 32 || nitems != 1 || prop == NULL) { if (prop != NULL) XFree(prop); return true; } Time timestamp = reinterpret_cast(prop)[0]; XFree(prop); if (timestamp != sData.last_change || timestamp == CurrentTime) { sData.last_change = timestamp; return true; } return false; // ok, same timestamp } cb2bib-2.0.3/src/PaxHeaders/c2bClipboard.h0000644000000000000000000000013215104461633015146 xustar0030 mtime=1762812827.538763297 30 atime=1762812828.042759324 30 ctime=1762812827.542763266 cb2bib-2.0.3/src/c2bClipboard.h0000644000175000001440000000242115104461633017136 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCLIPBOARD_H #define C2BCLIPBOARD_H #include #include #include /** cb2Bib Clipboard Implements clipboard functionality as required by cb2Bib This should fix acrobat, mozilla, qt 3.3.3 issues Using clipboardPoll STATUS: DEPRECATED */ #ifdef C2B_USE_CBPOLL class clipboardPoll; #endif class c2bClipboard : public QObject { Q_OBJECT public: explicit c2bClipboard(QObject* parento = 0); ~c2bClipboard(); void setConnected(bool); signals: void cbDataChanged(const QString&); private: QClipboard* _cb; QString _cb_text; QString _cbs_text; bool _is_connected; bool _supports_selection; uint _interval; #ifdef C2B_USE_CBPOLL clipboardPoll* _poll; #else QTimer* _timer; #endif private slots: void checkData(); void dataChanged(); void newClipboardData(bool selectionMode); void selectionChanged(); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bHighlighter.cpp0000644000000000000000000000013215104461633016040 xustar0030 mtime=1762812827.430764149 30 atime=1762812828.042759324 30 ctime=1762812827.430764149 cb2bib-2.0.3/src/c2bHighlighter.cpp0000644000175000001440000001163415104461633020036 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bHighlighter.h" #include "c2bSettings.h" #include #include c2bHighlighter::c2bHighlighter(QTextDocument* doc) : QSyntaxHighlighter(doc) { QPalette p; text_color = p.text().color(); c2bSettings* settings(c2bSettingsP); c = &settings->colors; connect(settings, SIGNAL(newSettings()), this, SLOT(rehighlight())); rx0 = QRegExp("\\d+"); rx0.setMinimal(true); rx1 = QRegExp("[^\\w\\d]+"); rx1.setMinimal(true); rx2 = QRegExp("<(?:NewLine|Tab)\\d+>"); rx2.setMinimal(true); rx3 = QRegExp("\\b(?:19|20)\\d\\d\\b"); rx3.setMinimal(true); rx4 = QRegExp("\\b(?:abstract|authors{0,1}|introduction|issue|keywords|key words|title|volume|vol)\\b", Qt::CaseInsensitive); rx4.setMinimal(true); rx5 = QRegExp("<<(?:abstract|address|annote|author|booktitle|chapter|" "doi|edition|editor|eprint|file|institution|isbn|issn|journal|" "keywords|month|note|number|organization|pages|publisher|" "school|series|title|url|volume|year)>>"); rx5.setMinimal(true); rx6 = QRegExp(""); rx6.setMinimal(true); rx_extracted_starts = QRegExp("\\[\\["); rx_extracted_ends = QRegExp("\\]\\]"); rx_metadata_starts = QRegExp("\\[(Bibliographic|Raw) Metadata"); rx_metadata_ends = QRegExp("/(Bibliographic|Raw) Metadata\\]"); } c2bHighlighter::~c2bHighlighter() {} void c2bHighlighter::highlightBlock(const QString& text) { const int len(text.length()); setFormat(0, len - 1, text_color); int pos(0); while (pos >= 0) { pos = rx0.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx0.matchedLength(), c->cb2bib_digit_color); pos += rx0.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx1.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx1.matchedLength(), c->cb2bib_unrelevant_color); pos += rx1.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx2.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx2.matchedLength(), c->cb2bib_unrelevant_color); pos += rx2.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx3.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx3.matchedLength(), c->cb2bib_relevant_color); pos += rx3.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx4.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx4.matchedLength(), c->cb2bib_highly_relevant_color); pos += rx4.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx5.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx5.matchedLength(), c->cb2bib_tag_color); pos += rx5.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx6.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx6.matchedLength(), c->cb2bib_unrelevant_color); pos += rx6.matchedLength(); } } setCurrentBlockState(0); int startIndexMD(0); if (previousBlockState() != 1) startIndexMD = rx_metadata_starts.indexIn(text); while (startIndexMD >= 0) { const int endIndex(rx_metadata_ends.indexIn(text, startIndexMD)); int extractedLength; if (endIndex == -1) { setCurrentBlockState(1); extractedLength = text.length() - startIndexMD; } else extractedLength = endIndex - startIndexMD + rx_metadata_ends.matchedLength(); setFormat(startIndexMD, extractedLength, c->cb2bib_metadata_color); startIndexMD = rx_metadata_starts.indexIn(text, startIndexMD + extractedLength); } int startIndexEx(0); if (previousBlockState() != 2) startIndexEx = rx_extracted_starts.indexIn(text); while (startIndexEx >= 0) { const int endIndex(rx_extracted_ends.indexIn(text, startIndexEx)); int extractedLength; if (endIndex == -1) { setCurrentBlockState(2); extractedLength = text.length() - startIndexEx; } else extractedLength = endIndex - startIndexEx + rx_extracted_ends.matchedLength(); setFormat(startIndexEx, extractedLength, c->cb2bib_unrelevant_color); startIndexEx = rx_extracted_starts.indexIn(text, startIndexEx + extractedLength); } } cb2bib-2.0.3/src/PaxHeaders/c2b.cpp0000644000000000000000000000013115104461633013660 xustar0030 mtime=1762812827.366764654 29 atime=1762812827.99875967 30 ctime=1762812827.366764654 cb2bib-2.0.3/src/c2b.cpp0000644000175000001440000001053315104461633015654 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2b.h" #include "c2bClipboard.h" #include "c2bConfigure.h" #include "dialog.h" #include "ui_proxyDialog.h" #include #include #include #include /** Global resources for cb2Bib */ c2b::c2b(QWidget* main, QObject* parento) : QObject(parento) { Q_ASSERT_X(!_c2b_single_instance, "c2b", "cb2Bib resources already instantiated"); c2b::_c2b_single_instance = this; _c2b_main = main; if (_c2b_main->inherits("cb2Bib")) { // Create bibliographic parser _c2b_bibparser = new c2bBibParser(this); // Create cb2Bib network _c2b_network = new network(this); connect(_c2b_network, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); connect(_c2b_network, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateDownloadProgress(qint64,qint64))); _download_progress = new QProgressDialog(_c2b_main, dialog::flags); _download_progress->setWindowTitle("Downloading..."); _download_progress->reset(); connect(_download_progress, SIGNAL(canceled()), _c2b_network, SLOT(cancelDownload())); // Create cb2Bib network query info _c2b_netqinf = new c2bNetworkQueryInfo(this); // Create cb2Bib metadata parser _c2b_metadataparser = new metadataParser(_c2b_bibparser, this); connect(_c2b_metadataparser, SIGNAL(showMessage(QString,QString)), this, SLOT(showMessage(QString,QString))); // Create cb2Bib clipboard _c2b_clipboard = new c2bClipboard(this); _c2b_clipboard->setConnected(true); } else if (_c2b_main->inherits("c2bAnnote")) { // Nothing is needed at present for the c2bAnnote } else Q_ASSERT_X(false, "c2b", "unknown required resources for main"); } c2b::~c2b() { _c2b_single_instance = 0; } c2b* c2b::_c2b_single_instance = 0; void c2b::showMessage(const QString& title, const QString& ms) { QMessageBox::warning(_c2b_main, title, ms, QMessageBox::Ok); } void c2b::configure(int index) { c2bConfigure* c = new c2bConfigure(); if (index > -1) c->setPage(index); if (c->exec() == QDialog::Accepted) showMessage(tr("Configuration was saved.")); else showMessage(tr("Configuration was cancelled.")); delete c; } void c2b::exitRequested() { foreach (QWidget* w, QApplication::topLevelWidgets()) { // So far only editors grant user exit cancellation // Avoid closing other visible widgets until exit is granted if (w->isVisible()) if (w->inherits("c2bEditor")) w->close(); } qApp->processEvents(); foreach (QWidget* widget, QApplication::topLevelWidgets()) { if (widget->isVisible()) if (widget->inherits("c2bEditor")) return; } qApp->closeAllWindows(); qApp->processEvents(); if (!qApp->quitOnLastWindowClosed()) qApp->quit(); } void c2b::updateDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) { if (bytesTotal < 50000) return; if (bytesReceived == bytesTotal) { _download_progress->reset(); return; } _download_progress->setLabelText(tr("Retrieving from %1...").arg(QUrl(_c2b_network->sourceFilename()).host())); _download_progress->setMaximum((int)bytesTotal); _download_progress->setValue((int)bytesReceived); } void c2b::proxyAuthenticationRequired(const QNetworkProxy& proxy, QAuthenticator* auth) { QDialog dialog(_c2b_main, dialog::flags); Ui::proxyDialog proxyDialog; proxyDialog.setupUi(&dialog); dialog.setWindowTitle(tr("Proxy %1 Authentication - cb2Bib").arg(proxy.hostName())); if (dialog.exec() == QDialog::Accepted) { auth->setUser(proxyDialog.userNameLineEdit->text()); auth->setPassword(proxyDialog.passwordLineEdit->text()); } else _c2b_network->cancelDownload(); } cb2bib-2.0.3/src/PaxHeaders/c2bSettings.cpp0000644000000000000000000000013215104461633015402 xustar0030 mtime=1762812827.466763866 30 atime=1762812828.042759324 30 ctime=1762812827.470763833 cb2bib-2.0.3/src/c2bSettings.cpp0000644000175000001440000004061215104461633017376 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSettings.h" #include "c2bUtils.h" #include #include #include #include #include #include /** Global settings for cb2Bib */ c2bSettings::c2bSettings(const QString& organization, const QString& application, QObject* parento) : settings(organization, application, parento), _progress_bar(0) {} c2bSettings::c2bSettings(const QString& fn, QObject* parento) : settings(fn, parento), _progress_bar(0) {} c2bSettings::~c2bSettings() { delete _progress_bar; } c2bSettings* c2bSettings::initSettings() { c2bSettings* s; if (c2bSettings::isConfiguredMode()) s = new c2bSettings(c2bSettings::configuredFilename()); else s = new c2bSettings(qApp->organizationName(), qApp->applicationName()); s->init(); return s; } void c2bSettings::init() { settings::init(); _progress_bar = 0; if (cl_console_mode) return; setDefaults(); if (cl_import) // Process cl_import_filename and update cl_cb2bib_import_mode processReferenceFile(); if (cl_cb2bib_mode && !cl_cb2bib_import_mode) { setValue("cb2Bib/isRunning", true); sync(); connect(qApp, SIGNAL(lastWindowClosed()), this, SLOT(guiExits())); } } void c2bSettings::notify() { update(); emit newSettings(); } void c2bSettings::update() { // Values for very general GUI settings c2bMonoFont = value("cb2Bib/MonoFont").value(); colors.loadColors(this); } void c2bSettings::setDefaults() { QHash defaults; defaults["cb2Bib/MonoFont"] = QFont("Courier"); const QStringList keys(defaults.keys()); for (int i = 0; i < keys.count(); ++i) setValue(keys.at(i), value(keys.at(i), defaults.value(keys.at(i)))); // Shortcuts _default_keysequences.clear(); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) _default_keysequences["Shortcuts/cb2Bib/Button About and Bookmarks"] = QKeySequence(Qt::CTRL | Qt::Key_Tab); _default_keysequences["Shortcuts/cb2Bib/Button Configure"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Button Network Query"] = QKeySequence(Qt::ALT | Qt::Key_N); _default_keysequences["Shortcuts/cb2Bib/Button Start PDFImport"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Button Toggle Connection"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Button View BibTeX"] = QKeySequence(Qt::ALT | Qt::Key_V); _default_keysequences["Shortcuts/cb2Bib/Check Repeated"] = QKeySequence(Qt::ALT | Qt::Key_X); _default_keysequences["Shortcuts/cb2Bib/Clear All Fields"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Delete Temporary BibTeX File"] = QKeySequence(Qt::ALT | Qt::Key_D); _default_keysequences["Shortcuts/cb2Bib/Edit Bookmarks"] = QKeySequence(Qt::ALT | Qt::Key_B); _default_keysequences["Shortcuts/cb2Bib/Edit Journal Abbreviations"] = QKeySequence(Qt::ALT | Qt::Key_J); _default_keysequences["Shortcuts/cb2Bib/Edit Regular Expressions"] = QKeySequence(Qt::ALT | Qt::Key_E); _default_keysequences["Shortcuts/cb2Bib/Guess Bibliographic Fields"] = QKeySequence(Qt::ALT | Qt::Key_G); _default_keysequences["Shortcuts/cb2Bib/Insert Regular Expression"] = QKeySequence(Qt::ALT | Qt::Key_I); _default_keysequences["Shortcuts/cb2Bib/Open Document"] = QKeySequence(Qt::ALT | Qt::Key_O); _default_keysequences["Shortcuts/cb2Bib/Postprocess BibTeX"] = QKeySequence(Qt::ALT | Qt::Key_P); _default_keysequences["Shortcuts/cb2Bib/Preparse Clipboard"] = QKeySequence(Qt::ALT | Qt::Key_C); _default_keysequences["Shortcuts/cb2Bib/Restart Recognition"] = QKeySequence(Qt::ALT | Qt::Key_R); _default_keysequences["Shortcuts/cb2Bib/Select BibTeX File"] = QKeySequence(Qt::ALT | Qt::Key_S); _default_keysequences["Shortcuts/cb2Bib/Select Document File"] = QKeySequence(Qt::ALT | Qt::Key_F); _default_keysequences["Shortcuts/cb2Bib/Annote Editor"] = QKeySequence(Qt::ALT | Qt::Key_A); _default_keysequences["Shortcuts/cb2Bib/Toggle Reference Tabs"] = QKeySequence(Qt::Key_F4); _default_keysequences["Shortcuts/cb2Bib/View Tagged Clipboard Data"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Write Metadata to Document"] = QKeySequence(Qt::ALT | Qt::Key_W); _default_keysequences["Shortcuts/Editor/Browse Reference by DOI"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Cite Selected Entries"] = QKeySequence(Qt::ALT | Qt::Key_C); _default_keysequences["Shortcuts/Editor/Clear Entry Selection"] = QKeySequence(Qt::Key_Delete); _default_keysequences["Shortcuts/Editor/Export Entries"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Local Search for Selected Text"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Open Document File"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Open Document URL"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Paste Current BibTeX"] = QKeySequence(Qt::SHIFT | Qt::Key_Insert); _default_keysequences["Shortcuts/Editor/Restart Network Query"] = QKeySequence(Qt::ALT | Qt::Key_N); _default_keysequences["Shortcuts/Editor/Restart Recognition"] = QKeySequence(Qt::ALT | Qt::Key_R); _default_keysequences["Shortcuts/Editor/Save and Postprocess"] = QKeySequence(Qt::ALT | Qt::Key_P); _default_keysequences["Shortcuts/Editor/Selection to LaTeX"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Selection to Unicode"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Set Journals to Abbreviated Name"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Set Journals to Full Name"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Set LyX Pipe"] = QKeySequence(Qt::ALT | Qt::Key_L); _default_keysequences["Shortcuts/Editor/Toggle Editing and Browsing"] = QKeySequence(Qt::CTRL | Qt::Key_Tab); _default_keysequences["Shortcuts/Editor/Toggle Word Wrapping"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Update Documents Metadata"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/View Note in External Browser"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search Settings"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search by Author"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search by Title"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search for Selected Text"] = QKeySequence(); #else _default_keysequences["Shortcuts/cb2Bib/Button About and Bookmarks"] = QKeySequence(Qt::CTRL + Qt::Key_Tab); _default_keysequences["Shortcuts/cb2Bib/Button Configure"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Button Network Query"] = QKeySequence(Qt::ALT + Qt::Key_N); _default_keysequences["Shortcuts/cb2Bib/Button Start PDFImport"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Button Toggle Connection"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Button View BibTeX"] = QKeySequence(Qt::ALT + Qt::Key_V); _default_keysequences["Shortcuts/cb2Bib/Check Repeated"] = QKeySequence(Qt::ALT + Qt::Key_X); _default_keysequences["Shortcuts/cb2Bib/Clear All Fields"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Delete Temporary BibTeX File"] = QKeySequence(Qt::ALT + Qt::Key_D); _default_keysequences["Shortcuts/cb2Bib/Edit Bookmarks"] = QKeySequence(Qt::ALT + Qt::Key_B); _default_keysequences["Shortcuts/cb2Bib/Edit Journal Abbreviations"] = QKeySequence(Qt::ALT + Qt::Key_J); _default_keysequences["Shortcuts/cb2Bib/Edit Regular Expressions"] = QKeySequence(Qt::ALT + Qt::Key_E); _default_keysequences["Shortcuts/cb2Bib/Guess Bibliographic Fields"] = QKeySequence(Qt::ALT + Qt::Key_G); _default_keysequences["Shortcuts/cb2Bib/Insert Regular Expression"] = QKeySequence(Qt::ALT + Qt::Key_I); _default_keysequences["Shortcuts/cb2Bib/Open Document"] = QKeySequence(Qt::ALT + Qt::Key_O); _default_keysequences["Shortcuts/cb2Bib/Postprocess BibTeX"] = QKeySequence(Qt::ALT + Qt::Key_P); _default_keysequences["Shortcuts/cb2Bib/Preparse Clipboard"] = QKeySequence(Qt::ALT + Qt::Key_C); _default_keysequences["Shortcuts/cb2Bib/Restart Recognition"] = QKeySequence(Qt::ALT + Qt::Key_R); _default_keysequences["Shortcuts/cb2Bib/Select BibTeX File"] = QKeySequence(Qt::ALT + Qt::Key_S); _default_keysequences["Shortcuts/cb2Bib/Select Document File"] = QKeySequence(Qt::ALT + Qt::Key_F); _default_keysequences["Shortcuts/cb2Bib/Annote Editor"] = QKeySequence(Qt::ALT + Qt::Key_A); _default_keysequences["Shortcuts/cb2Bib/Toggle Reference Tabs"] = QKeySequence(Qt::Key_F4); _default_keysequences["Shortcuts/cb2Bib/View Tagged Clipboard Data"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Write Metadata to Document"] = QKeySequence(Qt::ALT + Qt::Key_W); _default_keysequences["Shortcuts/Editor/Browse Reference by DOI"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Cite Selected Entries"] = QKeySequence(Qt::ALT + Qt::Key_C); _default_keysequences["Shortcuts/Editor/Clear Entry Selection"] = QKeySequence(Qt::Key_Delete); _default_keysequences["Shortcuts/Editor/Export Entries"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Local Search for Selected Text"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Open Document File"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Open Document URL"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Paste Current BibTeX"] = QKeySequence(Qt::SHIFT + Qt::Key_Insert); _default_keysequences["Shortcuts/Editor/Restart Network Query"] = QKeySequence(Qt::ALT + Qt::Key_N); _default_keysequences["Shortcuts/Editor/Restart Recognition"] = QKeySequence(Qt::ALT + Qt::Key_R); _default_keysequences["Shortcuts/Editor/Save and Postprocess"] = QKeySequence(Qt::ALT + Qt::Key_P); _default_keysequences["Shortcuts/Editor/Selection to LaTeX"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Selection to Unicode"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Set Journals to Abbreviated Name"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Set Journals to Full Name"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Set LyX Pipe"] = QKeySequence(Qt::ALT + Qt::Key_L); _default_keysequences["Shortcuts/Editor/Toggle Editing and Browsing"] = QKeySequence(Qt::CTRL + Qt::Key_Tab); _default_keysequences["Shortcuts/Editor/Toggle Word Wrapping"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Update Documents Metadata"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/View Note in External Browser"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search Settings"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search by Author"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search by Title"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search for Selected Text"] = QKeySequence(); #endif const QStringList sc(_default_keysequences.keys()); for (int i = 0; i < sc.count(); ++i) setValue(sc.at(i), value(sc.at(i), _default_keysequences.value(sc.at(i)))); update(); } void c2bSettings::setKeysequences(const QHash& keysequences) { if (keysequences.size() == 0) return; QHash::const_iterator it(keysequences.constBegin()); while (it != keysequences.constEnd()) { setValue(it.key(), it.value()); ++it; } // Set keysequences to created objects const QString sctag("Shortcuts/"); foreach (QWidget* w, QApplication::topLevelWidgets()) { const QList alist(w->findChildren()); for (int i = 0; i < alist.count(); ++i) { const QString fullname(alist.at(i)->data().toString()); if (fullname.startsWith(sctag)) alist.at(i)->setShortcut(keysequence(fullname)); } const QList sclist(w->findChildren()); for (int i = 0; i < sclist.count(); ++i) { const QString fullname(sclist.at(i)->objectName()); if (fullname.startsWith(sctag)) sclist.at(i)->setKey(keysequence(fullname)); } } } void c2bSettings::setKeysequence(const QString& path, QAction* action) { if (!action) return; const QString fullname(path + action->text()); if (_default_keysequences.contains(fullname)) { action->setShortcut(keysequence(fullname)); action->setData(fullname); } else c2bUtils::warn(tr("Action '%1' is not registered in default keysequence list").arg(fullname)); } void c2bSettings::setKeysequence(const QString& fullname, QShortcut* shortcut) { if (!shortcut) return; if (_default_keysequences.contains(fullname)) { shortcut->setObjectName(fullname); shortcut->setKey(keysequence(fullname)); } else c2bUtils::warn(tr("Shortcut '%1' is not registered in default keysequence list").arg(fullname)); } #ifdef Q_OS_WIN #include QString c2bSettings::decodeFilename(const QString& fn) const { // This function is meant for fn given by the command shell and that will end up being visible const QString dfn(settings::decodeFilename(fn)); QFileDialog fd(0, QString(), dfn); const QStringList fns(fd.selectedFiles()); if (fns.count() == 0) return dfn; const QString wdfn(fns.first()); if (QFileInfo(wdfn).exists()) return QDir::toNativeSeparators(wdfn); else return dfn; } #endif /*************************************************************************** * Downloaded reference extraction ***************************************************************************/ void c2bSettings::processReferenceFile() { // The "Download reference to reference manager" functionality to cb2Bib is implemented as follows: // - Put downloaded reference into the clipboard // - If no cb2Bib instance is running, launch cb2Bib GUI, otherwise exit // This is simple, enough, and consistent with a 'clipboard to BibTeX' program. // The 'single instance' implementation is naive, but it is sufficient for cb2Bib, and does not prevent // from having multiple cb2Bib instances in its usual deployment, if so desired. // Aware of QClipboard X11 note: "You should not store or retrieve the clipboard contents in response // to timer or non-user-input events". Functions processReferenceFile() and processprocessReferenceFileEvent() // do not follow it. It seems to work smooth, for all platforms, and, overall, it is a feasible solution // in this particular case. QFile file(cl_import_filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { cl_cb2bib_import_mode = true; QMessageBox::warning(0, tr("Warning - cb2Bib"), tr("Unable to open the reference file %1 for reading.\nError: '%2'.") .arg(cl_import_filename, file.errorString()), QMessageBox::Ok); QTimer::singleShot(500, qApp, SLOT(quit())); } else { if (value("cb2Bib/isRunning", false).toBool()) { cl_cb2bib_import_mode = true; if (!_progress_bar) _progress_bar = new QProgressBar; _progress_bar->setRange(0, 100); _progress_bar->setWindowTitle(QObject::tr("Importing...")); _progress_bar->show(); _progress_bar->setValue(50); } QTimer::singleShot(500, this, SLOT(processReferenceFileEvent())); } } void c2bSettings::processReferenceFileEvent() { const QString reference(c2bUtils::fileToString(cl_import_filename).trimmed()); QClipboard* cb = qApp->clipboard(); cb->setText(reference, QClipboard::Clipboard); if (cl_cb2bib_import_mode) { if (_progress_bar) _progress_bar->setValue(100); QTimer::singleShot(500, qApp, SLOT(quit())); } } void c2bSettings::guiExits() { setValue("cb2Bib/isRunning", false); sync(); } cb2bib-2.0.3/src/PaxHeaders/c2bREHighlighter.cpp0000644000000000000000000000013215104461633016267 xustar0030 mtime=1762812827.446764023 30 atime=1762812828.042759324 30 ctime=1762812827.450763991 cb2bib-2.0.3/src/c2bREHighlighter.cpp0000644000175000001440000000575015104461633020267 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bREHighlighter.h" #include "c2bSettings.h" #include #include c2bREHighlighter::c2bREHighlighter(QTextDocument* doc) : QSyntaxHighlighter(doc) { QPalette p; text_color = p.text().color(); c2bSettings* settings(c2bSettingsP); c = &settings->colors; connect(settings, SIGNAL(newSettings()), this, SLOT(rehighlight())); rx0 = QRegExp("\\b(?:abstract|address|annote|author|booktitle|chapter|" "doi|edition|editor|eprint|file|institution|isbn|issn|journal|" "keywords|month|note|number|organization|pages|publisher|" "school|series|title|url|volume|year)\\b"); rx0.setMinimal(true); rx1 = QRegExp("\\b(?:article|book|booklet|conference|inbook|incollection|" "inproceedings|manual|mastersthesis|misc|periodical|phdthesis|" "proceedings|techreport|unpublished)\\b"); rx2 = QRegExp("^[a-z_]+=\\S.+$"); rx3 = QRegExp("^[a-z_]+="); rx4 = QRegExp("<<[a-z]+>>"); rx5 = QRegExp("^#.*$"); } c2bREHighlighter::~c2bREHighlighter() {} void c2bREHighlighter::highlightBlock(const QString& text) { const int len(text.length()); setFormat(0, len - 1, text_color); int pos(0); while (pos >= 0) { pos = rx0.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx0.matchedLength(), c->bib_reference_field_color); pos += rx0.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx1.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx1.matchedLength(), c->bib_reference_type_color); pos += rx1.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx2.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx2.matchedLength(), c->netqinf_command_content_color); pos += rx2.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx3.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx3.matchedLength(), c->netqinf_command_key_color); pos += rx3.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx4.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx4.matchedLength(), c->cb2bib_tag_color); pos += rx4.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx5.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx5.matchedLength(), c->comment_color); pos += rx5.matchedLength(); } } } cb2bib-2.0.3/src/PaxHeaders/c2bCitePatternLineEedit.h0000644000000000000000000000013215104461633017254 xustar0030 mtime=1762812827.526763392 30 atime=1762812828.042759324 30 ctime=1762812827.526763392 cb2bib-2.0.3/src/c2bCitePatternLineEedit.h0000644000175000001440000000206115104461633021244 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITEPATTERNLINEEEDIT_H #define C2BCITEPATTERNLINEEEDIT_H #include "c2bLineEdit.h" #include class QAction; class c2bCitePatternLineEedit : public c2bLineEdit { Q_OBJECT public: explicit c2bCitePatternLineEedit(QWidget* parentw = 0); ~c2bCitePatternLineEedit(); signals: void statusMessage(const QString& ms); protected: QAction* a_citeid; QAction* a_citeids_comma; QAction* a_citeids_semicolon; QAction* a_latex; QAction* a_markdown; protected slots: void check(const QString& pattern); void citeid(); void citeids_comma(); void citeids_semicolon(); void latex(); void markdown(); private: QRegExp _citeids; }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bLineEdit.h0000644000000000000000000000013015104461633014742 xustar0029 mtime=1762812827.58276295 30 atime=1762812828.042759324 29 ctime=1762812827.58276295 cb2bib-2.0.3/src/c2bLineEdit.h0000644000175000001440000000117115104461633016735 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BLINEEDIT_H #define C2BLINEEDIT_H #include class c2bLineEdit : public QLineEdit { Q_OBJECT public: explicit c2bLineEdit(QWidget* parentw = 0); ~c2bLineEdit(); protected: virtual void contextMenuEvent(QContextMenuEvent* e); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bReferenceList.ui0000644000000000000000000000007415104461330016166 xustar0030 atime=1762812828.042759324 30 ctime=1762812827.190766041 cb2bib-2.0.3/src/c2bReferenceList.ui0000644000175000001440000001072515104461330020157 0ustar00constansusers00000000000000 Pere Constans c2bReferenceList 0 0 738 153 0 0 References 0 2 Clear filter :/icons/icons/clear_left.png:/icons/icons/clear_left.png Filter Author and Title ... :/icons/icons/filter.png:/icons/icons/filter.png QToolButton::InstantPopup QFrame::HLine QFrame::Sunken Qt::Horizontal true QFrame::Raised true QAbstractItemView::ExtendedSelection false true 6 0 1 2 3 4 5 0 0 true false c2bComboBox QComboBox
c2bComboBox.h
clearB clicked() comboFilter clearEditText() 735 152 548 151
cb2bib-2.0.3/src/PaxHeaders/c2bCiterHistory.cpp0000644000000000000000000000013115104461633016231 xustar0030 mtime=1762812827.382764528 29 atime=1762812827.99875967 30 ctime=1762812827.386764496 cb2bib-2.0.3/src/c2bCiterHistory.cpp0000644000175000001440000000353615104461633020232 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterHistory.h" static const int _maximum_history_states(35); c2bCiterHistory::c2bCiterHistory() { _last_citation_format = c2bCiter::AJYT; _index.resize(_maximum_history_states); _states.resize(_maximum_history_states); clear(); } void c2bCiterHistory::clear() { _last_citation = 0; _last_keyword = 0; _last_selection_citation = 0; _last_nonkeyword_state = c2bCiter::State(); _last_nonselected_state = c2bCiter::State(); _cstate = -1; _nstates = -1; for (int i = 0; i < _maximum_history_states; ++i) _index[i] = i; } void c2bCiterHistory::saveCurrentState(const c2bCiter::Format format, const c2bCiter::Filter filter, const int iindex, const int vindex, const QString fstring) { if (_cstate != -1) _nstates = _cstate - 1; _cstate = -1; const c2bCiter::State s(format, filter, vindex, fstring); if (_nstates > -1 && s == _states[_index[_nstates]]) return; if (++_nstates >= _maximum_history_states) { // Move, e.g., 0 1 2 3 4 to 1 2 3 4 0 const int oldest(_index[0]); for (int i = 0; i < _maximum_history_states - 1; ++i) _index[i] = _index[i + 1]; _index[--_nstates] = oldest; } _states[_index[_nstates]] = s; if (format != c2bCiter::K) { _last_nonkeyword_state = s; if (filter != c2bCiter::Selected) _last_nonselected_state = s; } saveCurrentItemIndex(format, filter, iindex); } cb2bib-2.0.3/src/PaxHeaders/c2bTextBrowser.h0000644000000000000000000000013215104461633015537 xustar0030 mtime=1762812827.622762635 30 atime=1762812828.042759324 30 ctime=1762812827.622762635 cb2bib-2.0.3/src/c2bTextBrowser.h0000644000175000001440000000154215104461633017532 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BTEXTBROWSER_H #define C2BTEXTBROWSER_H #include class QAction; /** @author Pere Constans */ class c2bTextBrowser : public QTextBrowser { Q_OBJECT public: explicit c2bTextBrowser(QWidget* parentw = 0); ~c2bTextBrowser(); void updateHtml(const QString& newHtml); public slots: #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) void setSource(const QUrl& url) override; #endif protected: virtual void contextMenuEvent(QContextMenuEvent* qevent); }; #endif cb2bib-2.0.3/src/PaxHeaders/c2bCiterExcerptView.cpp0000644000000000000000000000013115104461633017035 xustar0030 mtime=1762812827.382764528 29 atime=1762812827.99875967 30 ctime=1762812827.382764528 cb2bib-2.0.3/src/c2bCiterExcerptView.cpp0000644000175000001440000000455015104461633021033 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterExcerptView.h" #include "c2bSettings.h" #include "c2bTextBrowser.h" #include "c2bUtils.h" #include c2bCiterExcerptView::c2bCiterExcerptView(const QString& html, QWidget* parentw) : QDialog(parentw) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("Document Excerpt - cb2Bib")); QGridLayout* gl; gl = new QGridLayout(this); gl->setContentsMargins(0, 0, 0, 0); _browserP = new c2bTextBrowser(this); gl->addWidget(_browserP, 0, 0, 1, 1); c2bSettings* settings(c2bSettingsP); resize(settings->value("c2bCiterExcerptView/size", QSize(500, 500)).toSize()); move(settings->value("c2bCiterExcerptView/position", pos()).toPoint()); _browserP->setFont(QFont(QFont().family(), settings->value("c2bCiterExcerptView/BrowserFontPointSize", QFont().pointSize()).toInt())); QString css(c2bUtils::fileToString(settings->fileName("cb2Bib/BrowserCssFile"))); if (css.isEmpty()) css = c2bUtils::fileToString(":/htm/htm/references.css"); _browserP->document()->setDefaultStyleSheet(css); QAction* c(new QAction(this)); c->setShortcut(QKeySequence(Qt::Key_Left)); addAction(c); connect(c, SIGNAL(triggered()), this, SLOT(close())); QAction* vzi(new QAction(this)); vzi->setShortcut(QKeySequence(QKeySequence::ZoomIn)); addAction(vzi); connect(vzi, SIGNAL(triggered()), _browserP, SLOT(zoomIn())); QAction* vzo(new QAction(this)); vzo->setShortcut(QKeySequence(QKeySequence::ZoomOut)); addAction(vzo); connect(vzo, SIGNAL(triggered()), _browserP, SLOT(zoomOut())); _browserP->updateHtml(html); } c2bCiterExcerptView::~c2bCiterExcerptView() { c2bSettings* settings(c2bSettingsP); if (!isFullScreen()) { settings->setValue("c2bCiterExcerptView/position", pos()); settings->setValue("c2bCiterExcerptView/size", size()); } settings->setValue("c2bCiterExcerptView/BrowserFontPointSize", _browserP->font().pointSize()); } cb2bib-2.0.3/src/PaxHeaders/c2bReferenceList.cpp0000644000000000000000000000013215104461633016334 xustar0030 mtime=1762812827.446764023 30 atime=1762812828.042759324 30 ctime=1762812827.446764023 cb2bib-2.0.3/src/c2bReferenceList.cpp0000644000175000001440000006116015104461633020331 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bReferenceList.h" #include "c2b.h" #include "c2bBibParser.h" #include "c2bCoreCiter.h" #include "c2bRLWebSearchSettings.h" #include "c2bSettings.h" #include "c2bTextBrowser.h" #include "c2bTextEdit.h" #include "c2bUtils.h" #include #include #include #include #include #include class TreeWidgetItem : public QTreeWidgetItem { // Reimplement sorting public: explicit TreeWidgetItem(const QStringList& strings) : QTreeWidgetItem(strings) {} bool operator<(const QTreeWidgetItem& other) const { const int sortCol(treeWidget()->sortColumn()); const QString str(c2bUtils::toAscii(text(sortCol), c2bUtils::Collation)); const QString other_str(c2bUtils::toAscii(other.text(sortCol), c2bUtils::Collation)); return str < other_str; } }; c2bReferenceList::c2bReferenceList(c2bTextEdit* ed, c2bTextBrowser* br, QWidget* parentw) : QWidget(parentw) { ui.setupUi(this); _editorP = ed; _browserP = br; _citerP = new c2bCoreCiter(this); _settingsP = c2bSettingsP; _settingsP->setDefaultValue("c2bReferenceList/SearchEngine", "https://www.google.com/search?ie=UTF-8&q="); _settingsP->setDefaultValue("c2bReferenceList/SearchEngineAddQuotes", false); setupFilterBar(); _key_index = 0; _id_index = 1; _year_index = 2; _journal_index = 3; _author_index = 4; _title_index = 5; QStringList header; header.append(tr("Key")); header.append(tr("ID")); header.append(tr("Year")); header.append(tr("Journal")); header.append(tr("Author")); header.append(tr("Title")); ui.listView->sortItems(_key_index, Qt::AscendingOrder); ui.listView->setHeaderLabels(header); ui.listView->hideColumn(_id_index); ui.listView->setContextMenuPolicy(Qt::ActionsContextMenu); citeEntryAction = new QAction(this); citeEntryAction->setText(tr("Cite Selected Entries")); _settingsP->setKeysequence("Shortcuts/Editor/", citeEntryAction); connect(citeEntryAction, SIGNAL(triggered()), this, SLOT(citeEntry())); ui.listView->addAction(citeEntryAction); c2bUtils::addSeparator(ui.listView); openFileAction = new QAction(this); openFileAction->setText(tr("Open Document File")); openFileAction->setStatusTip(tr("Open document file")); _settingsP->setKeysequence("Shortcuts/Editor/", openFileAction); connect(openFileAction, SIGNAL(triggered()), this, SLOT(openFile())); ui.listView->addAction(openFileAction); openUrlAction = new QAction(this); openUrlAction->setText(tr("Open Document URL")); openUrlAction->setStatusTip(tr("Open document URL")); _settingsP->setKeysequence("Shortcuts/Editor/", openUrlAction); connect(openUrlAction, SIGNAL(triggered()), this, SLOT(openUrl())); ui.listView->addAction(openUrlAction); openDOIAction = new QAction(this); openDOIAction->setText(tr("Browse Reference by DOI")); openDOIAction->setStatusTip(tr("Browse reference by DOI")); _settingsP->setKeysequence("Shortcuts/Editor/", openDOIAction); connect(openDOIAction, SIGNAL(triggered()), this, SLOT(openDOI())); ui.listView->addAction(openDOIAction); c2bUtils::addSeparator(ui.listView); openAuthorsWebSearchAction = new QAction(this); openAuthorsWebSearchAction->setText(tr("Web Search by Author")); openAuthorsWebSearchAction->setStatusTip(tr("Web search by Author")); _settingsP->setKeysequence("Shortcuts/Editor/", openAuthorsWebSearchAction); connect(openAuthorsWebSearchAction, SIGNAL(triggered()), this, SLOT(openAuthorWebSearch())); ui.listView->addAction(openAuthorsWebSearchAction); openTitleWebSearchAction = new QAction(this); openTitleWebSearchAction->setText(tr("Web Search by Title")); openTitleWebSearchAction->setStatusTip(tr("Web search by Title")); _settingsP->setKeysequence("Shortcuts/Editor/", openTitleWebSearchAction); connect(openTitleWebSearchAction, SIGNAL(triggered()), this, SLOT(openTitleWebSearch())); ui.listView->addAction(openTitleWebSearchAction); c2bUtils::addSeparator(ui.listView); webSearchSettingsAction = new QAction(this); webSearchSettingsAction->setText(tr("Web Search Settings")); webSearchSettingsAction->setStatusTip(tr("Web search settings")); _settingsP->setKeysequence("Shortcuts/Editor/", webSearchSettingsAction); connect(webSearchSettingsAction, SIGNAL(triggered()), this, SLOT(webSearchSettings())); ui.listView->addAction(webSearchSettingsAction); c2bUtils::addSeparator(ui.listView); clearSelectionsAction = new QAction(this); clearSelectionsAction->setText(tr("Clear Entry Selection")); clearSelectionsAction->setStatusTip(tr("Clear entry selection")); _settingsP->setKeysequence("Shortcuts/Editor/", clearSelectionsAction); connect(clearSelectionsAction, SIGNAL(triggered()), this, SLOT(clearSelections())); ui.listView->addAction(clearSelectionsAction); c2bUtils::addSeparator(ui.listView); refreshListAction = new QAction(this); refreshListAction->setShortcut(QKeySequence(QKeySequence::Refresh)); refreshListAction->setText(tr("Refresh List and Browser")); refreshListAction->setStatusTip(tr("Refresh list and browser")); connect(refreshListAction, SIGNAL(triggered()), this, SLOT(refreshList())); ui.listView->addAction(refreshListAction); connect(ui.listView, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(goToReference(QTreeWidgetItem*))); // Actions dependent on selection and availability itemSelectionChanged(); connect(ui.listView, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); // Browser functionality _references_html = c2bUtils::fileToString(":/htm/htm/references.html"); _references_html.replace("GET_CB2BIB_VERSION_NUMBER", C2B_VERSION); _bib_item_html = c2bUtils::fileToString(":/htm/htm/bib_item.html"); QString references_css(c2bUtils::fileToString(_settingsP->fileName("cb2Bib/BrowserCssFile"))); if (references_css.isEmpty()) references_css = c2bUtils::fileToString(":/htm/htm/references.css"); _browserP->document()->setDefaultStyleSheet(references_css); openTextLocalSearchAction = new QAction(this); openTextLocalSearchAction->setText(tr("Local Search for Selected Text")); openTextLocalSearchAction->setStatusTip(tr("Local search for selected text")); _settingsP->setKeysequence("Shortcuts/Editor/", openTextLocalSearchAction); connect(openTextLocalSearchAction, SIGNAL(triggered()), this, SLOT(openTextLocalSearch())); openTextLocalSearchAction->setEnabled(false); connect(_browserP, SIGNAL(copyAvailable(bool)), openTextLocalSearchAction, SLOT(setEnabled(bool))); openTextWebSearchAction = new QAction(this); openTextWebSearchAction->setText(tr("Web Search for Selected Text")); openTextWebSearchAction->setStatusTip(tr("Web search for selected text")); _settingsP->setKeysequence("Shortcuts/Editor/", openTextWebSearchAction); connect(openTextWebSearchAction, SIGNAL(triggered()), this, SLOT(openTextWebSearch())); openTextWebSearchAction->setEnabled(false); connect(_browserP, SIGNAL(copyAvailable(bool)), openTextWebSearchAction, SLOT(setEnabled(bool))); QList al = ui.listView->actions(); for (int i = 0; i < 2; ++i) _browserP->addAction(al.at(i)); _browserP->addAction(openTextLocalSearchAction); _browserP->addAction(openTextWebSearchAction); c2bUtils::addSeparator(_browserP); for (int i = 6; i < al.count(); ++i) _browserP->addAction(al.at(i)); _browserP->setContextMenuPolicy(Qt::ActionsContextMenu); connect(_browserP, SIGNAL(anchorClicked(QUrl)), this, SLOT(openLink(QUrl))); connect(_browserP, SIGNAL(highlighted(QUrl)), parentw->parent(), SLOT(showMessage(QUrl))); } c2bReferenceList::~c2bReferenceList() {} void c2bReferenceList::loadList(const QString& txt, bibSearcher* searcher) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); c2bBibParser* bpP(c2b::bibParser()); QString references_html(_references_html); QString references; QStringList fields; fields.append("abstract"); fields.append("author"); fields.append("booktitle"); fields.append("doi"); fields.append("editor"); fields.append("file"); fields.append("journal"); fields.append("pages"); fields.append("title"); fields.append("url"); fields.append("volume"); fields.append("year"); bibReference ref; bpP->initReferenceParsing(_editorP->editorFilename(), fields, &ref); const QRegExp initials1("\\b\\w\\b"); const QRegExp initials2("[^\\w\\s]"); const QRegExp nonletters("[^\\w\\s-]"); int ref_counter(0); while (bpP->referencesIn(txt, &ref)) { QString author(ref.anyAuthor()); QString author_long; if (!author.isEmpty()) { author = bpP->authorFromBibTeX(author); author_long = author; c2bUtils::remove(author_long, nonletters); author_long.replace(" and ", ", "); c2bUtils::simplifyString(author_long); author_long += '.'; c2bUtils::remove(author, initials1); c2bUtils::remove(author, initials2); author.replace(" and ", ", "); c2bUtils::simplifyString(author); } QString title(ref.anyTitle()); c2bUtils::cleanTitle(title, true); QString doi(ref.value("doi")); if (!doi.isEmpty()) if (!doi.startsWith("http")) doi = "https://dx.doi.org/" + QUrl::toPercentEncoding(doi); const QString file(ref.value("file")); const QString url(ref.value("url")); QString link; if (!file.isEmpty()) link = QDir::cleanPath(file); else if (!url.isEmpty()) link = url; else if (!doi.isEmpty()) link = doi; QString ID; ID.setNum(ref_counter + 1); QString year(ref.value("year")); const QString abstract(ref.value("abstract")); const QString journal(ref.anyJournal()); const QString key(ref.citeidName); _doiList.append(doi); _fileList.append(file); _urlList.append(url); _positionList.append(ref.positionValue); QStringList dataList; dataList.append(key); dataList.append(ID); dataList.append(year); dataList.append(journal); dataList.append(author); dataList.append(title); TreeWidgetItem* qi(new TreeWidgetItem(dataList)); qi->setStatusTip(_journal_index, bpP->fullJournal(journal)); qi->setStatusTip(_author_index, author_long); qi->setStatusTip(_title_index, title); ui.listView->insertTopLevelItem(0, qi); QString pages(ref.value("pages")); const QString volume(ref.value("volume")); if (!pages.isEmpty()) { if (!volume.isEmpty()) pages = ", " + pages; else pages = ' ' + pages; } if (!year.isEmpty()) year = '(' + year + ")."; QString bib_item_html(_bib_item_html); bib_item_html.replace("GET_REFERENCE_ANCHOR_ID", ID); bib_item_html.replace("GET_REFERENCE_ANCHOR_NAME", ID); bib_item_html.replace("GET_REFERENCE_AUTHOR", author_long); bib_item_html.replace("GET_REFERENCE_LINK", link); bib_item_html.replace("GET_REFERENCE_PAGES", pages); bib_item_html.replace("GET_REFERENCE_SOURCE", journal); bib_item_html.replace("GET_REFERENCE_TITLE", c2bUtils::toHtmlString(title)); bib_item_html.replace("GET_REFERENCE_VOLUME", volume); bib_item_html.replace("GET_REFERENCE_YEAR", year); if (searcher) { if (searcher->isSearchSimilar()) bib_item_html.replace("GET_REFERENCE_ABSTRACT", c2bUtils::toHtmlString(abstract) + searcher->hitHtmlDatum(ref_counter)); else bib_item_html.replace("GET_REFERENCE_ABSTRACT", searcher->hitHtmlAbstract(ref_counter) + searcher->hitHtmlDatum(ref_counter)); } else bib_item_html.replace("GET_REFERENCE_ABSTRACT", c2bUtils::toHtmlString(abstract)); references += bib_item_html; ++ref_counter; } if (searcher && ref_counter != searcher->hitsCount()) c2bUtils::warn(tr("Mismatch while loading searched references")); ui.listView->sortItems(ui.listView->sortColumn(), ui.listView->header()->sortIndicatorOrder()); ui.listView->resizeColumnToContents(_year_index); references_html.replace("GET_REFERENCES", references); _browserP->updateHtml(references_html); QApplication::restoreOverrideCursor(); c2b::showMessage(tr("Parsed %1 references.").arg(ref_counter)); } void c2bReferenceList::citeEntry() { QStringList keys; QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!(*it)->text(_key_index).isEmpty()) keys.append((*it)->text(_key_index)); ++it; } _citerP->cite(keys); } void c2bReferenceList::openDOI() { bool zdoi(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { const QString doi(_doiList.at((*it)->text(_id_index).toInt() - 1)); if (!doi.isEmpty()) { zdoi = true; c2bUtils::openFile(doi, parentWidget()); } ++it; } if (!zdoi) c2b::showMessage(tr("No DOI entry among selected references.")); } void c2bReferenceList::openFile() { bool zfile(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { const QString file(_fileList.at((*it)->text(_id_index).toInt() - 1)); if (!file.isEmpty()) { zfile = true; c2bUtils::openFile(file, parentWidget()); } ++it; } if (!zfile) c2b::showMessage(tr("No file entry among selected references.")); } void c2bReferenceList::openUrl() { bool zurl(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { const QString url(_urlList.at((*it)->text(_id_index).toInt() - 1)); if (!url.isEmpty()) { zurl = true; c2bUtils::openFile(url, parentWidget()); } ++it; } if (!zurl) c2b::showMessage(tr("No URL entry among selected references.")); } void c2bReferenceList::openLink(const QUrl& ln) { QString ln_str(QUrl::fromPercentEncoding(ln.toEncoded())); if (ln_str.isEmpty()) c2b::showMessage(tr("No link available for this reference.")); else if (ln_str.startsWith("Select reference ")) scrollToReference(c2bUtils::removed(ln_str, QRegExp("\\D"))); else if (QRegExp(":\\d+$").indexIn(ln_str) >= 0) emit openFile(ln_str); else c2bUtils::openFile(ln_str, parentWidget()); } void c2bReferenceList::openAuthorWebSearch() { const QString searchEngine(_settingsP->value("c2bReferenceList/SearchEngine").toString()); bool zwebs(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!(*it)->text(_author_index).isEmpty()) { zwebs = true; QString webs((*it)->text(_author_index)); webs.remove(','); webs = searchEngine + webs.simplified(); c2bUtils::openFile(webs, parentWidget()); } ++it; } if (!zwebs) c2b::showMessage(tr("No author entry among selected references.")); } void c2bReferenceList::openTitleWebSearch() { const QString searchEngine(_settingsP->value("c2bReferenceList/SearchEngine").toString()); const bool addQuotes(_settingsP->value("c2bReferenceList/SearchEngineAddQuotes").toBool()); bool zwebs(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!(*it)->text(_title_index).isEmpty()) { zwebs = true; QString webs((*it)->text(_title_index)); if (addQuotes) webs = '\"' + webs + '\"'; webs = searchEngine + webs; c2bUtils::openFile(webs, parentWidget()); } ++it; } if (!zwebs) c2b::showMessage(tr("No title entry among selected references.")); } void c2bReferenceList::openTextWebSearch() { const QString searchEngine(_settingsP->value("c2bReferenceList/SearchEngine").toString()); QString webs(_browserP->textCursor().selectedText()); if (_settingsP->value("c2bReferenceList/SearchEngineAddQuotes").toBool()) webs = '\"' + webs + '\"'; webs = searchEngine + webs; c2bUtils::openFile(webs, parentWidget()); } void c2bReferenceList::webSearchSettings() { c2bRLWebSearchSettings searchSettings(this); searchSettings.exec(); } void c2bReferenceList::openTextLocalSearch() { const QString text(_browserP->textCursor().selectedText()); const QString fn(_editorP->editorFilename()); c2b::doSearchInFiles(text, fn); } void c2bReferenceList::refreshList() { _doiList.clear(); _fileList.clear(); _urlList.clear(); _positionList.clear(); ui.listView->clear(); ui.comboFilter->clearEditText(); loadList(_editorP->toPlainText()); } void c2bReferenceList::goToReference(const QString& id) { QTextCursor tc(_editorP->textCursor()); tc.setPosition(_positionList.at(id.toInt() - 1)); _editorP->setTextCursor(tc); _editorP->verticalScrollBar()->setValue(_editorP->verticalScrollBar()->maximum()); _editorP->ensureCursorVisible(); _browserP->scrollToAnchor(id); int scrollPosition(_browserP->verticalScrollBar()->value()); _browserP->verticalScrollBar()->setValue(scrollPosition - 10); } void c2bReferenceList::goToReference(const int position) { // Maps position to internal reference id. It is needed by the search browser, when a // citation is edited in the original file. If this file is changed multiple times, // positions in the search browser get outdated, so the mapping position-id is inexact. // Thus, search for the closest reference. int ip(0); int pdiff_min(1000000); for (int i = 0; i < _positionList.count(); ++i) { int p(_positionList.at(i)); if (p == position) { ip = i; break; } int pdiff(abs(p - position)); if (pdiff < pdiff_min) { pdiff_min = pdiff; ip = i; } } QString id; goToReference(id.setNum(ip + 1)); } void c2bReferenceList::goToReference(QTreeWidgetItem* ref) { if (ref == 0) return; const QString id(ref->text(_id_index)); goToReference(id); } void c2bReferenceList::scrollToReference(const QString& id) { if (id.isEmpty()) return; QList items(ui.listView->findItems(id, Qt::MatchExactly, 1)); if (items.count() == 0) return; QTreeWidgetItem* item(items.at(0)); ui.listView->setFocus(); item->setSelected(!item->isSelected()); ui.listView->scrollToItem(item); QTextCursor tc(_editorP->textCursor()); tc.setPosition(_positionList.at(id.toInt() - 1)); _editorP->setTextCursor(tc); _editorP->verticalScrollBar()->setValue(_editorP->verticalScrollBar()->maximum()); _editorP->ensureCursorVisible(); } void c2bReferenceList::clearSelections() { disconnect(ui.listView, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected); while (*it) { (*it)->setSelected(false); ++it; } itemSelectionChanged(); connect(ui.listView, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); } void c2bReferenceList::itemSelectionChanged() { int entries(0); int doi(0); int file(0); int url(0); int author(0); int title(0); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!_doiList.at((*it)->text(_id_index).toInt() - 1).isEmpty()) ++doi; if (!_fileList.at((*it)->text(_id_index).toInt() - 1).isEmpty()) ++file; if (!_urlList.at((*it)->text(_id_index).toInt() - 1).isEmpty()) ++url; if (!(*it)->text(_author_index).isEmpty()) ++author; if (!(*it)->text(_title_index).isEmpty()) ++title; ++entries; ++it; } citeEntryAction->setEnabled(entries > 0); citeEntryAction->setStatusTip(tr("Cite selected entries. %1 Entries selected.").arg(entries)); openDOIAction->setEnabled(doi > 0); openDOIAction->setStatusTip(tr("Browse reference by DOI. %1 DOIs in selected entries.").arg(doi)); openFileAction->setEnabled(file > 0); openFileAction->setStatusTip(tr("Open document file. %1 Files in selected entries.").arg(file)); openUrlAction->setEnabled(url > 0); openUrlAction->setStatusTip(tr("Open document URL. %1 URLs in selected entries.").arg(url)); openAuthorsWebSearchAction->setEnabled(author > 0); openAuthorsWebSearchAction->setStatusTip(tr("Web search by Author. %1 Entries selected.").arg(author)); openTitleWebSearchAction->setEnabled(title > 0); openTitleWebSearchAction->setStatusTip(tr("Web search by Title. %1 Entries selected.").arg(title)); emit hasSelectedItems(entries > 0); } QStringList c2bReferenceList::selectedKeys() const { QStringList keys; QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!(*it)->text(_key_index).isEmpty()) keys.append((*it)->text(_key_index)); ++it; } return keys; } void c2bReferenceList::setLyXPipe() { _citerP->setLyXPipe(); } /*************************************************************************** Filter Bar ***************************************************************************/ void c2bReferenceList::setupFilterBar() { const QStringList types(searchPattern::types()); _filter_mode = _settingsP->value("c2bReferenceList/FilterMode", types.first()).toString(); QActionGroup* filterMode = new QActionGroup(this); filterMode->setExclusive(true); for (int i = 0; i < types.count(); ++i) { const QString& t = types.at(i); QAction* act = filterMode->addAction(t); act->setCheckable(true); if (_filter_mode == t) act->setChecked(true); } QMenu* filterModeM = new QMenu(this); filterModeM->addActions(filterMode->actions()); ui.filterB->setMenu(filterModeM); connect(filterMode, SIGNAL(triggered(QAction*)), this, SLOT(setFilterMode(QAction*))); connect(ui.comboFilter, SIGNAL(editTextChanged(QString)), this, SLOT(blockFilterSignals())); } void c2bReferenceList::setFilterMode(QAction* mode) { _filter_mode = mode->text(); _settingsP->setValue("c2bReferenceList/FilterMode", _filter_mode); filterList(); } void c2bReferenceList::blockFilterSignals() { ui.comboFilter->blockSignals(true); QTimer::singleShot(500, this, SLOT(filterList())); } void c2bReferenceList::filterList() { const QString text(ui.comboFilter->currentText()); if (text.isEmpty()) { QTreeWidgetItemIterator it(ui.listView); while (*it) { (*it)->setHidden(false); ++it; } } else { searchPattern pattern(text, _filter_mode); QTreeWidgetItemIterator it(ui.listView); while (*it) { QTreeWidgetItem* item = *it; if (pattern.matches(item->text(_author_index)) || pattern.matches(item->text(_title_index))) item->setHidden(false); else item->setHidden(true); ++it; } QTimer::singleShot(5000, this, SLOT(keepFilterPattern())); } itemSelectionChanged(); ui.comboFilter->blockSignals(false); } void c2bReferenceList::keepFilterPattern() { const QString text(ui.comboFilter->currentText()); if (!text.isEmpty()) if (ui.comboFilter->findText(text) < 0) ui.comboFilter->addItem(text); } cb2bib-2.0.3/src/PaxHeaders/c2bFileSystemWatcher.cpp0000644000000000000000000000013115104461633017203 xustar0029 mtime=1762812827.42676418 30 atime=1762812828.042759324 30 ctime=1762812827.430764149 cb2bib-2.0.3/src/c2bFileSystemWatcher.cpp0000644000175000001440000000156715104461633021206 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bFileSystemWatcher.h" #include /** Workaround to avoid reading a file when external writing has not yet finished */ c2bFileSystemWatcher::c2bFileSystemWatcher(QObject* parento) : QObject(parento) { connect(&_filewatcher, SIGNAL(fileChanged(QString)), this, SLOT(waitForSaved(QString))); } void c2bFileSystemWatcher::waitForSaved(const QString& path) { _path = path; QTimer::singleShot(500, this, SLOT(fileSaved())); } void c2bFileSystemWatcher::fileSaved() { emit fileChanged(_path); } cb2bib-2.0.3/src/PaxHeaders/c2bFileDialog.h0000644000000000000000000000013215104461633015246 xustar0030 mtime=1762812827.574763013 30 atime=1762812828.042759324 30 ctime=1762812827.574763013 cb2bib-2.0.3/src/c2bFileDialog.h0000644000175000001440000000433615104461633017245 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BFILEDIALOG_H #define C2BFILEDIALOG_H #include class c2bSettings; class c2bFileDialog : public QFileDialog { Q_OBJECT public: static QString getFilename(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); static QString getOpenFilename(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); static QStringList getOpenFilenames(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); static QString getSaveFilename(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); static QString getExistingDirectory(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString()); static QString getSystemFilename(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); private: c2bFileDialog(QWidget* parentw, const QString& caption, const QString& fpath, const QString& ffilter); ~c2bFileDialog(); QString _current_file; QString fileName(const QString& path); c2bSettings* settings; static QString _caption(const QString& generic, const QString& caption); static QString _dirpath(const QString& path); static QString _filename(const QString& path); static QString _path(const QString& path); void readSettings(); void writeSettings(); private slots: void accept(); void selectCurrentFile(); }; #endif cb2bib-2.0.3/src/PaxHeaders/cb2Bib.cpp0000644000000000000000000000013215104461633014276 xustar0030 mtime=1762812827.486763707 30 atime=1762812828.042759324 30 ctime=1762812827.498763613 cb2bib-2.0.3/src/cb2Bib.cpp0000644000175000001440000032274615104461633016305 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "cb2Bib.h" #include "c2b.h" #include "c2bBibMenu.h" #include "c2bBibParser.h" #include "c2bCiterWidget.h" #include "c2bClipEdit.h" #include "c2bClipboard.h" #include "c2bEditor.h" #include "c2bFileDialog.h" #include "c2bNetworkQuery.h" #include "c2bPdfImport.h" #include "c2bPostprocess.h" #include "c2bSaveRegExp.h" #include "c2bSearchInFiles.h" #include "c2bSettings.h" #include "c2bTextBrowser.h" #include "c2bUtils.h" #include #include #include /** \page overview Overview cb2Bib is a free, open source, and multiplatform application for rapidly extracting unformatted, or unstandardized bibliographic references from email alerts, journal Web pages, and PDF files. cb2Bib facilitates the capture of single references from unformatted and non standard sources. Output references are written in BibTeX. Article files can be easily linked and renamed by dragging them onto the cb2Bib window. Additionally, it permits editing and browsing BibTeX files, citing references, searching references and the full contents of the referenced documents, inserting bibliographic metadata to documents, and writing short notes that interrelate several references. Current version: cb2Bib GET_VERSION. See \ref changelog for a detailed list of changes and acknowledgments, and \ref relnotes for additional notes and information. See also \ref relnotes203.

 

GET_TABLE_OF_CONTENTS

 

\section descrip cb2Bib Description cb2Bib reads the clipboard text contents and process it against a set of predefined patterns. If this automatic detection is successful, cb2Bib formats the clipboard data according to the structured BibTeX reference syntax. Otherwise, if no predefined format pattern is found or if detection proves to be difficult, manual data extraction is greatly simplified by cb2Bib. In most cases, such manual data extraction will provide with a new, personalized pattern to be included within the predefined pattern set for future automatic extractions. Once the bibliographic reference is correctly extracted, it is added to a specified BibTeX database file. Optionally, document files are renamed to a DocumentID filename and moved to a desired directory as a personal article library, and their metadata is updated with the bibliographic reference. See \ref metadata section. cb2Bib facilitates writing short notes related to bibliographic collections. Notes are written using a minimalist markup on a plain text editor, and can latter be converted to HTML. Related references and links become easily accessible on any browser or by the embedded cb2Bib viewer. See \ref relnotes110.

 

\section usage Using cb2Bib \subsection procedure Procedure - Select the reference to import from the email or web browser \n On Unix machines, cb2Bib automatically detects mouse selections and clipboard changes. On Windows machines, copy or Ctrl-C is necessary to activate cb2Bib automatic processing. - cb2Bib automatic processing \n Once text is selected cb2Bib initiates the automatic reference extraction. It uses the predefined patterns from file regexp.txt to attempt automatic extraction. See \ref c2bconf_files section for setting the user predefined pattern matching expression file. After a successful detection bibliographic fields appear on the cb2Bib item line edits. Manual editing is possible at this stage. - cb2Bib manual processing \n If no predefined format pattern is found or if detection proves to be difficult, a manual data extraction must be performed. Select, either using mouse or Shift+arrow keys, the reference fields from the cb2Bib clipboard area. A popup menu will appear after selection is made. Choose the corresponding bibliographic field. See \ref entrytype. If operating with the keyboard, first letter of the field is set as a menu shortcut. Then, typing 'A' sets selection to 'author', or '+A' to 'add authors'. Selection is postprocessed and added to the cb2Bib item line edit. cb2Bib field tags will show on the cb2Bib clipboard area. Once the manual processing is done, cb2Bib clipboard area will contain the matching pattern. The pattern can be further edited and stored to the regexp.txt file using Insert Regular Expression, Alt+I. See the \ref clipboard and \ref regexpeditor sections. - Download reference to cb2Bib \n cb2Bib has the built-in functionality to interact with publishers "Download reference to Citation Manager" service. Choose BibTeX format, or any other format that you can translate using External Clipboard Preparsing Command. See \ref keyboard, Alt C. Click "Download" from your browser. When asked "Open with..." select cb2Bib. cb2Bib will be launched if no running instance is found. If already running, it will place the downloaded reference to the clipboard, and it will start processing. Make sure your running instance is aware of clipboard changes. See \ref c2bbuttons. For convenience, the shell script c2bimport, and the desktop config file c2bimport.desktop are also provided. - Adding documents \n PDF and other documents can be added to the BibTeX reference by dragging the file icon and dropping it into the cb2Bib's panel. Optionally, document files, are renamed to a DocumentID filename and moved to a desired directory as a personal article library (See \ref c2bconf_documents section). Linked to a reference documents correspond to the BibTeX tag file. Usual reference manager software will permit to retrieve and visualize these files. Download, copy and/or moving is scheduled and performed once the reference is accepted, e.g., once it is saved by pressing Save Reference button. - Multiple retrieving from PDF files \n Multiple PDF or convertible to text files can be sequentially processed by dragging a set of files into cb2Bib's PDFImport dialog. By starting the processing button, files are sequentially converted to text and send to cb2Bib clipboard panel for reference extraction. See \ref pdfimport for details. - Journal-Volume-Page Queries \n Takes input Journal, Volume, and first page from the corresponding edit lines and attempts to complete the reference. Additionally, queries consider title, DOI, and an excerpt, which is a simplified clipboard panel contents. See \ref c2bconf_network section, the distribution file netqinf.txt, and \ref relnotes035 for customization and details. - BibTeX Editor \n cb2Bib includes a practical text editor suitable for corrections and additions. cb2Bib capabilities are readily available within the editor. E.g., the reference is first sent to cb2Bib by selecting it, and later retrieved from cb2Bib to the editor using 'right click' + 'Paste Current BibTeX'. Interconversions Unicode <-> LaTeX, long <-> abbreviated journal name, and adding/renaming PDF files are easily available. BibTeX Editor is also accessible through a shell command line. See \ref commandline and \ref bibeditor. \subsection c2bbuttons Buttons Functionality - \b About \n About cb2Bib, bookmarks, and online help. - \b Configure \n Configure cb2Bib. See \ref configuration section. - Search references \n Opens the cb2Bib's search dialog. The search is performed either on the current BibTeX file, or for all BibTeX files on the current directory. Optionally, the search is extended to reference's files. Hits are displayed on an editor window. See \ref bibsearch. See also \ref c2bconf_utilities section to configure the external to text converter. - \b PDFImport \n Launches cb2Bib's PDFImport window. Files dragged into PDFImport window are sequentially translated to text and sent to cb2Bib clipboard panel. cb2Bib automatic and manual capabilities are then easily available to extract and supervise reference extractions. See \ref pdfimport. - \b Exit \n Exits cb2Bib. - Dis/Connect Clipboard \n Toggles automatic cb2Bib and desktop clipboard connection. While the automatic cb2Bib-clipboard connection permits reducing keystrokes, the disconnected mode is needed in cases where multiple mouse selections or copies are required to complete a reference extraction. See also \ref relnotes041 and \ref relnotes021 if you experience problems with this feature. - Network Reference Query \n Starts Network Query. It usually takes input Journal, Volume, and first page from the corresponding edit lines and attempts to complete the reference. See \ref c2bconf_network network section to customize querying. See the distribution file netqinf.txt and also \ref relnotes035 for the details. - View BibTeX Reference \n View current reference as will be output to the BibTeX file. Eventual manual changes should be done on the item line edit. - Save Reference \n Inserts the current bibliographic reference to the output BibTeX file. This action decides whether or not a reference is accepted. Scheduled actions such as PDF downloading, copying or renaming will be performed at this time. - Open BibTeX File \n Opens the current BibTeX output file. Right click within the BibTeX Editor window for its particular functionality. See also \ref bibeditor. \subsection keyboard Additional Keyboard Functionality Most keyboard shortcuts are customizable. See \ref c2bconf_shortcuts. In the following, default shortcuts are used to describe functionality. - Alt A \n Starts \ref c2bannote. Specify the note's filename in the dialog. A new note is created if the file name does not exist. The cb2Bib Annote is opened as a separate program. Exiting cb2Bib will not exit the note's viewer. On the viewer, pressing key E launches the default text editor. The viewer will track the editor, and will update the note's display each time the editor saves it. The viewer's functionality is disabled if cb2Bib was not compiled and linked against QtWebKit or QtWebEngine library. See \ref commandline to use Annote in command line mode. - Alt B \n Edits the Bookmarks and Network Query Info file netqinf.txt. - Alt C \n Preparses cb2Bib's clipboard through a user specified external script or tool. Preparsing is necessary to catch formatted references that can not be easily extracted using recognition patterns, or that are written in ambiguous formats. Many available scripts or specific user-written tools can be incorporated to cb2Bib through this external preparsing capability. In addition, simple, one-line scripts can be used within PDFImport to provide, for instance, the journal name when missing from the PDF first page. The cb2Bib distribution contains the sample scripts isi2bib and ris2bib that convert ISI and RIS formatted strings to BibTeX. See \ref c2bconf_clipboard for details. - Alt D \n Deletes temporary BibTeX output file. This permits using cb2Bib output files as temporary media to transfer references to a preferred reference manager and preferred format. Caution: This feature is not intended for the users who actually store their references in one or several BibTeX files. Remember to import references prior to delete cb2Bib output file. - Alt E \n Edits the regular expression file. It permits an easy access and modification of stored extraction patterns. New patterns are conveniently added to to the regular expression file by using the RegExp Editor button functionality. - Alt F \n Launches a file dialog for selecting the source file name for the BibTeX entry file. Selected files are displayed either, as the actual source filename, or, as the target filename, depending on the file copy/rename/move settings. See \ref c2bconf_documents. Alternatively to Alt F, documents can be easily linked to a reference by dragging the document file and dropping it to the cb2Bib panel. - Alt I \n Edits and optionally inserts the current regular expression pattern. See the \ref clipboard and \ref regexpeditor sections. - Alt J \n Edits the Journal Abbreviations file. - Alt O \n Opens the currently linked document for browsing. Documents can be easily linked to a reference by dragging the document file and dropping it to the cb2Bib panel, or with Alt F. Linked documents correspond to the BibTeX tag file. - Alt P \n Postprocess BibTeX output file. It launches a user specified script or program to postprocess the current BibTeX file. The cb2Bib distribution contains two sample scripts. One, bib2pdf is a shell script for running latex and bibtex; this permits to check the BibTeX file for possible errors, and to easily produce a suitable output for printing. The other one, bib2end.bat is a batch script for running bib2xml and xml2end, which converts references into Endnote format. See \ref c2bconf_bibtex for details. - Alt R \n Restarts cb2Bib automatic engine. Takes input data not from the system clipboard but from the cb2Bib clipboard panel. This permits editting the input stream from poorly translated PDF captions, correcting for author superscripts, or helps in debugging regular expressions. - Alt W \n Writes current reference to the source document file. This option is intended for writing and updating bibliographic metadata to document files without needing to use BibTeX files. Only local and writable files are considered. - Alt X \n Check Repeated looks for existing references in the BibTeX directory similar to the current one. The search is done for exact cite ID, and for title and author field values, or, if empty, for booktitle and editor,using the \htmlonly approximate string \endhtmlonly search pattern. See also \ref c2bconf_bibtex. - F4 \n Toggles between Main and Other Fields reference edit tabs. - Esc \n Quits cb2Bib popup menu. The cb2Bib menu pops up each time a selection in made in the clipboard panel. This saves keystrokes in a normal bibliographic extraction. Press Esc or Right Click mouse button if you need to gain access to the editor cut/copy/paste functionality instead.

 

\section detail Advanced Features Advanced features, and processing and extraction details are described in the following sections: - \ref faq_automatic_extraction - \ref clipboard - \ref authorproc - \ref journalproc - \ref heuristics - \ref regexpeditor Configuration information is described in the following sections: - \ref configuration - \ref predefinedplaceholders Utilities and modules are described in the following sections: - \ref bibsearch - \ref bibeditor - \ref pdfimport - \ref metadata - \ref commandline - \ref c2bannote - \ref c2bciter

 

\section requirements Requirements \subsection requirements_comp Compilation To compile cb2Bib, the following libraries must be present and accessible: - Qt 5.7.0 or later from \htmlonly Qt Project. \endhtmlonly On a Linux platform with Qt preinstalled, make sure that the devel packages and Qt tools are also present. - QtWebKit or QtWebEngine library (optional) to compile cb2Bib Annote viewer. No special action or flag is needed during compilation. - Compression libraries \htmlonly LZ4 \endhtmlonly or \htmlonly LZO \endhtmlonly (optional). To chose a particular one, type configure --enable-lz4 or configure --enable-lzo. On machines with SSE4 instruction set, the \htmlonly LZSSE \endhtmlonly compressor can be used in place of LZ4 and LZO, by typing configure --enable-lzsse. If none of the above compressors were appropiate on a particular platform, type configure --enable-qt-zlib before compiling. - On machines with AVX2 instruction set, consider using configure --enable-avx2 as this will improve cb2Bib search performance. - X11 header files if compiling on Unix platforms. Concretely, headers X11/Xlib.h and X11/Xatom.h are needed. - The header files fcntl.h and unistd.h from glibc-devel package are also required. Otherwise compilation will fail with `::close' undeclared. \subsection requirements_run Deployment Although not needed for running cb2Bib, the following tools extend cb2Bib applicability: - MathJax, available at \htmlonly https://www.mathjax.org, \endhtmlonly for displaying mathematical notation. Simply, download and unzip it in a desired directory. See \ref c2bconf_annote. - ExifTool, version 7.31 or later, available at \htmlonly https://exiftool.org, \endhtmlonly for metadata insertion. - pdftotext, found packaged as xpdf, and downloadable from \htmlonly https://www.xpdfreader.com/download.html. \endhtmlonly - The bib2xml and xml2end \htmlonly BibUtils, \endhtmlonly for the postprocessing script bib2end.bat on Windows platforms. - LaTeX packages, for checking BibTeX files correctness and for references printing through the shell script bib2pdf.

 

\section credits Credits and License The cb2Bib icons are taken from the Oxygen, Crystal SVG, and Noia icon sets, to be found at the \htmlonly KDE Desktop Environment. \endhtmlonly Several people has contributed with suggestions, bug reports or patches. For a detailed list of acknowledgments see the \ref changelog. The cb2Bib program is licensed under the terms of the \htmlonly GNU General Public License \endhtmlonly version 3.

 

> GET_UPDATEDON \n > First released version 0.1.0 on 2004-06-29. \n > © 2004-2025 Pere Constans \n */ /** \page relnotes Release Notes \section relnotes203 Release Note cb2Bib 2.0.3 cb2Bib has been ported to Qt6. The minimum Qt version requirement, Qt 5.7.0 or later, is maintained in this release. The cb2Bib's Annote viewer uses either QtWebKit or QtWebEngine libraries for the rendering of mathematical expressions. QtWebKit was deprecated when Qt6 was released. QtWebEngine is now the only up-to-date web rendering library in Qt. The port to Qt6 is therefore of interest to the users of the Annote viewer. Note also that these large web rendering libraries are optional and that no special action or flag is needed during compilation. They are linked to cb2Bib if present at compilation time. Alternatively, if none is present, Annote viewer will fallback at run time to the user's default web browser. The Qt5 release introduced the PCRE based regular expressions on QRegularExpression. This addition enhanced string matching with respect Qt's internal QRegExp. Throughout the 1.9.x series, cb2Bib moved from QRegExp to QRegularExpression, and to its own and specialized txtmatcher. This move brought a remarkable speedup for in-document searches and full search indexing. The QRegExp matcher was kept in places where very short strings are checked against very many different patterns, as in author name recognition and heuristic reference extraction. In this context, QRegExp is still preferable to QRegularExpression due to the lower footprint and faster initialization of the former. In Qt6, QRegExp has been moved to the compatibility module Qt6Core5Compat. This module must be included when compiling cb2Bib against Qt6.

 

*/ /** \page relnotes Release Notes \section relnotes201 Release Note cb2Bib 2.0.1 To optimize search on PDF's contents, cb2Bib keeps a cache with the extracted text streams, that are compressed to reduce disk space and reading overhead. Nowadays, compressors with extremely high decompression speed are available. Two of them are LZSSE, for SSE4 capable architectures, and LZ4, for a broader range of CPUs. These two compressors can now be used by cb2Bib, with the latter set as the default compression library in cb2Bib builds. When upgrading to version 2.0.1, the first search on the document collection will recreate the cache, and this step will be noticeably slow. Additionally, cb2Bib 2.0.1 includes original, optimized text matching code for AVX2 capable architectures that is used for search matching and BibTeX parsing. This code is not set in default builds and needs to be explicitly enabled at compilation time. Finally, it is important mentioning the inclusion in version 2.0.1 of stemmed context search, see \ref contextsearch for details, and contributed feedback in handling citations and extending cite commands to markdown syntax, see \ref predefinedplaceholders.

 

*/ /** \page relnotes Release Notes \section relnotes200 Release Note cb2Bib 2.0.0 Throughout the 1.9.x series, the cb2Bib sources were updated to the improved string processing capabilities of Qt5 and PCRE libraries. This update has brought a remarkable speedup for in-document searches and full search indexing. Alternate normalization of journal titles and abbreviations, upgrading jsMath to MathJax, extending network queries syntax, and a PDF user manual are the additional enhancements in cb2Bib 2.0.0. Back in version 0.3.3, cb2Bib introduced network queries to obtain the data for a citation. While convenient, queries to publishers' websites were difficult to setup and fragile. Nowadays, fortunately, arXiv, PubMed and Crossref offer structured APIs. These interfaces provide to the end user an easy setup for completing bibliographic citations.

 

*/ /** \page relnotes Release Notes \section relnotes190 Release Note cb2Bib 1.9.0 The cb2Bib sources have been ported to Qt5. To highlight this major update in library requirements the version number is set to 1.9.0. Later, once stabilized and new functionality related to Qt5 enhancements are applied, version number will be set to 2. At this point cb2Bib has exactly the same functionality as its preceding version 1.5.0. To build the program, however, only qmake and its related config procedure are available. The cmake scripts have not yet been ported. Qt5 brings important enhancements related to regular expressions and string processing. Some careful updates to the cb2Bib sources are needed to fully benefit from them. They will implemented through the 1.9.x series. We expect by then a performance boost on full text, regular expression based searches.

 

*/ /** \page relnotes Release Notes \section relnotes150 Release Note cb2Bib 1.5.0 Included in version 1.5.0 sources there is a patch for XPDF 3.0.4, the default tool to convert PDF documents to plain text. The modified code separates superscripts to avoid words being joined to reference numbers and author names joined to affiliations' glyphs. Interested users will need to download the package, apply the patch, and compile it. Additionally, this version improves converted text postprocessing. This step normalizes character codes, reverts ligatures, restores when possible orphan diacritics and broken words, and undoes text hyphenation. Conversion to text and postprocessing is important for reference extraction, and document indexing and searching. It is therefore recommended to delete cached document-to-text data to benefit from the present improvements. cb2Bib stores cached texts in *c2b files in an user specified directory. After that, by performing a search or initiating indexing an updated cache will be created.

 

*/ /** \page relnotes Release Notes \section relnotes147 Release Note cb2Bib 1.4.7 Approximate and context searches effectively locate our references of interest. As collections grow in size, and low performance devices, netbooks and tablets, start being used, complete document searches become demanding. Besides, it is often not clear what to query for, and then a glossary of terms provides guidance. Often too, interest lies on subsetting documents by being similar to a given one. Version 1.4.7 adds a pragmatic term or keyword extraction from the document contents. Accepted keywords are set as the substrings appearing at least twice in one document, appearing at least in three documents, and conforming to predefined part-of-speech (POS) sequences. Keyword extraction is performed by either clicking on Index Documents at the c2bciter desktop tray menu, or, by typing cb2bib --index [bibdirname] on a shell. During extraction, the Part Of Speech (POS) Lexicon distribution file must be available and readable. On termination, indexing files are saved on the Search In Files Cache Directory. Simply copying this directory will synchronize keyword indexing to a second computer. After refreshing c2bciter module, pressing key G displays the glossary of terms. On a reference, pressing K displays its list of keywords. Pressing R on a keyword lists the references related to that keyword. Pressing R on a reference lists similarly related references. Similarity is assessed based on keyword occurrences. Left and Right keys provide previous and next navigation. Pressing V on either a reference keyword, or a keyword reference, visualizes the keyword excerpts from the reference's document. To close excerpt dialog press Esc or Left keys. See also \ref c2bciter, \ref c2bconf_files, and \ref commandline.

 

*/ /** \page relnotes Release Notes \section relnotes140 Release Note cb2Bib 1.4.0 The c2bciter module was introduced in version 1.3.0. Its name, as it was described, states its purpose of being "aimed to ease inserting citation IDs into documents". In fact, it does have such functionality. And, it has also another, equally important one: it provides a very fast way to retrieve a given work from our personal collections. Retrieving is accomplished through pre-sorted views of the references and filtering. Both, views and filtering, scale on the (tens of) thousands references. Usually, we recall a work from its publication year, a few words from its title, or (some of the letters of) one of its authors names. Often, what we remember is when a reference was included into our collection. Therefore, having such a chronological view was desirable. The implementation of this sorted-by-inclusion-date view was not done during the 1.3.x series, but postponed to version 1.4.0; somehow, to indicate that some sort of 'proprietary' BibTeX tag might be required to specify inclusion timestamps. I have been reluctant through the cb2Bib's life span to introduce 'cb2Bib-only' tags in the BibTeX outputs. I believe that there is little gain, and it costs, possibly, breaking interoperability. In the end, the choice was to not write any 'timestamp' tag in references. Instead, c2bciter checks for the last modified date of the linked documents to build an approximated chronological view. The advantage is that all, not just 'version 1.4.0 or later', references are sorted. Furthermore, if a reference is later corrected, and the document metadata is updated too, the modification date is reflected in the view. The obvious inconvenience is that no such sorting can be done for references without an attached document. See also \ref c2bciter.

 

*/ /** \page relnotes Release Notes \section relnotes130 Release Note cb2Bib 1.3.0 When version 0.2.7 came up, it was mentioned in \ref relnotes027 that cb2Bib 'doesn't have the means to automatically discern an author name from a department or street name'. I forgot mentioning, that I did not expect cb2Bib would have had such a feature. Since the last \ref relnotes110, the cb2Bib internals had changed significantly. Some changes, such heuristic recognition for interlaced authors and affiliations, get easily noticed. Other changes, however, do not, and need additional explanation. From version 1.2.3, the switches --txt2bib and --doc2bib set cb2Bib to work on console mode. The non-exact nature of the involved extractions makes logging necessary. On Windows, graphic or console modes must be decided not at run time, but when the application is built. So far, logging and globing were missing. This release adds the convenience wrapper c2bconsole. Typing c2bconsole --txt2bib i*.txt out.bib, for instance, will work as it does in the other platforms. Lists of references are now sorted case and diacritic insensitive. For some languages such a choice is not the expected one, and some operating systems offer local-aware collation. Due to usual inconsistencies and inaccuracies in references, this decision was taken to group together 'Density Matrix' with 'Density-matrix', and \htmlonly Møller \endhtmlonly with Moller, which, in a personal collection, most probably, refer to the same concept and to the same person. Additionally, document to text converted strings are now clean from extraneous, non-textual symbols. Therefore, recreating cache files is recommended. Finally, this release introduces a new module, named c2bciter, and aimed to ease inserting citation IDs into documents. The module should ideally stay idle at the system tray, and be recalled as needed by pressing a global, desktop shortcut. This functionality, while desirable, and usual in dictionaries, is platform and desktop dependent. On KDE there are currently known issues when switching among virtual desktops. See also \ref c2bciter, and \ref commandline.

 

*/ /** \page relnotes Release Notes \section relnotes110 Release Note cb2Bib 1.1.0 A frequent request from cb2Bib users has been to expand the command line functionality. So far few progress has been seen in this regard. First, the addition of in-document searches and reading/inserting metadata were priorities. Second, cb2Bib is not the tool to interconvert among bibliographic formats. And third, cb2Bib is designed to involve the user in the search process, in the archiving and validation of the discovered works and references. For the latter reason, and for not knowing a priori how would such a tool be designed, the cb2Bib internals had been interlaced to its graphical interface. At the time of version 0.7.0, when the graphical libraries changed, and a major refactoring was required, the code started moving toward a better modularization and structure. The current release pushes code organization further. As a result, it adds two new command line switches: --html-annote and --view-annote. The new cb2Bib module is named after the BibTeX key 'annote'. Annote is not for a 'one reference annotation' though. Instead, Annote is for short notes that interrelate several references. Annote takes a plain text note, with minimal or no markup, inserts the bibliographic citations, and converts it to a HTML page with links to the referenced documents. From within cb2Bib, to write your notes, type Alt+A, enter a filename, either new or existing, and once in Annote, type E to launch your default text editor. For help, type F1. Each time you save the document the viewer will be updated. To display mathematical notations, install \htmlonly jsMath \endhtmlonly locally. And, remember, code refactoring introduces bugs. See also \ref c2bannote and \ref commandline.

 

*/ /** \page relnotes Release Notes \section relnotes100 Release Note cb2Bib 1.0.0 Approximately four years ago the first cb2Bib was released. It included the possibility of easily linking a document to its bibliographic reference, in a handy way, by dragging the file to the main (at that time, single) panel. Now, in version 1.0.0, when a file is dropped, cb2Bib scans the document for metadata packets, and checks, in a rather experimental way, whether or not they contain relevant bibliographic information. Publishers metadata might or might not be accurate. Some, for instance, assign the DOI to the key Title. cb2Bib extracts possibly relevant key-value pairs and adds them to clipboard panel. Whenever key-value pairs are found accurate, just pressing Alt+G imports them to the line edits. If keys with the prefix bibtex are found, their values are automatically imported. The preparsed metadata that is added to the clipboard panel begins with [Bibliographic Metadata and ends with /Bibliographic Metadata]. Therefore, if you are using PDFImport together with a set of regular expressions, such that they contain the begin (^) or end ($) anchors, you can safely replace them by the above tags. In this manner, existing regular expressions remain useful with this minor change. And, with the advantage that, if recognition fails for a given document, metadata might give the hardest fields to extract from a PDF article, which are author and title. See also \ref metadata.

 

*/ /** \page relnotes Release Notes \section relnotes084 Release Note cb2Bib 0.8.4 The previous cb2Bib release added the command line option --conf [full_path]cb2bib.conf to specify the settings location. This feature was intended, mainly, as a clean way to run the program on a host computer from a removable drive. The work done focused on arranging the command line and settings related code. It was left for a later release to solve some requirements regarding the managing of file pathnames and temporary files. This release addresses these two points. Now, when cb2Bib is launched as cb2bib --conf --without a configuration filename-- it treats filenames as being relative to the cb2Bib actual location. Temporary files, if needed, will be placed at this location as well. Therefore, no data is being written on the host, and cb2Bib works independently of the actual address that the host assigns to the removable drive. The Windows' un/installer cleans/sets configuration data on the registry. Being aware of this particular, it might be better not to install the program directly to the USB drive. Just copy the cb2Bib base directory from a home/own computer to the removable drive, and then run it on the host computer as cb2bib --conf.

 

*/ /** \page relnotes Release Notes \section relnotes083 Release Note cb2Bib 0.8.3 cb2Bib accepts several arguments on its command line to access specific functionality. So far, the command cb2bib tmp_ref permits importing references from the browser, whenever a download to reference manager choice is available. In addition, the command cb2bib --bibedit ref.bib directly launches the BibTeX editor for file browsing and editing. This release adds the command line option --conf [full_path]cb2bib.conf to specifically set a file where all internal settings are being retrieved and stored. This has two interesting applications. On one hand, it easily permits switching from several sets of extraction rules, since the files abbreviations.txt, regexps.txt, and netqinf.txt are all stored in the cb2Bib's settings. And, on the other hand, it allows installing the program on a USB flash drive, and cleanly running it on any (e. g., library) computer. Settings can be stored and kept on the external device, and therefore, no data will be written on the registry or settings directory of the host computer. So far, however, this feature should be regarded as experimental. The Qt library to which cb2Bib is linked does read/write access to system settings in a few places (concretely, in file and color dialogs). On Unix and Mac OS systems this access can be modified by setting the environment variable DAG_CONFIG_HOME. No such workaround is presently available in Windows. See \ref commandline for a detailed syntax description.

 

*/ /** \page relnotes Release Notes \section relnotes081 Release Note cb2Bib 0.8.1 Several changes in this release affect installation and deployment. First, the cb2Bib internals for settings management has been reorganized. Version 0.8.1 will not read previous settings, as user colors, file locations, etc. On Unix, settings are stored at ~/.config/MOLspaces/cb2Bib.conf. This file can be removed, or renamed. On Windows, it is recommended to uninstall previous versions before upgrading. Second, cb2Bib tags are not shown by default. Instead, it is shown plain, raw clipboard data, as it is easier to identify with the original source. To write a regular expression, right click, on the menu, check 'View Tagged Clipboard Data', and perform the extraction from this view. And finally, cb2Bib adds the tag <> for network queries. It takes a simplified version of the clipboard contents and sends it to, e.g. Google Scholar. From there, one can easily import BibTeX references related to that contents. Therefore one should unchecked in most cases the 'Perform Network Queries after automatic reference extractions' box.

 

*/ /** \page relnotes Release Notes \section relnotes072 Release Note cb2Bib 0.7.2 cb2Bib reads the clipboard contents, processes it, and places it to the main cb2Bib's panel. If clipboard contents can be recognized as a reference, it writes the corresponding BibTeX entry. If not, the user can interact from the cb2Bib panel and complete or correct the reference. Additionally, this process permits to write down a regular expression matching the reference's pattern. To ease pattern writing, cb2Bib preprocesses the raw input data. This can consider format conversion by external tools and general substitutions, in addition to including some special tags. The resulting preprocessed data is usually less readable. A particularly illustrating case is when input data comes from a PDF article. cb2Bib now optionally presents input data, as raw, unprocessed data. This preserves the block text format of the source, and thus identifying the relevant bibliographic fields by visual inspection is more straightforward. In this raw mode view panel, interaction works in a similar manner. Except that, no conversions or substitutions are seen there, and that no regular expression tags are written.

 

*/ /** \page relnotes Release Notes \section relnotes070 Release Note cb2Bib 0.7.0 This release moves forward cb2Bib base requirement to Qt 4.2.0. Compilation errors related to rehighlight() library calls, kindly reported by Bongard, Seemann, and Luisser, should not appear anymore. File/URL opening is carried now by this library, in a desktop integrated manner. Additionally, Gnome users will enjoy better integration, as Cleanlooks widget style is available. All known regressions in 0.6.9x series have been fixed. Also, a few minor improvements have been included. In particular, file selection dialogs display navigation history, and BibTeX output file can be conveniently selected from the list of '*.bib' files at the current directory. Such a feature will be specially useful to users that sort references in thematic files located at a given directory.

 

*/ /** \page relnotes Release Notes \section relnotes0691 Release Note cb2Bib 0.6.91 This release fixes a regression in the cb2Bib network capabilities. Network, and hence querying was erratic, both for the internal HTTP routines and for external clients. In addition to this fix, the netqinf.txt has been updated. PubMed is working again. Queries are also extended to include DOI's. A possible applicability will be for indexing a set of PDF articles with PDFImport. If the article contains its DOI number, and 'Perform Network Queries after automatic reference extractions' is checked, chances are that automatic extractions will work smooth.

 

*/ /** \page relnotes Release Notes \section relnotes0690 Release Note cb2Bib 0.6.90 cb2Bib has been ported from Qt3 to Qt4, a migration in its underlying system library. Qt experienced many changes and improvements in this major release upgrade. Relevant to cb2Bib, these changes will provide a better file management, word completion, faster searches, and better desktop integration. Upgrading to Qt4 it is not a "plug and recompile" game. Thorough refactoring and rewriting was required. The resulting cb2Bib code is cleaner and more suitable to further development. As one might expect, major upgrades introduce new bugs that must be fixed. The cb2Bib 0.6.90 is actually a preview version. It has approximately the same functionality than its predecessor. So, no additions were considered at this point. Its use, bug reporting, and feedback are encouraged. This will help to get sooner a stable cb2Bib 0.7. To compile it, type ./configure as usual. The configure script calls the qmake tool to generate an appropriate Makefile. To make sure the right, Qt4 qmake is invocated, you can setup QTDIR environment variable prior to ./configure. The configure's call statement will then be '$QTDIR/bin/qmake'. E. g., type 'setenv QTDIR /usr' if qmake happens to be at the directory/usr/bin.

 

*/ /** \page relnotes Release Notes \section relnotes060 Release Note cb2Bib 0.6.0 cb2Bib uses the internal tags <> and <> to ease the creation of regular expressions for reference extraction. New line and tabular codes from the input stream are substituted by these numbered tags. Numbering new lines and tabulars gives an extra safety when writing down a regular expression. E. g., suppose field title is 'anything' between '<> and <>'. We can then easily write 'anything' as '.+' without the risk of overextending the caption to several '\\n' codes. On the other hand, one still can use <> if not interested in a specific numbering. All these internal tags are later removed, once cb2Bib postprocesses the entry fields. The cb2Bib identified so far new lines by checking for '\\n' codes. I was unaware that this was a platform dependent, as well as a not completely accurate way of detecting new lines. McKay Euan reported that <> tags were not appearing as expected in the MacOSX version. I later learn that MacOSX uses '\\r' codes, and that Windows uses '\\r\\n', instead of '\\n' for new line encoding. This release addresses this issue. It is supposed now that the cb2Bib regular expressions will be more transferable among the different platforms. Extraction from plain text sources is expected to be completely platform independent. Extraction from web pages will still remain browser dependent. In fact, each browser adds its peculiar interpretation of a given HTML source. For example, in Wiley webpages we see the sectioning header 'Abstract' in its source and in several browsers, but we see, and get, 'ABSTRACT' if using Konqueror. What we pay for this more uniform approach is, however, a break in compatibility with previous versions of cb2Bib. Unix/Linux users should not expect many differences, though. Only one from the nine regular expressions in the examples needed to be modified, and the two contributed regular expressions work perfectly without any change. Windows users will not see a duplication of <> tags. To update previous expressions it should be enough just shifting the <> numbering. And, of course, any working regular expression that does not uses <> tags will still be working in this new version. Finally, just to mention that I do not have a MacOSX to test any of the cb2Bib releases in this particular platform. I am therefore assuming that these changes will fix the problem at hand. If otherwise, please, let me know. Also, let me know if release 0.6.0 'break' your own expressions. I consider this release a sort of experimental or beta version, and the previous version 0.5.3, will still be available during this testing period.

 

*/ /** \page relnotes Release Notes \section relnotes050 Release Note cb2Bib 0.5.0 Two issues had appeared regarding cb2Bib installation and deployment on MacOSX platforms. First, if you encounter a 'nothing to install'-error during installation on MacOSX 10.4.x using the cb2Bib binary installer available at naranja.umh.es/~atg/, please delete the cb2bib-receipts from /Library/Receipts and then rerun the installer. See also M. Bongard's clarifying note 'MACOSX 10.4.X "NOTHING TO INSTALL"-ERROR' for details. Second, and also extensible to other cb2Bib platform versions, if PDFImport issues the error message 'Failed to call some_format_to_text' tool, make sure such a tool is installed and available. Go to Configure->PDFImport, click at the 'Select External Convert Tool' button, and navigate to set its full path. Since version 0.5.0 the default full path for the MacOSX is already set, and pointing to /usr/local/bin/pdftotext.

 

*/ /** \page relnotes Release Notes \section relnotes041 Release Note cb2Bib 0.4.1 Qt/KDE applications emit notifications whenever they change the clipboard contents. cb2Bib uses these notifications to automatically start its 'clipboard to BibTeX' processing. Other applications, however, does not notify about them. Since version 0.2.1, see \ref relnotes021, cb2Bib started checking the clipboard periodically. This checking was later disabled as a default, needing a few lines of code to be uncomented to activate it. Without such a checking, cb2Bib appears unresponsive when selecting/copying from e.g., acroread or Mozilla. This release includes the class clipboardpoll written by L. Lunak for the KDE's Klipper. Checking is performed in a very optimized way. This checking is enabled by default. If you experience problems with this feature, or if the required X11 headers aren't available, consider disabling it by typing ./configure --disable-cbpoll prior to compilation. This will disable checking completely. If the naive, old checking is preferred, uncomment the four usual lines, ./configure --disable-cbpoll, and compile.

 

*/ /** \page relnotes Release Notes \section relnotes035 Release Note cb2Bib 0.3.5 Releases 0.3.3 and 0.3.4 brought querying functionality to cb2Bib. In essence, cb2Bib was rearranged to accommodate copying and opening of network files. Queries were then implemented as user customizable HTML posts to journal databases. In addition, these arrangements permitted defining convenience, dynamic bookmarks that were placed at the cb2Bib's 'About' panel. cb2Bib contains three viewing panels: 'About', 'Clipboard' and 'View BibTeX', being the 'Clipboard' panel the main working area. To keep cb2Bib simple, only two buttons, 'About' and 'View BibTeX', are set to navigate through the panels. The 'About' and 'View BibTeX' buttons are toggle buttons for momentarily displaying their corresponding panels. Guidance was so far provided by enabling/disabling the buttons. After the bookmark introduction, the 'About' panel has greatly increased its usefullness. Button functionality has been slightly redesigned now to avoid as many keystrokes and mouse clicks as possible. The buttons remain switchable, but they no longer disable the other buttons. User is guided by icon changes instead. Hopefully these changes will not be confusing or counterintuitive. Bookmarks and querying functionality are customizable through the netqinf.txt file, which is editable by pressing the Alt+B keys. Supported queries are of the form 'Journal-Volume-First Page'. cb2Bib parses netqinf.txt each time a query is performed. It looks for journal=Full_Name|[code] to obtain the required information for a specific journal. Empty, 'journal=' entries have a meaning of 'any journal'. New in this release, cb2Bib will test all possible queries for a given journal instead of giving up at the first No article found message. The query process stops at the first successfull hit or, otherwise, once netqinf.txt is parsed completely (in an equivalent way as the automatic pattern recognition works). This permits querying multiple -and incomplete- journal databases. Users should order the netqinf.txt file in a way it is more convenient. E.g., put PubMed in front of JACS if desired an automatic extraction. Or JACS in front of PubMed and extract from the journal web page, if author accented characters are wanted. So far, this querying functionality is still tagged as experimental. Either the querying itself or its syntax seem quite successful. However, downloading of PDF files, on windows OS + T1 network, was found to freeze once progress reaches the 30-50%. Any feedback on this issue will be greatly appreciated. Also, information on kfmclient equivalent tools for non KDE desktops would be worth to be included in the cb2Bib documentation.

 

*/ /** \page relnotes Release Notes \section relnotes030 Release Note cb2Bib 0.3.0 cb2Bib considers the whole set of authors as an author-string pattern. This string is later postprocessed, without requirements on the actual number of authors it may contain, or on how the names are written. Once considered author-string patterns, the extraction of bibliographic references by means of regular expressions becomes relatively simple. There are situations, however, where several author-strings are required. The following box shows one of these cases. Authors are grouped according to their affiliations. Selecting from 'F. N. First' to 'F. N. Fifth' would include 'First Affiliation' within the author string. Cleaning up whatever wording 'First Affiliation' may contain is a rather ill-posed problem. Instead, cb2Bib includes an Add Authors option. The way of operation is then to select 'F. N. First, F. N. Second, F. N. Third' and chose Authors and right after, select 'F. N. Fourth and F. N. Fifth' and chose Add Authors. \verbatim Journal Name, 10, 1100-1105, 2004 AN EXAMPLE WITH MULTIPLE AUTHOR SETS F. N. First, F. N. Second, F. N. Third First Affiliation F. N. Fourth and F. N. Fifth Second Affiliation Abstract: Select from "Journal Name ..." to "... second author set.". The 'F. N. First, F. N. Second, F. N. Third' author string is automatically processed as one author set, while 'F. N. Fourth and F. N. Fifth' is processed as another, second author set. \endverbatim At this point in the manual extraction, the user was faced with a red <> tag in the cb2Bib clipboard panel. The <> tag was intended to warn the user about the fact that cb2Bib would not be able to consider the resulting extraction pattern as a valid, general regular expression. Usual regular expressions are built up from an a priori known level of nesting. In these cases, however, the level of nesting is variable. It depends on the number of different affiliations occurring in a particular reference. So far the <> tag has become a true FAQ about cb2Bib and a source of many confusions. There is no real need, however, for such an user warning. The <> has therefore been removed and cb2Bib has taken an step further, to its 0.3.0 version. The cb2Bib 0.3.0 manual extraction works as usual. By clicking Authors the Authors edit line is reseted and selection contents moved there. Alternatively, if Add Authors is clicked, selection contents is added to the author field. On this version, however, both operations are tagged as <> (singular form, as it is the BibTeX keyword for Authors). The generated extraction pattern can now contain any number of <> fields. In automatic mode, cb2Bib now adds all author captions to Authors. In this way, cb2Bib can treat interlaced author-affiliation cases. Obviously, users needing such extractions will have to write particular regular expressions for cases with one set of authors, for two sets, and so on. Eventhough it is not rare a work having a hundred of authors, it would be quite umprobable that they were working on so many different institutions. Therefore, few regular expressions should actually be required in practice. Although not elegant, this breaks what was a cb2Bib limitation and broadens its use when extracting from PDF sources. Remember here to sort these regular expressions in decreasing order, since at present, cb2Bib stops at the first hit. Also, consider Any Pattern to get ride of the actual affiliation contents, as you might not want to extract authors addresses.

 

*/ /** \page relnotes Release Notes \section relnotes027 Release Note cb2Bib 0.2.7 The cb2Bib 0.2.7 release introduces multiple retrieving from PDF files. PDF documents are becoming more and more widely used, not only to transfer and printing articles, but also are substituting the personal paper files and classifiers for the electronic equivalents. cb2Bib is intended to help updating personal databases of papers. It is a tool focused on what is left behind in database retrieving. Cases such as email alerts, or inter colleague references and PDF sharing are example situations. Though in an electronic format, sources are not standardized or not globally used as to permit using habitual import filters in reference managers. cb2Bib is designed to consider a direct user intervention, either by creating its own useful filters or by a simple copy-paste assistance when handtyping. Hopefully someday cb2Bib will be able to take that old directory, with perhaps a few hundreds of papers, to automatically index the references and rename the files by author, in a consistent manner. The required mechanism is already there, in this version. But I guess that this new feature will manifest some present limitations in cb2Bib. For instance, most printed and PDF papers interlace author names and affiliations. cb2Bib doesn't have the means to automatically discern an author name from a department or street name. So far one needs to manually use the 'Add to Authors' feature to deal with these situations. Also, the managing of regular expressions needs developing, specially thinking in the spread variety of design patterns in publications. In summary, this current version is already useful in classifying and extracting the reference of that couple of papers that someone send right before submitting a work. A complete unsupervised extraction is still far away, however.

 

*/ /** \page relnotes Release Notes \section relnotes021 Release Note cb2Bib 0.2.1 The cb2Bib mechanism 'select-and-catch' failed in some cases. Acrobat and Mozilla selections were not always notified to cb2Bib. Indeed, this 'window manager - application' connection seems to be broken on a KDE 3.3.0 Qt 3.3.3 system. The cb2Bib 0.2.1 continues to listen to system clipboard change notifications, whenever they are received and whenever cb2Bib is on connected mode. Additionally, the cb2Bib 0.2.1 periodically checks for changes in the system clipboard. Checks are performed every second, approximately. This permits cb2Bib to work as usual, although one could experience 1-2 seconds delays in systems where the automatic notification is broken. If the 'select-and-catch' functionality appears 'sticky', possibly happening while using non KDE applications from where text is selected, check the source file c2bclipboard.cpp, look for 'Setting timer', and set variable interval to 1000. This is the interval of time in ms that cb2Bib will use to check for clipboard changes.

 

*/ cb2Bib::cb2Bib(QWidget* parentw) : QMainWindow(parentw), _connected(false), _is_check_repeated_done(false), _is_check_ssl_done(false), _modified(false), _tagged_view_mode(false) { _settingsP = c2bSettingsP; ui.setupUi(this); connect(ui.id, SIGNAL(textChanged(QString)), this, SLOT(setWindowTitle())); connect(ui.doi, SIGNAL(textChanged(QString)), this, SLOT(setWindowTitle())); connect(ui.eprint, SIGNAL(textChanged(QString)), this, SLOT(setWindowTitle())); // Creating cb2Bib global resources c2b* c2b_resources = new c2b(this, this); connect(c2b_resources, SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); connect(c2b_resources, SIGNAL(searchInFiles(QString,QString)), this, SLOT(doSearchInFiles(QString,QString))); // Actions and shortcuts c2bUtils::addSeparator(this); addAction(ui.checkRepeatedAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.checkRepeatedAction); c2bUtils::addSeparator(this); addAction(ui.clearFieldsAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.clearFieldsAction); addAction(ui.guessFieldsAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.guessFieldsAction); addAction(ui.startEngineAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.startEngineAction); c2bUtils::addSeparator(this); addAction(ui.preparseClipboardAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.preparseClipboardAction); addAction(ui.postprocessBibTeXAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.postprocessBibTeXAction); c2bUtils::addSeparator(this); addAction(ui.editBookmarksAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.editBookmarksAction); addAction(ui.editAbbreviationsAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.editAbbreviationsAction); addAction(ui.editRegExpsAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.editRegExpsAction); c2bUtils::addSeparator(this); addAction(ui.openAnnoteAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.openAnnoteAction); c2bUtils::addSeparator(this); addAction(ui.insertRegExpAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.insertRegExpAction); addAction(ui.viewTaggedClipEditAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.viewTaggedClipEditAction); setAcceptDrops(true); c2bUtils::addSeparator(ui.file); ui.file->addAction(ui.selectFileAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.selectFileAction); ui.file->addAction(ui.openFileDocumentAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.openFileDocumentAction); ui.openFileDocumentAction->setEnabled(false); QShortcut* sc(new QShortcut(this)); _settingsP->setKeysequence("Shortcuts/cb2Bib/Delete Temporary BibTeX File", sc); connect(sc, SIGNAL(activated()), this, SLOT(deleteTmpBib())); sc = new QShortcut(this); _settingsP->setKeysequence("Shortcuts/cb2Bib/Write Metadata to Document", sc); connect(sc, SIGNAL(activated()), this, SLOT(addMetadata())); sc = new QShortcut(this); _settingsP->setKeysequence("Shortcuts/cb2Bib/Toggle Reference Tabs", sc); connect(sc, SIGNAL(activated()), this, SLOT(toggleReferenceTabs())); sc = new QShortcut(QKeySequence(Qt::Key_F2), this); // Made consistent with c2bCiter and c2bEditor connect(sc, SIGNAL(activated()), this, SLOT(hide())); ClipEdit = new c2bClipEdit(c2bClipEdit::Editor, this); ClipEdit->setObjectName("ClipEdit"); ClipEdit->addActions(actions()); ui.stackedWidget->addWidget(ClipEdit); AboutBrowser = new c2bTextBrowser(this); AboutBrowser->setObjectName("AboutBrowser"); AboutBrowser->addActions(actions()); ui.stackedWidget->addWidget(AboutBrowser); BibBrowser = new c2bClipEdit(c2bClipEdit::Browser, this); BibBrowser->setObjectName("BibBrowser"); BibBrowser->addActions(actions()); ui.stackedWidget->addWidget(BibBrowser); connect(AboutBrowser, SIGNAL(anchorClicked(QUrl)), this, SLOT(linkClicked(QUrl))); connect(AboutBrowser, SIGNAL(highlighted(QUrl)), this, SLOT(showLink(QUrl))); // Connect Actions connect(ui.checkRepeatedAction, SIGNAL(triggered()), this, SLOT(checkRepeated())); connect(ui.clearFieldsAction, SIGNAL(triggered()), this, SLOT(c2bInit())); connect(ui.editAbbreviationsAction, SIGNAL(triggered()), this, SLOT(abbreviationsEditor())); connect(ui.editBookmarksAction, SIGNAL(triggered()), this, SLOT(bookmarksEditor())); connect(ui.editRegExpsAction, SIGNAL(triggered()), this, SLOT(regExpsEditor())); connect(ui.guessFieldsAction, SIGNAL(triggered()), this, SLOT(guessFields())); connect(ui.insertRegExpAction, SIGNAL(triggered()), this, SLOT(insertRegExp())); connect(ui.openAnnoteAction, SIGNAL(triggered()), this, SLOT(openAnnote())); connect(ui.openFileDocumentAction, SIGNAL(triggered()), this, SLOT(openFileDocument())); connect(ui.postprocessBibTeXAction, SIGNAL(triggered()), this, SLOT(postprocessBibTeX())); connect(ui.preparseClipboardAction, SIGNAL(triggered()), this, SLOT(preparseClipboard())); connect(ui.selectFileAction, SIGNAL(triggered()), this, SLOT(selectFile())); connect(ui.startEngineAction, SIGNAL(triggered()), this, SLOT(restartEngine())); connect(ui.viewTaggedClipEditAction, SIGNAL(triggered(bool)), this, SLOT(setTaggedClipEditMode(bool))); setBibMenu(); _pdfImportP = 0; _searchInFilesP = 0; setTaggedClipEditMode(false); // Set checkRepeated ui.checkRepeatedAction->setVisible(false); connect(ui.author, SIGNAL(textChanged(QString)), this, SLOT(updateCheckRepeatedAction())); connect(ui.booktitle, SIGNAL(textChanged(QString)), this, SLOT(updateCheckRepeatedAction())); connect(ui.editor, SIGNAL(textChanged(QString)), this, SLOT(updateCheckRepeatedAction())); connect(ui.id, SIGNAL(textChanged(QString)), this, SLOT(updateCheckRepeatedAction())); connect(ui.title, SIGNAL(textChanged(QString)), this, SLOT(updateCheckRepeatedAction())); // cb2Bib Settings loadSettings(); connect(_settingsP, SIGNAL(newSettings()), this, SLOT(loadSettings())); resize(_settingsP->value("cb2Bib/size", size()).toSize()); ui.bibtexfile->completer()->setCompletionMode(QCompleter::PopupCompletion); updateBibfile(_settingsP->fileName("cb2Bib/BibTeXFile")); // Setting Bibliographic Parser _bpP = c2b::bibParser(); setWidgetMapping(); ui.AddBibB->setEnabled(_modified); // Setting cb2bib network queries _netQP = new c2bNetworkQuery(_bpP, c2b::net(), this); connect(_netQP, SIGNAL(statusMessage(QString)), c2b_resources, SIGNAL(statusMessage(QString))); connect(_netQP, SIGNAL(queryEnded(bool,QString,QString)), this, SLOT(netQueryEnded(bool,QString,QString))); // Set citer if (_settingsP->cl_citer) { _citerP = new c2bCiterWidget; _citerP->setTrayIcon(); _citerP->load(); connect(_citerP, SIGNAL(openAnnote()), this, SLOT(openAnnote())); connect(_citerP, SIGNAL(openFile(QString)), this, SLOT(bibEditor(QString))); } else _citerP = 0; // Connecting cb2Bib clipboard and start c2bClipboard* cbP = c2b::clipboard(); connect(cbP, SIGNAL(cbDataChanged(QString)), this, SLOT(dataChanged(QString))); on_ConnectB_clicked(); // Set button and update _connected dataChanged(QString()); if (_settingsP->cl_bibedit) initAsBibTeXEditor(); } cb2Bib::~cb2Bib() { delete _citerP; delete _searchInFilesP; } /**************************************************************************** GUI FUNCTIONALITY *****************************************************************************/ void cb2Bib::show() { if (_settingsP->cl_citer && _citerP) _citerP->toggleVisible(); else if (!_settingsP->cl_bibedit) QMainWindow::show(); } void cb2Bib::on_ViewAboutB_clicked() { if (ui.stackedWidget->currentWidget() == AboutBrowser) { ui.stackedWidget->setCurrentWidget(ClipEdit); ClipEdit->setFocus(); } else { const QColor linkColor(palette().buttonText().color()); const QString sheet(QString::fromLatin1("a { text-decoration: underline; color: %1 }").arg(linkColor.name())); AboutBrowser->document()->setDefaultStyleSheet(sheet); const QString AboutS( tr("

cb2Bib %1

" "

" "Bibliographic Reference Extracting and Managing Tool
" "

" "

" "" "cb2Bib Help and User's Guide


" "

Additional Functionality:

" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "
KeysDescription
" + _settingsP->ksname("Shortcuts/cb2Bib/Check Repeated") + "Check repeated
" + _settingsP->ksname("Shortcuts/cb2Bib/Delete Temporary BibTeX File") + "Delete temporary BibTeX file
" + _settingsP->ksname("Shortcuts/cb2Bib/Edit Bookmarks") + "Edit bookmarks
" + _settingsP->ksname("Shortcuts/cb2Bib/Edit Journal Abbreviations") + "Edit journal abbreviations
" + _settingsP->ksname("Shortcuts/cb2Bib/Edit Regular Expressions") + "Edit regular expressions
" + _settingsP->ksname("Shortcuts/cb2Bib/Insert Regular Expression") + "Insert regular expression
" + _settingsP->ksname("Shortcuts/cb2Bib/Open Document") + "Open document
" + _settingsP->ksname("Shortcuts/cb2Bib/Postprocess BibTeX") + "Postprocess BibTeX
" + _settingsP->ksname("Shortcuts/cb2Bib/Preparse Clipboard") + "Preparse clipboard
" + _settingsP->ksname("Shortcuts/cb2Bib/Restart Recognition") + "Restart recognition
" + _settingsP->ksname("Shortcuts/cb2Bib/Select Document File") + "Select document file
" + _settingsP->ksname("Shortcuts/cb2Bib/Annote Editor") + "Open cb2Bib Annote
" + _settingsP->ksname("Shortcuts/cb2Bib/Toggle Reference Tabs") + "Toggle reference tabs
" + _settingsP->ksname("Shortcuts/cb2Bib/Write Metadata to Document") + "Write metadata to document
EscQuit cb2Bib popup menu
Right ClickShow cb2Bib main panel popup menu" "
" "
%2
" "

Copyright (C) 2004-2025 by Pere Constans
" "" "https://www.molspaces.com/cb2bib/

 " "

cb2Bib is licensed under the terms of the " "" "GNU General Public License version 3" "

 ") .arg(C2B_VERSION, c2b::netqinf()->bookmarksToHtml())); const int scrollPosition(AboutBrowser->verticalScrollBar()->value()); AboutBrowser->setHtml(AboutS); AboutBrowser->verticalScrollBar()->setValue(scrollPosition); ui.stackedWidget->setCurrentWidget(AboutBrowser); AboutBrowser->setFocus(); } updateViewButtons(); } void cb2Bib::on_ConfigureB_clicked() { c2b::configure(); } void cb2Bib::on_SearchInFilesB_clicked() { doSearchInFiles(); } void cb2Bib::on_PdfImportB_clicked() { if (!_pdfImportP) { _pdfImportP = new c2bPdfImport; _pdfImportP->setAttribute(Qt::WA_DeleteOnClose); connect(this, SIGNAL(addedBibToFile(QString)), _pdfImportP, SLOT(processNext())); connect(this, SIGNAL(endedProcessing(bool)), _pdfImportP, SLOT(referenceExtacted(bool))); connect(_pdfImportP, SIGNAL(textProcessed(QString)), this, SLOT(forceDataChange(QString))); connect(_pdfImportP, SIGNAL(fileProcessed(QString)), this, SLOT(fileDropped(QString))); connect(_pdfImportP, SIGNAL(saveReferenceRequest()), this, SLOT(on_AddBibB_clicked())); connect(_pdfImportP, SIGNAL(setClipboardDisabled(bool)), ui.ConnectB, SLOT(setDisabled(bool))); showMessage(tr("PDF Import launched.")); } _pdfImportP->show(); } void cb2Bib::on_ExitB_clicked() { c2b::instance()->exitRequested(); } void cb2Bib::on_ConnectB_clicked() { if (_connected) { ui.ConnectB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_DISCONNECT_B)); ui.ConnectB->setStatusTip(buttonStatusTip(tr("Connect clipboard"), ui.ConnectB->shortcut())); _connected = false; } else { ui.ConnectB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_CONNECT_B)); ui.ConnectB->setStatusTip(buttonStatusTip(tr("Disconnect clipboard"), ui.ConnectB->shortcut())); _connected = true; } } void cb2Bib::on_MakeNetworkQueryB_clicked() { if (!_is_check_ssl_done) checkNetQuerySsl(); makeNetQuery(); } void cb2Bib::on_ViewBibB_clicked() { if (ui.stackedWidget->currentWidget() == BibBrowser) { ui.stackedWidget->setCurrentWidget(ClipEdit); ClipEdit->setFocus(); } else { BibBrowser->updatePlainText(_bpP->toBibTeX()); ui.stackedWidget->setCurrentWidget(BibBrowser); BibBrowser->setFocus(); } updateViewButtons(); } void cb2Bib::on_AddBibB_clicked() { // Prepare Save Reference to file ui.AddBibB->setEnabled(false); if (!_is_check_repeated_done && _settingsP->value("cb2Bib/CheckRepeatedOnSave").toBool()) { _is_check_repeated_done = true; if (isReferenceRepeated()) { ui.AddBibB->setEnabled(_modified); return; } } QFile bibtexfile(ui.bibtexfile->currentText()); bool is_writable; if (bibtexfile.exists()) is_writable = bibtexfile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append); else is_writable = bibtexfile.open(QIODevice::WriteOnly | QIODevice::Text); if (!is_writable) { QMessageBox::information(this, tr("Information - cb2Bib"), tr("Unable to open file %1 for writing.\nError: '%2'.") .arg(ui.bibtexfile->currentText(), bibtexfile.errorString()), QMessageBox::Ok); ui.AddBibB->setEnabled(_modified); return; } if (_dropped_document_file.isEmpty() || ui.file->text().isEmpty() || !_settingsP->value("cb2Bib/MovePdf").toBool()) { _target_document_file.clear(); addToFile(true); } else { _target_document_file = c2bUtils::documentAbsoluteName( _settingsP->value("cb2Bib/RelativePdfDirectory").toBool(), ui.bibtexfile->currentText(), _settingsP->fileName("cb2Bib/PdfDirectory"), ui.file->text()); const QString doc_dir_name(QFileInfo(_target_document_file).absolutePath()); QDir doc_dir(doc_dir_name); if (!doc_dir.exists()) if (!doc_dir.mkpath(doc_dir_name)) { QMessageBox::information(this, tr("Information - cb2Bib"), tr("Unable to create directory %1.").arg(doc_dir_name), QMessageBox::Ok); ui.AddBibB->setEnabled(_modified); return; } const network::Action CopyMovePdf(network::actionType(_settingsP->value("cb2Bib/CopyMovePdf").toString())); c2b::net()->getFile(_dropped_document_file, _target_document_file, CopyMovePdf, this, SLOT(addToFile(bool))); } } void cb2Bib::on_EditBibTeXB_clicked() { bibEditor(ui.bibtexfile->currentText()); } void cb2Bib::on_BibTeXDir_clicked() { const QString fn(c2bFileDialog::getFilename(this, "Select a BibTeX filename", ui.bibtexfile->currentText(), "BibTeX (*.bib);;All (*)")); if (!fn.isEmpty()) updateBibfile(fn); } void cb2Bib::loadSettings() { ClipEdit->setFont(_settingsP->c2bMonoFont); BibBrowser->setFont(_settingsP->c2bMonoFont); AboutBrowser->setFont(_settingsP->c2bMonoFont); ui.AddBibB->setShortcut(QKeySequence::Save); ui.EditBibTeXB->setShortcut(QKeySequence::Open); ui.SearchInFilesB->setShortcut(QKeySequence::Find); ui.ExitB->setShortcut(QKeySequence::Quit); ui.BibTeXDir->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Select BibTeX File")); ui.ConfigureB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button Configure")); ui.ConnectB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button Toggle Connection")); ui.MakeNetworkQueryB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button Network Query")); ui.PdfImportB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button Start PDFImport")); ui.ViewAboutB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button About and Bookmarks")); ui.ViewBibB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button View BibTeX")); ui.AddBibB->setStatusTip(buttonStatusTip(tr("Save reference to BibTeX file"), ui.AddBibB->shortcut())); ui.BibTeXDir->setStatusTip(buttonStatusTip(tr("Select BibTeX file"), ui.BibTeXDir->shortcut())); ui.ConfigureB->setStatusTip(buttonStatusTip(tr("Configure cb2Bib"), ui.ConfigureB->shortcut())); ui.ConnectB->setStatusTip( buttonStatusTip(_connected ? tr("Disconnect clipboard") : tr("Connect clipboard"), ui.ConnectB->shortcut())); ui.EditBibTeXB->setStatusTip(buttonStatusTip(tr("Open BibTeX file"), ui.EditBibTeXB->shortcut())); ui.ExitB->setStatusTip(buttonStatusTip(tr("Close all windows and exit"), ui.ExitB->shortcut())); ui.MakeNetworkQueryB->setStatusTip( buttonStatusTip(tr("Network query for current reference"), ui.MakeNetworkQueryB->shortcut())); ui.PdfImportB->setStatusTip( buttonStatusTip(tr("Import references from a set of PDF files"), ui.PdfImportB->shortcut())); ui.SearchInFilesB->setStatusTip( buttonStatusTip(tr("Search BibTeX file for references"), ui.SearchInFilesB->shortcut())); updateViewButtons(); } QString cb2Bib::buttonStatusTip(const QString& ms, const QKeySequence& ks) const { if (ks.isEmpty()) return ms; else return ms + QLatin1String(" - ") + ks.toString(QKeySequence::NativeText); } void cb2Bib::updateViewButtons() { QWidget* viewing = ui.stackedWidget->currentWidget(); if (viewing == BibBrowser) { ui.ViewBibB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_VIEWC2B_B)); ui.ViewAboutB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_ABOUT_B)); ui.ViewBibB->setStatusTip(buttonStatusTip(tr("View cb2Bib clipboard"), ui.ViewBibB->shortcut())); ui.ViewAboutB->setStatusTip( buttonStatusTip(tr("About cb2bib and cb2bib bookmarks"), ui.ViewAboutB->shortcut())); } else if (viewing == AboutBrowser) { ui.ViewBibB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_VIEWBIB_B)); ui.ViewAboutB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_ABOUT_B_BACK)); ui.ViewBibB->setStatusTip(buttonStatusTip(tr("View BibTeX for current reference"), ui.ViewBibB->shortcut())); ui.ViewAboutB->setStatusTip(buttonStatusTip(tr("Back to cb2Bib clipboard"), ui.ViewAboutB->shortcut())); } else { ui.ViewBibB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_VIEWBIB_B)); ui.ViewAboutB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_ABOUT_B)); ui.ViewBibB->setStatusTip(buttonStatusTip(tr("View BibTeX for current reference"), ui.ViewBibB->shortcut())); ui.ViewAboutB->setStatusTip( buttonStatusTip(tr("About cb2bib and cb2bib bookmarks"), ui.ViewAboutB->shortcut())); } } void cb2Bib::toggleReferenceTabs() { if (ui.tabWidget->currentIndex() == 0) ui.tabWidget->setCurrentIndex(1); else ui.tabWidget->setCurrentIndex(0); } void cb2Bib::updateBibfile(const QString& fn) { ui.bibtexfile->clear(); QFileInfo fi(fn); const QStringList flist(fi.isDir() ? c2bUtils::filesInDir(fn, QStringList() << "*.bib") : c2bUtils::filesInDir(fi.absolutePath(), QStringList() << "*.bib")); for (int i = 0; i < flist.count(); ++i) ui.bibtexfile->addItem(flist.at(i)); const int index(ui.bibtexfile->findText(fn)); if (index == -1) ui.bibtexfile->setEditText(fn); else ui.bibtexfile->setCurrentIndex(index); } void cb2Bib::showLink(const QUrl& link) { statusBar()->showMessage(c2b::encodeLink(link.toString()), C2B_MESSAGE_TIME); } void cb2Bib::showMessage(const QString& ms) { statusBar()->showMessage(ms, C2B_MESSAGE_TIME); } void cb2Bib::dragEnterEvent(QDragEnterEvent* qevent) { if (qevent->mimeData()->hasUrls()) qevent->acceptProposedAction(); } void cb2Bib::dropEvent(QDropEvent* qevent) { QList fns = qevent->mimeData()->urls(); if (fns.count() > 0) { if (fns.at(0).scheme() == "file") { c2bUtils::setWidgetOnTop(this); fileDroppedByUser(fns.at(0).toLocalFile().trimmed()); } else fileDroppedByUser(fns.at(0).toString().trimmed()); } qevent->acceptProposedAction(); } void cb2Bib::fileDroppedByUser(const QString& fn) { if (fn.isEmpty()) return; bool has_bibtex(false); if (_settingsP->value("cb2Bib/AddMetadata").toBool()) { const QString metadata(c2b::documentMetadata(fn)); if (!metadata.isEmpty()) { QString text(ClipEdit->toPlainText()); if (_settingsP->value("cb2Bib/PreAppendMetadata").toString() == "prepend") text = metadata + text; else text = text + '\n' + metadata; has_bibtex = _bpP->hasBibTeX(metadata); if (has_bibtex) forceDataChange(text); else ClipEdit->setText(text); } } fileDropped(fn); if (!has_bibtex) showMessage(tr("Scheduled inclusion of file '%1'.").arg(fn)); if (QFileInfo::exists(fn)) _settingsP->setFilename("cb2Bib/LastDroppedFile", fn); } void cb2Bib::fileDropped(const QString& fn) { if (fn.isEmpty()) return; _dropped_document_file = fn.trimmed(); ui.openFileDocumentAction->setEnabled(true); ui.openFileDocumentAction->setText(tr("Open '%1'").arg(_dropped_document_file)); setDocumentFilename(); if (_settingsP->value("cb2Bib/MovePdf").toBool()) ui.file->setStatusTip(tr("From file '%1'.").arg(_dropped_document_file)); } void cb2Bib::closeEvent(QCloseEvent* qevent) { if (_pdfImportP) _pdfImportP->close(); if (_searchInFilesP) _searchInFilesP->close(); _settingsP->setValue("cb2Bib/size", size()); _settingsP->setFilename("cb2Bib/BibTeXFile", QFileInfo(ui.bibtexfile->currentText()).absoluteFilePath()); qevent->accept(); } void cb2Bib::setTaggedClipEditMode(bool tagged) { _tagged_view_mode = tagged; ui.insertRegExpAction->setEnabled(tagged); ClipEdit->setTaggedViewMode(tagged); if (_tagged_view_mode) _bib_menu->setAnyPatternText(tr("Any Pattern")); else _bib_menu->setAnyPatternText(tr("Delete")); ui.stackedWidget->setCurrentWidget(ClipEdit); ClipEdit->setFocus(); updateViewButtons(); } void cb2Bib::doSearchInFiles(const QString& string, const QString& fn) { if (!_searchInFilesP) { _searchInFilesP = new c2bSearchInFiles(ui.bibtexfile->currentText()); connect(ui.bibtexfile, SIGNAL(editTextChanged(QString)), _searchInFilesP, SLOT(setBibTeXFile(QString))); connect(_searchInFilesP, SIGNAL(searchDone(QString,bibSearcher*)), this, SLOT(bibEditor(QString,bibSearcher*))); showMessage(tr("BibTeX Search launched.")); } if (fn.isEmpty()) _searchInFilesP->setBibTeXFile(ui.bibtexfile->currentText()); else _searchInFilesP->setBibTeXFile(fn); _searchInFilesP->setCurrentText(string); _searchInFilesP->show(); } void cb2Bib::setWindowTitle() { QString title; if (!ui.id->text().isEmpty()) title = ui.id->text(); if (!ui.doi->text().isEmpty()) title = title.isEmpty() ? ui.doi->text() : title + " | " + ui.doi->text(); else if (!ui.eprint->text().isEmpty()) title = title.isEmpty() ? ui.eprint->text() : title + " | " + ui.eprint->text(); if (title.isEmpty()) QMainWindow::setWindowTitle(tr("cb2Bib")); else QMainWindow::setWindowTitle(tr("%1 - cb2Bib").arg(title)); } /**************************************************************************** CB2BIB FUNCTIONALITY *****************************************************************************/ void cb2Bib::setWidgetMapping() { _bpP->addField("abstract", ui.abstract); _bpP->addField("address", ui.address); _bpP->addField("annote", ui.annote); _bpP->addField("author", ui.author); _bpP->addField("booktitle", ui.booktitle); _bpP->addField("chapter", ui.chapter); _bpP->addField("doi", ui.doi); _bpP->addField("edition", ui.edition); _bpP->addField("editor", ui.editor); _bpP->addField("eprint", ui.eprint); _bpP->addField("file", ui.file); _bpP->addField("id", ui.id); _bpP->addField("institution", ui.institution); _bpP->addField("isbn", ui.isbn); _bpP->addField("issn", ui.issn); _bpP->addField("journal", ui.journal); _bpP->addField("keywords", ui.keywords); _bpP->addField("month", ui.month); _bpP->addField("note", ui.note); _bpP->addField("number", ui.number); _bpP->addField("organization", ui.organization); _bpP->addField("pages", ui.pages); _bpP->addField("publisher", ui.publisher); _bpP->addField("school", ui.school); _bpP->addField("series", ui.series); _bpP->addField("title", ui.title); _bpP->addField("url", ui.url); _bpP->addField("volume", ui.volume); _bpP->addField("year", ui.year); _bpP->addTypes(ui.typecombo); _bpP->setWidgetMapping(); connect(_bpP, SIGNAL(bibModified(bool)), this, SLOT(bibModified(bool))); } void cb2Bib::setBibMenu() { _bib_menu = new c2bBibMenu(this); connect(_bib_menu->addAuthorAction(), SIGNAL(triggered()), this, SLOT(addAuthors())); connect(_bib_menu->addEditorAction(), SIGNAL(triggered()), this, SLOT(addEditors())); connect(_bib_menu->anyPatternAction(), SIGNAL(triggered()), this, SLOT(anyPattern())); connect(ClipEdit, SIGNAL(userEndedSelection(QPoint)), this, SLOT(readField(QPoint))); } void cb2Bib::readField(const QPoint& position) { QAction* action = _bib_menu->exec(position); if (!action) return; const QString field(action->data().toString()); if (field.isEmpty()) return; _bpP->setField(field, ClipEdit->textCursor().selectedText()); ClipEdit->insertTag("<<" + field + ">>"); } void cb2Bib::addAuthors() { _bpP->setField("addauthors", ClipEdit->textCursor().selectedText(), ui.author->text()); ClipEdit->insertTag("<>"); if (_tagged_view_mode) showMessage(tr("Info: Creating a pattern with multiple author sets.")); } void cb2Bib::addEditors() { _bpP->setField("addeditors", ClipEdit->textCursor().selectedText(), ui.editor->text()); ClipEdit->insertTag("<>"); if (_tagged_view_mode) showMessage(tr("Info: Creating a pattern with multiple ui.editor sets.")); } void cb2Bib::anyPattern() { if (_tagged_view_mode) ClipEdit->insertTag(""); else ClipEdit->insertPlainText(QString()); } void cb2Bib::preparseClipboard() { c2bPreparse(_raw_input_data); } void cb2Bib::restartEngine() { const QString text(ClipEdit->toPlainText()); if (!text.isEmpty()) c2bParse(text); } void cb2Bib::guessFields() { const QString text(ClipEdit->toPlainText()); if (!text.isEmpty()) { const QString keep_dropped_article_file(_dropped_document_file); c2bInit(); _bpP->guessFields(text); fileDropped(keep_dropped_article_file); processingEnded(); } } void cb2Bib::dataChanged(const QString& str) { bool do_allow(isVisible()); if (ui.stackedWidget->currentWidget() == ClipEdit) { if (ClipEdit->textCursor().hasSelection()) do_allow = false; } else if (ui.stackedWidget->currentWidget() == BibBrowser) { if (BibBrowser->textCursor().hasSelection()) do_allow = false; } if (_connected && ui.ConnectB->isEnabled() && do_allow) forceDataChange(str); } void cb2Bib::forceDataChange(const QString& str) { if (!str.isEmpty()) { _raw_input_data = str.trimmed(); if (_settingsP->value("cb2Bib/PreparserAutomatic").toBool()) c2bPreparse(str); else c2bParse(str); } } void cb2Bib::c2bInit() { _dropped_document_file.clear(); ui.openFileDocumentAction->setEnabled(false); ui.openFileDocumentAction->setText(tr("Open File Document")); ui.file->setStatusTip(QString()); disconnect(_bpP, SIGNAL(setDocumentFilename()), this, SLOT(setDocumentFilename())); _bpP->clearCurrentReference(); _is_check_repeated_done = false; _modified = false; ui.AddBibB->setEnabled(_modified); } void cb2Bib::c2bParse(const QString& text) { c2bInit(); QString out_text, out_tagtext; _bpP->parse(text, &out_text, &out_tagtext); ClipEdit->setText(out_text, out_tagtext); processingEnded(); } void cb2Bib::c2bPreparse(const QString& text) { QString out_text; _bpP->preparse(text, &out_text); if (!out_text.isEmpty()) c2bParse(out_text); } void cb2Bib::deleteTmpBib() { QMessageBox msgBox(this); QPushButton* deleteButton = msgBox.addButton(tr("&Delete"), QMessageBox::DestructiveRole); msgBox.setDefaultButton(msgBox.addButton(QMessageBox::Cancel)); msgBox.setWindowTitle(tr("Confirmation - cb2Bib")); msgBox.setText(tr("Delete temporary BibTeX file %1 ?").arg(ui.bibtexfile->currentText())); msgBox.setIcon(QMessageBox::Question); msgBox.exec(); if (msgBox.clickedButton() == deleteButton) { QFile BibFile(ui.bibtexfile->currentText()); if (BibFile.remove()) showMessage(tr("File %1 deleted.").arg(ui.bibtexfile->currentText())); else QMessageBox::warning( this, tr("Warning - cb2Bib"), tr("Unable to delete the file %1.\nError: '%2'").arg(ui.bibtexfile->currentText(), BibFile.errorString()), QMessageBox::Ok); } } void cb2Bib::insertRegExp() { QStringList pattern; // Extracting Reference Type pattern.append(ui.typecombo->currentText()); // Extracting Field Order QString order(ClipEdit->toPlainText()); QRegExp rx("<<(" + _bpP->bibliographicFields().join("|") + ")>>"); QStringList list; int ipos(0); while (ipos >= 0) { ipos = rx.indexIn(order, ipos); if (ipos > -1) { list += rx.cap(1); ipos += rx.matchedLength(); c2bUtils::debug(rx.cap(1)); } } order = list.join(" "); c2bUtils::debug(order); pattern.append(order); // Parsing Regular Expression QString str('^' + QRegExp::escape(ClipEdit->toPlainText()) + '$'); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<
>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String(""), ".+"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(\\d+)"); str.replace(QLatin1String("<>"), "(10\\.[\\d\\.]+/\\S+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(\\S+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(\\d+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "([\\d\\-" + QString(QChar(8211)) + "\\s]+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<>"), "(.+)"); str.replace(QLatin1String("<<url>>"), "(\\S+)"); str.replace(QLatin1String("<<volume>>"), "(\\d+)"); str.replace(QLatin1String("<<year>>"), "(\\d\\d\\d\\d)"); c2bUtils::debug(str); pattern.append(str); // User Editting c2bSaveRegExp Sdiag(pattern, _raw_input_data, this); connect(c2b::clipboard(), SIGNAL(cbDataChanged(QString)), &Sdiag, SLOT(updateInput(QString))); connect(&Sdiag, SIGNAL(savePatternInfo(QString,QString)), this, SLOT(savePattern(QString,QString))); ui.ConnectB->setDisabled(true); if (Sdiag.exec() == QDialog::Rejected) showMessage(tr("Cancelled.")); ui.ConnectB->setDisabled(false); } void cb2Bib::savePattern(const QString& rx, const QString& rxname) { const QString regular_expression_f(_settingsP->fileName("cb2Bib/RegularExpressionFile")); QFile file(regular_expression_f); bool fopen; if (file.exists()) fopen = file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append); else fopen = file.open(QIODevice::WriteOnly | QIODevice::Text); if (fopen) { QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); stream << ("# cb2Bib " + C2B_VERSION + " Pattern:") << _QT_6_endl << rxname << _QT_6_endl << rx << _QT_6_endl << _QT_6_endl; file.close(); showMessage(tr("Pattern '%1' added to %2.").arg(rxname, regular_expression_f)); } else QMessageBox::warning( this, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for writing.\nError: '%2'.").arg(regular_expression_f, file.errorString()), QMessageBox::Ok); c2bUtils::debug("signal:"); c2bUtils::debug(rx); c2bUtils::debug(rxname); } void cb2Bib::setDocumentFilename() { disconnect(_bpP, SIGNAL(setDocumentFilename()), this, SLOT(setDocumentFilename())); if (_dropped_document_file.isEmpty()) return; ui.file->setText(_bpP->documentFilename(_dropped_document_file, ui.bibtexfile->currentText())); connect(_bpP, SIGNAL(setDocumentFilename()), this, SLOT(setDocumentFilename())); } void cb2Bib::addToFile(bool ready) { if (!ready) { QMessageBox::information(this, tr("Information - cb2Bib"), tr("Not ready to add reference.\n%2").arg(c2b::net()->errorString()), QMessageBox::Ok); ui.AddBibB->setEnabled(_modified); return; } QFile file(ui.bibtexfile->currentText()); bool fopen; if (file.exists()) fopen = file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append); else fopen = file.open(QIODevice::WriteOnly | QIODevice::Text); if (fopen) { QTextStream stream(&file); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif stream.setAutoDetectUnicode(true); stream << _bpP->toBibTeX(); file.close(); c2b::showMessage(tr("Bib Item %1 added to %2.").arg(ui.id->text(), ui.bibtexfile->currentText())); if (_settingsP->value("cb2Bib/InsertMetadata").toBool()) if (!_target_document_file.isEmpty()) if (!c2b::metaParser()->insertMetadata(_bpP->currentReference(), _target_document_file)) c2b::showMessage(tr("Unable to insert metadata to file %1.").arg(_target_document_file)); _is_check_repeated_done = false; _modified = false; ui.AddBibB->setEnabled(_modified); emit addedBibToFile(ui.bibtexfile->currentText()); } else QMessageBox::warning( this, tr("Warning - cb2Bib"), tr("Unable to open file %1 for writing.\nError: '%2'.").arg(ui.bibtexfile->currentText(), file.errorString()), QMessageBox::Ok); } void cb2Bib::addMetadata() { if (!_dropped_document_file.isEmpty()) { if (QFileInfo(_dropped_document_file).isWritable() && c2b::metaParser()->insertMetadata(_bpP->currentReference(), _dropped_document_file)) c2b::showMessage(tr("Inserted metadata to file %1.").arg(_dropped_document_file)); else c2b::showMessage(tr("Unable to insert metadata to file %1.").arg(_dropped_document_file)); } } void cb2Bib::postprocessBibTeX() { c2bPostprocess* ppBib = new c2bPostprocess(ui.bibtexfile->currentText(), this); showMessage(tr("BibTeX Postprocessing launched.")); if (ppBib->exec() != QDialog::Accepted) showMessage(tr("BibTeX Postprocessing exited.")); } void cb2Bib::bookmarksEditor() { if (_openDocuments.contains("bookmark_network_editor")) { c2bUtils::setWidgetOnTop(_openDocuments.value("bookmark_network_editor")); return; } c2bEditor* ed = new c2bEditor(_settingsP->fileName("cb2Bib/NetworkFile"), c2bEditor::NetQInfo, this); ed->setObjectName("bookmark_network_editor"); _openDocuments.insert("bookmark_network_editor", ed); ui.editBookmarksAction->setEnabled(false); connect(ed, SIGNAL(restartQuery()), this, SLOT(makeNetQuery())); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(QString)), this, SLOT(bibEditor(QString))); ed->show(); showMessage(tr("Bookmark File Editor launched.")); } void cb2Bib::abbreviationsEditor() { c2bEditor* ed = new c2bEditor(_settingsP->fileName("cb2Bib/JournalFile"), c2bEditor::JAbbrev, this); ed->setObjectName("journal_abbreviations_editor"); _openDocuments.insert("journal_abbreviations_editor", ed); ui.editAbbreviationsAction->setEnabled(false); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(QString)), this, SLOT(bibEditor(QString))); connect(ed, SIGNAL(openBookmarks()), this, SLOT(bookmarksEditor())); ed->show(); showMessage(tr("Journal Abbreviations Editor launched.")); } void cb2Bib::regExpsEditor() { c2bEditor* ed = new c2bEditor(_settingsP->fileName("cb2Bib/RegularExpressionFile"), c2bEditor::RegExp, this); ed->setObjectName("regular_expression_editor"); _openDocuments.insert("regular_expression_editor", ed); ui.editRegExpsAction->setEnabled(false); connect(ed, SIGNAL(restartEngine()), this, SLOT(restartEngine())); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(QString)), this, SLOT(bibEditor(QString))); connect(ed, SIGNAL(openBookmarks()), this, SLOT(bookmarksEditor())); ed->show(); showMessage(tr("RegExp File Editor launched.")); } void cb2Bib::annoteEditor(const QString& annotefile) { c2bEditor* ed = new c2bEditor(annotefile, c2bEditor::Annote, this); ed->setObjectName("annote_editor"); _openDocuments.insert("annote_editor", ed); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(QString)), this, SLOT(bibEditor(QString))); connect(ed, SIGNAL(openBookmarks()), this, SLOT(bookmarksEditor())); ed->show(); showMessage(tr("Annote Editor launched.")); } void cb2Bib::initAsBibTeXEditor() { for (int i = 0; i < _settingsP->cl_bibedit_filenames.count(); ++i) bibEditor(_settingsP->cl_bibedit_filenames.at(i)); } void cb2Bib::bibEditor(const QString& bibtexfile, bibSearcher* searcher) { if (bibtexfile.isEmpty()) return; if (_openDocuments.contains(bibtexfile)) { c2bUtils::setWidgetOnTop(_openDocuments.value(bibtexfile)); return; } c2bEditor* ed = new c2bEditor(bibtexfile, searcher, this); ed->setObjectName(ed->editorFilename()); _openDocuments.insert(ed->editorFilename(), ed); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(QString)), this, SLOT(bibEditor(QString))); connect(ed, SIGNAL(openBookmarks()), this, SLOT(bookmarksEditor())); connect(ed, SIGNAL(editFileRenamed(QString,QString)), this, SLOT(updateOpenDocuments(QString,QString))); ed->show(); showMessage(tr("BibTeX Editor launched.")); } void cb2Bib::updateOpenDocuments(QObject* obj) { _openDocuments.remove(obj->objectName()); if (!_openDocuments.contains("bookmark_network_editor")) ui.editBookmarksAction->setEnabled(true); if (!_openDocuments.contains("journal_abbreviations_editor")) ui.editAbbreviationsAction->setEnabled(true); if (!_openDocuments.contains("regular_expression_editor")) ui.editRegExpsAction->setEnabled(true); if (_settingsP->cl_bibedit && _openDocuments.count() == 0 && isHidden()) close(); } void cb2Bib::updateOpenDocuments(const QString& old_name, const QString& new_name) { c2bEditor* ed = _openDocuments.take(old_name); if (ed) { if (ed->objectName() == "bookmark_network_editor" || ed->objectName() == "journal_abbreviations_editor" || ed->objectName() == "regular_expression_editor" || ed->objectName() == "annote_editor") return; ed->setObjectName(new_name); _openDocuments.insert(new_name, ed); updateBibfile(new_name); } } void cb2Bib::bibModified(bool modified) { _modified = modified; ui.AddBibB->setEnabled(_modified); if (ui.stackedWidget->currentWidget() == BibBrowser) BibBrowser->updatePlainText(_bpP->toBibTeX()); } void cb2Bib::updateCheckRepeatedAction() { // Do not use anyAuthor/anyTitle, _bpP->currentReference() might not yet be set ui.checkRepeatedAction->setVisible(!ui.author->text().isEmpty() || !ui.title->text().isEmpty() || !ui.editor->text().isEmpty() || !ui.booktitle->text().isEmpty() || !ui.id->text().isEmpty()); } void cb2Bib::checkRepeated() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); isReferenceRepeated(); QApplication::restoreOverrideCursor(); } bool cb2Bib::isReferenceRepeated() { QFileInfo fi(ui.bibtexfile->currentText()); showMessage(tr("Checking for similar references at %1.").arg(fi.absolutePath())); bibSearcher searcher(_bpP, fi.absolutePath()); searcher.exec(); const bool repeated(searcher.hitsCount() > 0); if (repeated) { QApplication::processEvents(); bibEditor(fi.absolutePath(), &searcher); QApplication::processEvents(); if (searcher.hitsCount() == 1) c2b::showMessage(tr("Found %1 similar reference.").arg(searcher.hitsCount())); else c2b::showMessage(tr("Found %1 similar references.").arg(searcher.hitsCount())); } else showMessage(tr("No similar references found at %1.").arg(fi.absolutePath())); return repeated; } /**************************************************************************** NETWORK FUNCTIONALITY *****************************************************************************/ void cb2Bib::checkNetQuerySsl() { if (!_netQP->hasSsl()) QMessageBox::information(this, tr("Information - cb2Bib"), tr("The HTTPS protocol is missing and required for network queries.\n\n" "Note: OpenSSL library might be unavailable from your Qt installation."), QMessageBox::Ok); _is_check_ssl_done = true; } void cb2Bib::makeNetQuery() { if (!ui.MakeNetworkQueryB->isEnabled()) { showMessage(tr("Currently processing previous query. Resubmit later.")); return; } ui.MakeNetworkQueryB->setEnabled(false); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); _netQP->submitQuery(_bpP->currentReference(), ClipEdit->toPlainText(), !_pdfImportP); } void cb2Bib::netQueryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib) { if (!succeeded) { emit endedProcessing(false); c2b::showMessage(tr("Query submission information. %1").arg(_netQP->errorString())); } else if (targetPDF.isEmpty() && targetBib.isEmpty()) { emit endedProcessing(false); c2b::showMessage(tr("Query submitted. %1").arg(_netQP->errorString())); } else { const QString previous_article_file( _dropped_document_file); // Keep dropped file in case this is auto recognized forceDataChange(targetBib); if (_bpP->isAutoRecognized() && !targetPDF.isEmpty()) fileDropped(targetPDF); else if (_bpP->isAutoRecognized()) fileDropped(previous_article_file); } QApplication::restoreOverrideCursor(); ui.MakeNetworkQueryB->setEnabled(true); } void cb2Bib::processingEnded() { if (_settingsP->value("cb2Bib/AutomaticQuery").toBool()) if (ui.MakeNetworkQueryB->isEnabled() && !_bpP->autoRecognizedString().contains("BibTeX")) { makeNetQuery(); return; } if (_pdfImportP) fileDropped(_pdfImportP->processedFile); emit endedProcessing(_bpP->isAutoRecognized()); } void cb2Bib::linkClicked(const QUrl& link) { // Encode link sets dynamic link. c2bUtils::openFile(c2b::encodeLink(link.toString()), this); } void cb2Bib::openFileDocument() { if (!_dropped_document_file.isEmpty()) c2bUtils::openFile(_dropped_document_file, this); } void cb2Bib::selectFile() { const QString fn(c2bFileDialog::getOpenFilename( this, QString(), _settingsP->fileName("cb2Bib/LastDroppedFile"), "Portable Document Format (*.pdf);;DjVu (*.djvu);;Post Script (*.ps);;TeX (*.tex);;All (*)")); if (!fn.isEmpty()) fileDroppedByUser(fn); } void cb2Bib::openAnnote() { const QString fn(c2bFileDialog::getFilename(this, QString(), _settingsP->fileName("cb2Bib/LastAnnoteFile"), "Annote HTML output (*.tex.html);;LaTeX (*.tex);;All (*)")); if (fn.isEmpty()) return; const QString tex_fn(c2bUtils::removed(fn, QRegExp("\\.html$"))); if (!QFileInfo::exists(tex_fn)) { const QString empty_note("%\\c2b_bibtex_directory{" + QFileInfo(ui.bibtexfile->currentText()).absolutePath() + "}\n%\\c2b_makeindex\n\n\n\\title{New Note}\n\n\n\n"); if (!c2bUtils::stringToFile(empty_note, tex_fn)) { QMessageBox::information(this, tr("Information - cb2Bib"), tr("Unable to create new note %1.\nCheck writing permission.").arg(tex_fn), QMessageBox::Ok); return; } } _settingsP->setFilename("cb2Bib/LastAnnoteFile", fn); #ifdef C2B_USE_QWEB const QStringList flags(QStringList() << "--view-annote" << fn << _settingsP->confCommandFlags()); QProcess::startDetached(QCoreApplication::applicationFilePath(), flags); #else annoteEditor(tex_fn); #endif } ��������������������������cb2bib-2.0.3/src/PaxHeaders/c2bRLWebSearchSettings.h������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�017071� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.602762793 30 atime=1762812828.042759324 30 ctime=1762812827.602762793 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bRLWebSearchSettings.h�����������������������������������������������������������0000644�0001750�0000144�00000001342�15104461633�021062� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BRLWEBSEARCHSETTINGS_H #define C2BRLWEBSEARCHSETTINGS_H #include "ui_c2bRLWebSearchSettings.h" #include <QDialog> class c2bRLWebSearchSettings : public QDialog { Q_OBJECT public: explicit c2bRLWebSearchSettings(QWidget* parentw = 0); ~c2bRLWebSearchSettings(); private: Ui::c2bRLWebSearchSettings ui; protected slots: void accept(); }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bComboBox.cpp���������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015311� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.402764369 29 atime=1762812827.99875967 30 ctime=1762812827.402764369 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bComboBox.cpp��������������������������������������������������������������������0000644�0001750�0000144�00000002144�15104461633�017304� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bComboBox.h" #include <QAction> #include <QContextMenuEvent> #include <QLineEdit> #include <QMenu> c2bComboBox::c2bComboBox(QWidget* parentw) : QComboBox(parentw) {} c2bComboBox::~c2bComboBox() {} void c2bComboBox::contextMenuEvent(QContextMenuEvent* e) { QMenu* menu = QComboBox::lineEdit()->createStandardContextMenu(); QList<QAction*> acts = menu->actions(); QAction* act; act = new QAction("Clear", menu); act->setEnabled(!QComboBox::lineEdit()->text().isEmpty()); connect(act, SIGNAL(triggered()), this, SLOT(clearEditText())); menu->insertAction(acts.at(7), act); acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(e->globalPos()); delete menu; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bAnnote.cpp�����������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015025� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.370764622 29 atime=1762812827.99875967 30 ctime=1762812827.370764622 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bAnnote.cpp����������������������������������������������������������������������0000644�0001750�0000144�00000014657�15104461633�017034� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bAnnote.h" #include "c2b.h" #include "c2bFileSystemWatcher.h" #include "c2bSettings.h" #include "c2bUtils.h" #include "c2bWebBrowser.h" #include <texToHtml.h> #include <QLabel> #include <QMessageBox> #include <QRegularExpression> #include <QShortcut> #include <QStatusBar> /** \page c2bannote cb2Bib Annote The cb2Bib Annote module is named after the BibTeX key <tt>annote</tt>. Annote is not for a 'one reference annotation' though. Instead, Annote is for short notes that interrelate several references. Annote takes a plain text note, with minimal or no markup, inserts the bibliographic citations, and converts it to a HTML page with links to the referenced documents. From within cb2Bib, to write a note, type <tt>Alt+A</tt>, enter a filename, either new or existing, and once in Annote, type <tt>E</tt> to start the editor. Each time you save the document the viewer will be updated. For help on Annote's syntax type <tt>F1</tt>. If cb2Bib was compiled without Annote's Viewer, typing <tt>Alt+A</tt> will start the editor and HTML viewing will be committed to the default web browser. From the command line, typing \verbatim cb2bib --html-annote annote.tex \endverbatim will produce the HTML file <tt>annote.tex.html</tt>. See also \ref c2bconf_annote and \ref commandline. \section c2bannote_syntax Annote Syntax The resulting HTML file <tt>annote.tex.html</tt> can be seen at \htmlonly <a href="https://www.molspaces.com/cb2bib/doc/c2bannote/annote.tex.html" target="_blank">cb2Bib Annote</a>. \endhtmlonly \htmlonly <pre style="font-size: xx-small;"> % annote.tex GET_C2BANNOTE_TEX_DOC \endhtmlonly */ c2bAnnote::c2bAnnote(QWidget* parentw) : QMainWindow(parentw) { _view_port = new c2bWebBrowser(this); setCentralWidget(_view_port); QLabel* informationLabel = new QLabel(this); statusBar()->addWidget(informationLabel, 1); connect(_view_port, SIGNAL(windowTitleChanged(QString)), this, SLOT(setWindowTitle(QString))); connect(_view_port, SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); // Creating cb2Bib global resources c2b* c2b_resources = new c2b(this, this); connect(c2b_resources, SIGNAL(statusMessage(QString)), this, SLOT(showMessage(QString))); QAction* act = new QAction(QIcon(QString::fromUtf8(":/icons/icons/edit.png")), tr("Edit Note"), this); act->setShortcut(QKeySequence(Qt::Key_E)); act->setStatusTip(tr("Edit TeX note")); c2bUtils::addSeparator(_view_port); _view_port->addAction(act); connect(act, SIGNAL(triggered()), this, SLOT(edit())); act = new QAction(QIcon(QString::fromUtf8(":/icons/icons/configure.png")), tr("Configure"), this); act->setShortcut(QKeySequence(Qt::Key_C)); act->setStatusTip(tr("Configure cb2Bib Annote")); c2bUtils::addSeparator(_view_port); _view_port->addAction(act); connect(act, SIGNAL(triggered()), this, SLOT(configure())); _settingsP = c2bSettingsP; resize(_settingsP->value("c2bAnnote/size", size()).toSize()); move(_settingsP->value("c2bAnnote/position", pos()).toPoint()); loadSettings(); connect(_settingsP, SIGNAL(newSettings()), this, SLOT(loadSettings())); _t2h = new texToHtml; _fsw = new c2bFileSystemWatcher(this); connect(_fsw, SIGNAL(fileChanged(QString)), this, SLOT(annote())); disconnect(_view_port->viewReloadAction, 0, 0, 0); connect(_view_port->viewReloadAction, SIGNAL(triggered()), this, SLOT(update())); QShortcut* help_shortcut = new QShortcut(QKeySequence(QKeySequence::HelpContents), this); connect(help_shortcut, SIGNAL(activated()), this, SLOT(help())); } c2bAnnote::~c2bAnnote() { delete _t2h; _settingsP->setValue("c2bAnnote/position", pos()); _settingsP->setValue("c2bAnnote/size", size()); } bool c2bAnnote::show() { _annote_filename = QDir::cleanPath(_settingsP->cl_annote_filename); const bool is_html = _annote_filename.endsWith(".html"); if (is_html) _annote_filename.remove(QRegularExpression("\\.html$")); if (!QFileInfo::exists(_annote_filename)) { QMessageBox::warning(this, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for reading.\nError: '%2'.") .arg(QDir::toNativeSeparators(_annote_filename), "File does not exist"), QMessageBox::Ok); return false; } _html_filename = _annote_filename + ".html"; if (!is_html || !QFileInfo::exists(_html_filename)) _t2h->toHtml(c2bUtils::fileToString(_annote_filename), _html_filename); _view_port->setHomePage(_html_filename); _fsw->addPath(_annote_filename); QMainWindow::show(); return true; } void c2bAnnote::annote() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); _t2h->toHtml(c2bUtils::fileToString(_annote_filename), _html_filename); if (_html_filename == QDir::cleanPath(_view_port->url().toLocalFile())) _view_port->reload(); QApplication::restoreOverrideCursor(); } void c2bAnnote::update() { if (_html_filename == QDir::cleanPath(_view_port->url().toLocalFile())) annote(); else _view_port->reload(); } void c2bAnnote::edit() { c2bUtils::openFile(_annote_filename, this); } void c2bAnnote::configure() { // Attention: Currently c2bAnnote is page 0. Update here if c2bConfigure changes page ordering. c2b::configure(0); } void c2bAnnote::setWindowTitle(const QString& title) { if (title.isEmpty()) QMainWindow::setWindowTitle("Annote - cb2Bib"); else QMainWindow::setWindowTitle(title + " - cb2Bib"); if (title == "New Note") showMessage(tr("Press E to Edit and %1 for Help.").arg(QKeySequence(QKeySequence::HelpContents).toString())); } void c2bAnnote::showMessage(const QString& ms) { statusBar()->showMessage(ms, C2B_MESSAGE_TIME); } void c2bAnnote::loadSettings() { _view_port->setFont(_settingsP->value("c2bAnnote/Font").value<QFont>()); _view_port->setFixedFont(_settingsP->value("c2bAnnote/FixedFont").value<QFont>()); } void c2bAnnote::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/c2bannote/"); } ���������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bClipEdit.h�����������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014744� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.542763266 30 atime=1762812828.042759324 30 ctime=1762812827.542763266 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bClipEdit.h����������������������������������������������������������������������0000644�0001750�0000144�00000002527�15104461633�016743� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCLIPEDIT_H #define C2BCLIPEDIT_H #include <QPlainTextEdit> /** @author Pere Constans */ class c2bClipEdit : public QPlainTextEdit { Q_OBJECT public: enum Mode { Editor, Browser }; explicit c2bClipEdit(const Mode mode, QWidget* parentw = 0); ~c2bClipEdit(); void setText(const QString& text, const QString& tagged_text = QString()); void setTaggedViewMode(bool tagged_view); void insertTag(const QString& tag); void updatePlainText(const QString& text); signals: void userEndedSelection(const QPoint& position); protected: virtual void contextMenuEvent(QContextMenuEvent* qevent); virtual void keyPressEvent(QKeyEvent* qevent); virtual void keyReleaseEvent(QKeyEvent* qevent); virtual void mouseReleaseEvent(QMouseEvent* qevent); private slots: virtual void selectionHasChanged(); private: QString _tagged_text; QString _text; bool _has_selecting_ended; bool _is_tagged_view; }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bIdPatternLineEdit.h��������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016556� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.578762982 30 atime=1762812828.042759324 29 ctime=1762812827.58276295 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bIdPatternLineEdit.h�������������������������������������������������������������0000644�0001750�0000144�00000003156�15104461633�020555� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Improvements and modifications: * July 2009 - Added <<author_all_abbreviated>>, (C) 2009 by Dayu Huang ***************************************************************************/ #ifndef C2BIDPATTERNLINEEDIT_H #define C2BIDPATTERNLINEEDIT_H #include "c2bLineEdit.h" class QAction; class c2bIdPatternLineEdit : public c2bLineEdit { Q_OBJECT public: explicit c2bIdPatternLineEdit(QWidget* parentw = 0); ~c2bIdPatternLineEdit(); void setDocumentIDEdit(); protected: QAction* a_author_all_abbreviated; QAction* a_author_all_initials; QAction* a_author_first; QAction* a_author_first_lowercase; QAction* a_citeid; QAction* a_journal_initials; QAction* a_pages_first; QAction* a_ppages_first; QAction* a_reset; QAction* a_title; QAction* a_title_first_word; QAction* a_title_underscored; QAction* a_volume; QAction* a_year_abbreviated; QAction* a_year_full; protected slots: void author_all_abbreviated(); void author_all_initials(); void author_first(); void author_first_lowercase(); void citeid(); void journal_initials(); void pages_first(); void ppages_first(); void reset(); void title(); void title_first_word(); void title_underscored(); void volume(); void year_abbreviated(); void year_full(); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bSearchInFiles.ui�����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016113� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.190766041 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bSearchInFiles.ui����������������������������������������������������������������0000644�0001750�0000144�00000024020�15104461330�020075� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <author>Pere Constans</author> <class>c2bSearchInFiles</class> <widget class="QDialog" name="c2bSearchInFiles"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>824</width> <height>494</height> </rect> </property> <property name="windowTitle"> <string>Search in files - cb2Bib</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>6</number> </property> <property name="topMargin"> <number>6</number> </property> <property name="rightMargin"> <number>6</number> </property> <property name="bottomMargin"> <number>6</number> </property> <property name="spacing"> <number>6</number> </property> <item row="4" column="1"> <widget class="QGroupBox" name="Modifiers"> <property name="title"> <string>Modifier</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="QCheckBox" name="simplifySource"> <property name="text"> <string>&Simplify source</string> </property> </widget> </item> <item row="0" column="1"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </widget> </item> <item row="4" column="0"> <widget class="QGroupBox" name="Scope"> <property name="title"> <string>Search scope</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="1"> <widget class="QCheckBox" name="documentFiles"> <property name="text"> <string>Scan &linked documents</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QCheckBox" name="allBibFiles"> <property name="text"> <string>Scan all &BibTeX files</string> </property> </widget> </item> <item row="0" column="2"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>16</width> <height>22</height> </size> </property> </spacer> </item> </layout> </widget> </item> <item row="6" column="0" colspan="2"> <widget class="QLabel" name="searchLog"> <property name="text"> <string>Search for ...</string> </property> </widget> </item> <item row="7" column="0" colspan="2"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="5" column="0" colspan="2"> <widget class="Line" name="line_4"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="3" column="0" colspan="2"> <widget class="Line" name="line_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="8" column="0" colspan="2"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="focusPolicy"> <enum>Qt::NoFocus</enum> </property> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="standardButtons"> <set>QDialogButtonBox::Abort|QDialogButtonBox::Close|QDialogButtonBox::Help</set> </property> </widget> </item> <item row="0" column="0" colspan="2"> <widget class="QGroupBox" name="groupBox"> <property name="title"> <string>Pattern</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="c2bSearchInFilesPattern" name="pattern" native="true"/> </item> </layout> </widget> </item> <item row="1" column="0" colspan="2"> <widget class="Line" name="line_3"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="2" column="0" colspan="2"> <widget class="QGroupBox" name="Composite"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="title"> <string>Composite pattern</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="3" column="1"> <widget class="QPushButton" name="editPatternB"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> <string>&Edit</string> </property> </widget> </item> <item row="4" column="1"> <widget class="QPushButton" name="deletePatternB"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> <string>&Delete</string> </property> </widget> </item> <item row="2" column="1"> <widget class="QPushButton" name="addPatternB"> <property name="enabled"> <bool>false</bool> </property> <property name="contextMenuPolicy"> <enum>Qt::PreventContextMenu</enum> </property> <property name="text"> <string>&Add</string> </property> </widget> </item> <item row="0" column="0" rowspan="5"> <widget class="QTreeWidget" name="patternList"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="tabKeyNavigation"> <bool>true</bool> </property> <property name="rootIsDecorated"> <bool>false</bool> </property> <property name="animated"> <bool>true</bool> </property> <column> <property name="text"> <string/> </property> </column> <column> <property name="text"> <string>Case</string> </property> </column> <column> <property name="text"> <string>Type</string> </property> </column> <column> <property name="text"> <string>Scope</string> </property> </column> <column> <property name="text"> <string/> </property> </column> <column> <property name="text"> <string>Pattern</string> </property> </column> </widget> </item> <item row="1" column="1"> <spacer> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>75</width> <height>91</height> </size> </property> </spacer> </item> <item row="0" column="1"> <widget class="QComboBox" name="Boolean"> <property name="enabled"> <bool>false</bool> </property> <item> <property name="text"> <string>All</string> </property> </item> <item> <property name="text"> <string>Any</string> </property> </item> </widget> </item> </layout> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bSearchInFilesPattern</class> <extends>QWidget</extends> <header>c2bSearchInFilesPattern.h</header> </customwidget> </customwidgets> <tabstops> <tabstop>patternList</tabstop> <tabstop>addPatternB</tabstop> <tabstop>deletePatternB</tabstop> <tabstop>allBibFiles</tabstop> <tabstop>documentFiles</tabstop> <tabstop>buttonBox</tabstop> </tabstops> <resources> <include location="cb2bib.qrc"/> </resources> <connections> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bSearchInFiles</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel"> <x>325</x> <y>565</y> </hint> <hint type="destinationlabel"> <x>286</x> <y>274</y> </hint> </hints> </connection> </connections> </ui> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bTests.h��������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014351� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.618762667 30 atime=1762812828.042759324 30 ctime=1762812827.622762635 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bTests.h�������������������������������������������������������������������������0000644�0001750�0000144�00000002655�15104461633�016352� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BTESTS_H #define C2BTESTS_H #include <QString> class QTextStream; class bibParser; class bibReference; /** Test cb2Bib functionality */ class c2bTests { public: c2bTests(); ~c2bTests(); int allTests(); int writeInformation(); private: QString _bibliographic_dir; QTextStream& cout; int _failed_test_count; int _test_count; void author_parser(); void check_abbreviations_txt(); void check_test(const bool passed, const QString& input, const QString& output); void compression_check(); void heuristic(bibParser& bp, const bibReference& reference, const QString& text); void heuristic_author(); void heuristic_check_patterns(); void heuristic_journal(); void heuristic_misc(); void heuristic_pvny(); void write(const bibParser& bp, const bibReference& reference); void write_information(); static QString decomposition(const QChar& c); static inline const char* boolToStr(bool b) { if (b) return "passed"; else return "failed"; } }; #endif �����������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bCollectionIndex.cpp��������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016664� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.398764401 29 atime=1762812827.99875967 30 ctime=1762812827.398764401 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bCollectionIndex.cpp�������������������������������������������������������������0000644�0001750�0000144�00000006721�15104461633�020664� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCollectionIndex.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QPushButton> c2bCollectionIndex::c2bCollectionIndex(QWidget* parentw) : QDialog(parentw), _indexerP(0) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("Documents Indexing Log - cb2Bib")); ui.Log->setFont(c2bSettingsP->c2bMonoFont); ui.Log->setLineWrapMode(QPlainTextEdit::NoWrap); _buttonAbort = new QPushButton(tr("Abort")); ui.buttonBox->addButton(_buttonAbort, QDialogButtonBox::ActionRole); connect(_buttonAbort, SIGNAL(clicked()), this, SLOT(aborted())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); resize(c2bSettingsP->value("c2bLogWidget/size", size()).toSize()); } c2bCollectionIndex::~c2bCollectionIndex() { c2bSettingsP->setValue("c2bLogWidget/size", size()); } void c2bCollectionIndex::index() { ui.Log->clear(); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(false); _indexerP = new QProcess(this); _indexerP->setProcessChannelMode(QProcess::MergedChannels); connect(_indexerP, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(indexingEnded(int,QProcess::ExitStatus))); connect(_indexerP, SIGNAL(readyReadStandardOutput()), this, SLOT(addToLog())); const QStringList flags(QStringList() << "--index" << c2bSettingsP->confCommandFlags()); _indexerP->start(QCoreApplication::applicationFilePath(), flags); if (!_indexerP->waitForStarted()) { ui.Log->appendPlainText(tr("Failed to call %1.").arg(QCoreApplication::applicationFilePath())); _buttonAbort->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); delete _indexerP; _indexerP = 0; } } void c2bCollectionIndex::addToLog() { const QString log(QString::fromUtf8(_indexerP->readAllStandardOutput().trimmed())); if (log.isEmpty()) return; ui.Log->appendPlainText(log); } void c2bCollectionIndex::indexingEnded(int exit_code, QProcess::ExitStatus exit_status) { _buttonAbort->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); if (exit_code == 0 && exit_status == QProcess::NormalExit) ui.Log->appendPlainText(tr("\nIndexing ended\nRefresh cb2Bib Citer")); else ui.Log->appendPlainText(tr("\nAbnormal termination")); delete _indexerP; _indexerP = 0; } void c2bCollectionIndex::aborted() { if (_indexerP) _indexerP->kill(); ui.Log->appendPlainText(tr("Aborting...")); } void c2bCollectionIndex::closeEvent(QCloseEvent* qevent) { if (!_indexerP || _indexerP->state() == QProcess::NotRunning) QDialog::closeEvent(qevent); else qevent->ignore(); } void c2bCollectionIndex::reject() { if (!_indexerP || _indexerP->state() == QProcess::NotRunning) QDialog::reject(); } void c2bCollectionIndex::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/c2bciter/"); } �����������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bSearchInFilesPattern.h�����������������������������������������������0000644�0000000�0000000�00000000131�15104461633�017263� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1762812827.61076273 30 atime=1762812828.042759324 30 ctime=1762812827.614762698 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bSearchInFilesPattern.h����������������������������������������������������������0000644�0001750�0000144�00000002247�15104461633�021262� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSEARCHINFILESPATTERN_H #define C2BSEARCHINFILESPATTERN_H #include "ui_c2bSearchInFilesPattern.h" #include <QWidget> const int ITEMS_IN_SEARCH_PATTERN(6); class QTreeWidgetItem; class c2bSearchInFilesPattern : public QWidget { Q_OBJECT public: explicit c2bSearchInFilesPattern(QWidget* parentw = 0); ~c2bSearchInFilesPattern(); const QStringList patterns(); void clear(); void setPattern(QTreeWidgetItem* pattern); void setText(const QString& text); inline bool isAvailable() const { return !ui.inputPattern->text().isEmpty(); } signals: void patternAvailable(bool available); public slots: void setFocus(); private slots: void patternChanged(); void showYearScope(const QString& scope); private: Ui::c2bSearchInFilesPattern ui; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bPdfImport.ui���������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015340� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.190766041 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bPdfImport.ui��������������������������������������������������������������������0000644�0001750�0000144�00000013755�15104461330�017337� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ui version="4.0" > <author>Pere Constans</author> <class>c2bPdfImport</class> <widget class="QDialog" name="c2bPdfImport" > <property name="geometry" > <rect> <x>0</x> <y>0</y> <width>869</width> <height>414</height> </rect> </property> <property name="acceptDrops" > <bool>true</bool> </property> <property name="windowTitle" > <string>PDFImport - cb2Bib</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>6</number> </property> <property name="spacing" > <number>6</number> </property> <item row="0" column="0" colspan="2" > <widget class="QSplitter" name="splitter" > <property name="orientation" > <enum>Qt::Vertical</enum> </property> <widget class="QListWidget" name="PDFlist" > <property name="frameShadow" > <enum>QFrame::Raised</enum> </property> </widget> <widget class="QPlainTextEdit" name="Log" > <property name="frameShape" > <enum>QFrame::StyledPanel</enum> </property> <property name="frameShadow" > <enum>QFrame::Raised</enum> </property> <property name="readOnly" > <bool>true</bool> </property> </widget> </widget> </item> <item row="3" column="0" colspan="2" > <widget class="QStatusBar" name="statusBar" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Expanding" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="sizeGripEnabled" > <bool>false</bool> </property> </widget> </item> <item row="5" column="0" colspan="2" > <widget class="QDialogButtonBox" name="buttonBox" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="standardButtons" > <set>QDialogButtonBox::Abort|QDialogButtonBox::Close|QDialogButtonBox::Help</set> </property> </widget> </item> <item row="4" column="0" colspan="2" > <widget class="Line" name="line" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="2" column="0" colspan="2" > <widget class="Line" name="line1" > <property name="frameShape" > <enum>QFrame::HLine</enum> </property> <property name="frameShadow" > <enum>QFrame::Sunken</enum> </property> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="1" column="1" > <widget class="QGroupBox" name="groupBox_2" > <property name="title" > <string>Miscellaneous</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>9</number> </property> <property name="spacing" > <number>6</number> </property> <item row="0" column="2" > <spacer> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="1" > <widget class="QCheckBox" name="AutomaticQuery" > <property name="statusTip" > <string>Perform network queries after automatic reference extractions</string> </property> <property name="text" > <string>Perform network queries</string> </property> </widget> </item> <item row="0" column="0" > <widget class="QCheckBox" name="OpenFiles" > <property name="toolTip" > <string/> </property> <property name="statusTip" > <string>Open document files</string> </property> <property name="text" > <string>Open document files</string> </property> </widget> </item> </layout> </widget> </item> <item row="1" column="0" > <widget class="QGroupBox" name="groupBox" > <property name="title" > <string>Sequence</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>9</number> </property> <property name="spacing" > <number>6</number> </property> <item row="0" column="2" > <spacer> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="0" > <widget class="QCheckBox" name="DoNextAfterSaving" > <property name="statusTip" > <string>Process next after saving</string> </property> <property name="text" > <string>Process next after saving</string> </property> </widget> </item> <item row="0" column="1" > <widget class="QCheckBox" name="DoAll" > <property name="statusTip" > <string>Unsupervised processing</string> </property> <property name="text" > <string>Unsupervised processing</string> </property> </widget> </item> </layout> </widget> </item> </layout> </widget> <layoutdefault spacing="6" margin="11" /> <tabstops> <tabstop>PDFlist</tabstop> <tabstop>Log</tabstop> <tabstop>OpenFiles</tabstop> <tabstop>DoNextAfterSaving</tabstop> <tabstop>buttonBox</tabstop> </tabstops> <resources> <include location="cb2bib.qrc" /> </resources> <connections> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bPdfImport</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel" > <x>759</x> <y>428</y> </hint> <hint type="destinationlabel" > <x>822</x> <y>323</y> </hint> </hints> </connection> </connections> </ui> �������������������cb2bib-2.0.3/src/PaxHeaders/c2bIdPatternLineEdit.cpp������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�017112� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.430764149 30 atime=1762812828.042759324 30 ctime=1762812827.434764117 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bIdPatternLineEdit.cpp�����������������������������������������������������������0000644�0001750�0000144�00000013560�15104461633�021110� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Improvements and modifications: * July 2009 - Added <<author_all_abbreviated>>, (C) 2009 by Dayu Huang ***************************************************************************/ #include "c2bIdPatternLineEdit.h" #include "c2bUtils.h" #include <cb2bib_parameters.h> #include <QAction> c2bIdPatternLineEdit::c2bIdPatternLineEdit(QWidget* parentw) : c2bLineEdit(parentw) { a_author_all_abbreviated = new QAction(this); a_author_all_initials = new QAction(this); a_author_first = new QAction(this); a_author_first_lowercase = new QAction(this); a_citeid = new QAction(this); a_journal_initials = new QAction(this); a_pages_first = new QAction(this); a_ppages_first = new QAction(this); a_title = new QAction(this); a_title_first_word = new QAction(this); a_title_underscored = new QAction(this); a_volume = new QAction(this); a_year_abbreviated = new QAction(this); a_year_full = new QAction(this); a_reset = new QAction(this); c2bUtils::addSeparator(this); addAction(a_author_all_abbreviated); addAction(a_author_all_initials); addAction(a_author_first); addAction(a_author_first_lowercase); c2bUtils::addSeparator(this); addAction(a_citeid); c2bUtils::addSeparator(this); addAction(a_journal_initials); c2bUtils::addSeparator(this); addAction(a_pages_first); addAction(a_ppages_first); c2bUtils::addSeparator(this); addAction(a_title); addAction(a_title_underscored); addAction(a_title_first_word); c2bUtils::addSeparator(this); addAction(a_volume); c2bUtils::addSeparator(this); addAction(a_year_abbreviated); addAction(a_year_full); c2bUtils::addSeparator(this); addAction(a_reset); a_author_all_abbreviated->setText(tr("Insert <<author_all_abbreviated>>")); a_author_all_initials->setText(tr("Insert <<author_all_initials>>")); a_author_first->setText(tr("Insert <<author_first>>")); a_author_first_lowercase->setText(tr("Insert <<author_first_lowercase>>")); a_citeid->setText(tr("Insert <<citeid>>")); a_journal_initials->setText(tr("Insert <<journal_initials>>")); a_pages_first->setText(tr("Insert <<pages_first>>")); a_ppages_first->setText(tr("Insert <<ppages_first>>")); a_title->setText(tr("Insert <<title>>")); a_title_first_word->setText(tr("Insert <<title_first_word>>")); a_title_underscored->setText(tr("Insert <<title_underscored>>")); a_volume->setText(tr("Insert <<volume>>")); a_year_abbreviated->setText(tr("Insert <<year_abbreviated>>")); a_year_full->setText(tr("Insert <<year_full>>")); a_reset->setText(tr("Reset ID Pattern")); connect(a_author_all_abbreviated, SIGNAL(triggered()), this, SLOT(author_all_abbreviated())); connect(a_author_all_initials, SIGNAL(triggered()), this, SLOT(author_all_initials())); connect(a_author_first, SIGNAL(triggered()), this, SLOT(author_first())); connect(a_author_first_lowercase, SIGNAL(triggered()), this, SLOT(author_first_lowercase())); connect(a_citeid, SIGNAL(triggered()), this, SLOT(citeid())); connect(a_journal_initials, SIGNAL(triggered()), this, SLOT(journal_initials())); connect(a_pages_first, SIGNAL(triggered()), this, SLOT(pages_first())); connect(a_ppages_first, SIGNAL(triggered()), this, SLOT(ppages_first())); connect(a_title, SIGNAL(triggered()), this, SLOT(title())); connect(a_title_first_word, SIGNAL(triggered()), this, SLOT(title_first_word())); connect(a_title_underscored, SIGNAL(triggered()), this, SLOT(title_underscored())); connect(a_volume, SIGNAL(triggered()), this, SLOT(volume())); connect(a_year_abbreviated, SIGNAL(triggered()), this, SLOT(year_abbreviated())); connect(a_year_full, SIGNAL(triggered()), this, SLOT(year_full())); connect(a_reset, SIGNAL(triggered()), this, SLOT(reset())); // Hide citeid as default: CiteID line edit a_citeid->setVisible(false); setPlaceholderText(C2B_CITE_ID_PATTERN); } c2bIdPatternLineEdit::~c2bIdPatternLineEdit() {} void c2bIdPatternLineEdit::setDocumentIDEdit() { a_citeid->setVisible(true); setPlaceholderText(C2B_DOCUMENT_ID_PATTERN); } void c2bIdPatternLineEdit::author_all_abbreviated() { insert(QLatin1String("<<author_all_abbreviated>>")); } void c2bIdPatternLineEdit::author_all_initials() { insert(QLatin1String("<<author_all_initials>>")); } void c2bIdPatternLineEdit::author_first() { insert(QLatin1String("<<author_first>>")); } void c2bIdPatternLineEdit::author_first_lowercase() { insert(QLatin1String("<<author_first_lowercase>>")); } void c2bIdPatternLineEdit::citeid() { insert(QLatin1String("<<citeid>>")); } void c2bIdPatternLineEdit::journal_initials() { insert(QLatin1String("<<journal_initials>>")); } void c2bIdPatternLineEdit::pages_first() { insert(QLatin1String("<<pages_first>>")); } void c2bIdPatternLineEdit::ppages_first() { insert(QLatin1String("<<ppages_first>>")); } void c2bIdPatternLineEdit::title() { insert(QLatin1String("<<title_25>>")); } void c2bIdPatternLineEdit::title_underscored() { insert(QLatin1String("<<title_underscored_25>>")); } void c2bIdPatternLineEdit::title_first_word() { insert(QLatin1String("<<title_first_word>>")); } void c2bIdPatternLineEdit::volume() { insert(QLatin1String("<<volume>>")); } void c2bIdPatternLineEdit::year_abbreviated() { insert(QLatin1String("<<year_abbreviated>>")); } void c2bIdPatternLineEdit::year_full() { insert(QLatin1String("<<year_full>>")); } void c2bIdPatternLineEdit::reset() { if (a_citeid->isVisible()) setText(C2B_DOCUMENT_ID_PATTERN); else setText(C2B_CITE_ID_PATTERN); } ������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bRLWebSearchSettings.ui�����������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017256� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.042759324 30 ctime=1762812827.190766041 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bRLWebSearchSettings.ui����������������������������������������������������������0000644�0001750�0000144�00000007600�15104461330�021245� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ui version="4.0" > <author>Pere Constans</author> <class>c2bRLWebSearchSettings</class> <widget class="QDialog" name="c2bRLWebSearchSettings" > <property name="geometry" > <rect> <x>0</x> <y>0</y> <width>466</width> <height>152</height> </rect> </property> <property name="windowTitle" > <string>Web Search Settings - cb2Bib</string> </property> <property name="sizeGripEnabled" > <bool>false</bool> </property> <layout class="QGridLayout" > <property name="margin" > <number>6</number> </property> <property name="spacing" > <number>3</number> </property> <item row="3" column="0" colspan="3" > <widget class="QCheckBox" name="addQuotes" > <property name="text" > <string>&Add quotes to query</string> </property> </widget> </item> <item row="4" column="1" > <spacer> <property name="orientation" > <enum>Qt::Vertical</enum> </property> <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> </size> </property> </spacer> </item> <item row="5" column="0" colspan="3" > <widget class="Line" name="line" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="6" column="2" > <widget class="QDialogButtonBox" name="buttonBox" > <property name="layoutDirection" > <enum>Qt::LeftToRight</enum> </property> <property name="autoFillBackground" > <bool>true</bool> </property> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="standardButtons" > <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> </property> <property name="centerButtons" > <bool>false</bool> </property> </widget> </item> <item row="6" column="0" > <spacer> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>121</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="0" colspan="3" > <widget class="QLabel" name="label" > <property name="text" > <string>Search Engine:</string> </property> </widget> </item> <item row="1" column="0" colspan="3" > <widget class="c2bComboBox" name="searchEngine" > <property name="editable" > <bool>true</bool> </property> <property name="insertPolicy" > <enum>QComboBox::NoInsert</enum> </property> </widget> </item> <item row="2" column="0" colspan="3" > <widget class="Line" name="line_2" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bComboBox</class> <extends>QComboBox</extends> <header>c2bComboBox.h</header> </customwidget> </customwidgets> <tabstops> <tabstop>addQuotes</tabstop> <tabstop>buttonBox</tabstop> </tabstops> <resources/> <connections> <connection> <sender>buttonBox</sender> <signal>accepted()</signal> <receiver>c2bRLWebSearchSettings</receiver> <slot>accept()</slot> <hints> <hint type="sourcelabel" > <x>455</x> <y>140</y> </hint> <hint type="destinationlabel" > <x>157</x> <y>161</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bRLWebSearchSettings</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel" > <x>455</x> <y>146</y> </hint> <hint type="destinationlabel" > <x>286</x> <y>161</y> </hint> </hints> </connection> </connections> </ui> ��������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bEditor.h�������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014475� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.566763076 30 atime=1762812828.042759324 30 ctime=1762812827.566763076 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bEditor.h������������������������������������������������������������������������0000644�0001750�0000144�00000005655�15104461633�016501� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BEDITOR_H #define C2BEDITOR_H #include "ui_c2bEditor.h" #include <QMainWindow> #include <QPointer> class QDockWidget; class QLabel; class QStackedWidget; class QSyntaxHighlighter; class bibSearcher; class c2bBibParser; class c2bReferenceList; class c2bSettings; class c2bTextBrowser; class c2bTextEdit; class findDialog; class c2bEditor : public QMainWindow { Q_OBJECT public: enum Mode { Annote, BibTeX, JAbbrev, NetQInfo, RegExp }; c2bEditor(const QString& file, const Mode mode, QWidget* main, QWidget* parentw = 0); c2bEditor(const QString& file, bibSearcher* searcher, QWidget* main, QWidget* parentw = 0); ~c2bEditor(); inline QString editorFilename() const { return _editor_fn; } bool closeEditor(); signals: void editFileRenamed(const QString& old_name, const QString& new_name); void execute(); void openBookmarks(); void openFile(const QString& fn); void restartEngine(); void restartQuery(); public slots: void showMessage(const QString& ms); void showMessage(const QUrl& link); protected: virtual void closeEvent(QCloseEvent* qevent); protected slots: bool fileSave(); bool fileSaveAs(); void cursorPositionChanged(); void exportEntries(); void fileOpen(); void helpCb2Bib(); void helpEditor(); void htmlView(); void isModified(int position, int charsRemoved, int charsAdded); void journalsToAbbreviated(); void journalsToAlternateAbbreviated(); void journalsToAlternateFull(); void journalsToFull(); void load(); void overwriteModeChanged(); void pasteCurrentBibTeX(); void postProcess(); void reload(const QString& fn); void saveAndExecute(); void setViewMode(bool edit_mode); void updateMetadata(); void viewCb2Bib(); private: Mode _editor_mode; QDockWidget* _dockWidgetP; QLabel* _lineLabelP; QLabel* _overwriteLabelP; QPointer<bibSearcher> _searcherP; QStackedWidget* _stackedWidgetP; QString _edit_reference_at_position; QString _editor_fn; QSyntaxHighlighter* _shP; QWidget* _c2b_mainP; Ui::c2bEditor ui; bool _is_modified_by_user; c2bBibParser* _bpP; c2bReferenceList* _referencesP; c2bSettings* _settingsP; c2bTextBrowser* _browserP; c2bTextEdit* _editorP; findDialog* _textFinderP; void createReferenceList(); void importActions(); void initEditor(); void setEditorMode(); QMenu* createPopupMenu() // to avoid default context menu { return 0; } }; #endif �����������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bUpdateMetadata.cpp���������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016465� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.482763739 30 atime=1762812828.042759324 30 ctime=1762812827.482763739 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bUpdateMetadata.cpp��������������������������������������������������������������0000644�0001750�0000144�00000015776�15104461633�020476� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bUpdateMetadata.h" #include "c2b.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QPushButton> #include <QTimer> c2bUpdateMetadata::c2bUpdateMetadata(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("Documents Updating Log - cb2Bib")); ui.Log->setFont(c2bSettingsP->c2bMonoFont); ui.Log->setLineWrapMode(QPlainTextEdit::NoWrap); _buttonAbort = new QPushButton(tr("Abort")); ui.buttonBox->addButton(_buttonAbort, QDialogButtonBox::ActionRole); connect(_buttonAbort, SIGNAL(clicked()), this, SLOT(aborted())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); resize(c2bSettingsP->value("c2bLogWidget/size", size()).toSize()); _bpP = c2b::bibParser(); } c2bUpdateMetadata::~c2bUpdateMetadata() { c2bSettingsP->setValue("c2bLogWidget/size", size()); } void c2bUpdateMetadata::update(const QString& fn, const QString& bibtex) { ui.Log->clear(); _fn = fn; _bibtex = bibtex; QTimer::singleShot(500, this, SLOT(update())); QDialog::exec(); } void c2bUpdateMetadata::update() { ui.Log->appendPlainText(tr("[cb2bib] Updating documents metadata...\n")); const QString exiftool_bin(c2bSettingsP->fileName("cb2Bib/ExifToolBin")); if (exiftool_bin.isEmpty()) { ui.Log->appendPlainText(tr("[cb2bib] ExifTool location has not been specified.")); return; } const QFileInfo exiftool_bin_fi(exiftool_bin); if (exiftool_bin_fi.isAbsolute()) if (!exiftool_bin_fi.exists()) { ui.Log->appendPlainText(tr("[cb2bib] ExifTool file %1 does not exist.").arg(exiftool_bin)); return; } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(false); _buttonAbort->setEnabled(true); _buttonAbort->setFocus(); _aborted = false; ui.Log->appendPlainText(tr("[cb2bib] Processing file %1...\n").arg(_fn)); int doc_counter(0); int error_counter(0); int updated_counter(0); metadataParser* mp = c2b::metaParser(); bibReference ref; _bpP->initReferenceParsing(_fn, _bpP->bibliographicFields(), &ref); while (_bpP->referencesIn(_bibtex, &ref) && !_aborted) { QCoreApplication::processEvents(); const QString file(ref.value("file")); if (file.isEmpty()) { ui.Log->appendPlainText(tr("[cb2bib] %1: No file in reference.").arg(ref.citeidName)); continue; } QFileInfo fi(file); if (!fi.exists()) { ui.Log->appendPlainText(tr("[cb2bib] %1: Warning: File %2 does not exist.").arg(ref.citeidName, file)); continue; } ++doc_counter; bibReference mref; const bool has_reference(mp->metadata(file, &mref)); if (has_reference) if (!needsUpdating(ref, mref)) continue; if (!fi.isWritable()) { ++error_counter; ui.Log->appendPlainText(tr("[cb2bib] %1: Error: File %2 is not writable.").arg(ref.citeidName, file)); continue; } QString error_str; if (mp->insertMetadata(ref, file, &error_str, has_reference)) { if (mp->metadata(file, &mref)) if (!needsUpdating(ref, mref)) { ++updated_counter; ui.Log->appendPlainText(tr("[cb2bib] %1: File %2 successfully updated.").arg(ref.citeidName, file)); continue; } ++error_counter; ui.Log->appendPlainText( tr("[cb2bib] %1: Warning: File %2 was not properly updated.").arg(ref.citeidName, file)); writeDifferences(ref, mref); } else { ++error_counter; ui.Log->appendPlainText(tr("[cb2bib] %1: Error: File %2 could not be updated.").arg(ref.citeidName, file)); ui.Log->appendPlainText(tr("[exiftool] '%1'.").arg(error_str)); } QCoreApplication::processEvents(); } QApplication::restoreOverrideCursor(); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); _buttonAbort->setEnabled(false); ui.Log->appendPlainText(tr("\n[cb2bib] Checked %1 documents.").arg(doc_counter)); if (doc_counter > 0 && updated_counter == 0 && error_counter == 0) ui.Log->appendPlainText(tr("[cb2bib] Documents Metadata was up to date.")); else ui.Log->appendPlainText(tr("[cb2bib] Updated %1 documents.").arg(updated_counter)); if (error_counter > 0) ui.Log->appendPlainText(tr("[cb2bib] Found %1 errors.").arg(error_counter)); c2b::showMessage(tr("Updated %1 documents.").arg(updated_counter)); } bool c2bUpdateMetadata::needsUpdating(const bibReference& ref, const bibReference& mref) { if (ref.typeName != mref.typeName) return true; const QStringList& bibliographicFields = _bpP->bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) { const QString key(bibliographicFields.at(i)); if (key == "file") continue; else if (key == "id") continue; QString value(ref.value(key)); c2bUtils::fullBibToC2b(value); if (key == "title" || key == "booktitle") c2bUtils::cleanTitle(value); if (value != mref.value(key)) return true; } return false; } void c2bUpdateMetadata::writeDifferences(const bibReference& ref, const bibReference& mref) { const QString diff(" [Key] '%1'\n [In Reference] '%2'\n [In Document] '%3'"); if (ref.typeName != mref.typeName) ui.Log->appendPlainText(diff.arg("type", ref.typeName, mref.typeName)); const QStringList& bibliographicFields = _bpP->bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) { const QString key(bibliographicFields.at(i)); if (key == "file") continue; else if (key == "id") continue; QString value(ref.value(key)); c2bUtils::fullBibToC2b(value); if (key == "title" || key == "booktitle") c2bUtils::cleanTitle(value); if (value != mref.value(key)) ui.Log->appendPlainText(diff.arg(key, value, mref.value(key))); } } void c2bUpdateMetadata::aborted() { _aborted = true; _buttonAbort->setEnabled(false); ui.Log->appendPlainText(tr("\n\n[cb2bib] Aborted.\n")); } void c2bUpdateMetadata::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/bibeditor/#update-documents-metadata"); } ��cb2bib-2.0.3/src/PaxHeaders/c2bBibPreparserLog.cpp��������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016623� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.378764559 29 atime=1762812827.99875967 30 ctime=1762812827.378764559 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bBibPreparserLog.cpp�������������������������������������������������������������0000644�0001750�0000144�00000003723�15104461633�020622� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bBibPreparserLog.h" #include "c2b.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QCheckBox> #include <QPushButton> c2bBibPreparserLog::c2bBibPreparserLog(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("Clipboard Preparsing Log - cb2Bib")); PreparserShowLog = new QCheckBox(); PreparserShowLog->setObjectName(QString::fromUtf8("PreparserShowLog")); PreparserShowLog->setLayoutDirection(Qt::RightToLeft); PreparserShowLog->setText(QApplication::translate("c2bBibPreparserLog", "Do not show log", 0)); ui.buttonBox->addButton(PreparserShowLog, QDialogButtonBox::ActionRole); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); connect(this, SIGNAL(finished(int)), this, SLOT(close())); } c2bBibPreparserLog::~c2bBibPreparserLog() {} void c2bBibPreparserLog::append(const QString& ms) { ui.Log->appendPlainText(ms); } void c2bBibPreparserLog::show() { resize(c2bSettingsP->value("c2bLogWidget/size", size()).toSize()); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); QDialog::show(); } void c2bBibPreparserLog::closeEvent(QCloseEvent* qevent) { ui.Log->clear(); if (PreparserShowLog->isChecked()) c2bSettingsP->setValue("cb2Bib/PreparserShowLog", false); PreparserShowLog->setChecked(false); c2bSettingsP->setValue("c2bLogWidget/size", size()); qevent->accept(); } void c2bBibPreparserLog::help() { c2bUtils::displayHelp("https://www.molspaces.com/cb2bib/doc/overview/#additional-keyboard-functionality"); } ���������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bUpdateMetadata.h�����������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016132� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.626762604 30 atime=1762812828.042759324 30 ctime=1762812827.626762604 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bUpdateMetadata.h����������������������������������������������������������������0000644�0001750�0000144�00000002110�15104461633�020115� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BUPDATEMETADATA_H #define C2BUPDATEMETADATA_H #include "ui_c2bLogWidget.h" #include <QDialog> class bibReference; class c2bBibParser; class c2bUpdateMetadata : public QDialog { Q_OBJECT public: explicit c2bUpdateMetadata(QWidget* parentw = 0); ~c2bUpdateMetadata(); void update(const QString& fn, const QString& bibtex); private slots: void aborted(); void help(); void update(); private: QPushButton* _buttonAbort; QString _bibtex; QString _fn; Ui::c2bLogWidget ui; bool _aborted; bool needsUpdating(const bibReference& ref, const bibReference& mref); c2bBibParser* _bpP; void writeDifferences(const bibReference& ref, const bibReference& mref); }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bExportDialog.h�������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015650� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.570763045 30 atime=1762812828.042759324 30 ctime=1762812827.570763045 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bExportDialog.h������������������������������������������������������������������0000644�0001750�0000144�00000002004�15104461633�017635� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BEXPORTDIALOG_H #define C2BEXPORTDIALOG_H #include "c2bExport.h" #include "ui_c2bExportDialog.h" #include <QDialog> class c2bSettings; class c2bExportDialog : public QDialog { Q_OBJECT public: c2bExportDialog(const QString& fn, const QString& contents, const QStringList& keys, QWidget* parentw = 0); ~c2bExportDialog(); inline const QString exportFilename() const { return ui.ExportFile->text(); } private: Ui::c2bExportDialog ui; c2bExport::export_data _ed; c2bSettings* settings; private slots: void _export(); void getDocumentsDirectory(); void getExportFile(); void help(); }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bBibMenu.cpp����������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�015122� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.374764591 29 atime=1762812827.99875967 30 ctime=1762812827.374764591 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bBibMenu.cpp���������������������������������������������������������������������0000644�0001750�0000144�00000013163�15104461633�017120� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bBibMenu.h" #include <cb2bib_parameters.h> #include <QKeyEvent> c2bBibMenu::c2bBibMenu(QWidget* parentw) : QMenu(parentw), _keyboard_selection(0), _was_plus_pressed(false) { _title_action = addAction("Title"); _title_action->setData("title"); _author_action = addAction("Author"); _author_action->setData("author"); _add_author_action = addAction("Add authors"); _add_author_action->setIcon(QIcon(C2B_ICON_DIR + "add.png")); _journal_action = addAction("Journal"); _journal_action->setData("journal"); addSeparator(); _pages_action = addAction("Pages"); _pages_action->setData("pages"); _volume_action = addAction("Volume"); _volume_action->setData("volume"); _number_action = addAction("Number"); _number_action->setData("number"); _year_action = addAction("Year"); _year_action->setData("year"); addSeparator(); _abstract_action = addAction("Abstract"); _abstract_action->setData("abstract"); _keywords_action = addAction("Keywords"); _keywords_action->setData("keywords"); _file_action = addAction("File"); _file_action->setData("file"); QMenu* submenu = new QMenu("Other fields...", this); _address_action = submenu->addAction("Address"); _address_action->setData("address"); _annote_action = submenu->addAction("Annote"); _annote_action->setData("annote"); _booktitle_action = submenu->addAction("Booktitle"); _booktitle_action->setData("booktitle"); _chapter_action = submenu->addAction("Chapter"); _chapter_action->setData("chapter"); _doi_action = submenu->addAction("DOI"); _doi_action->setData("doi"); _edition_action = submenu->addAction("Edition"); _edition_action->setData("edition"); _editor_action = submenu->addAction("Editor"); _editor_action->setData("editor"); _add_editor_action = submenu->addAction("Add editors"); _add_editor_action->setIcon(QIcon(C2B_ICON_DIR + "add.png")); _eprint_action = submenu->addAction("Eprint"); _eprint_action->setData("eprint"); _institution_action = submenu->addAction("Institution"); _institution_action->setData("institution"); _isbn_action = submenu->addAction("ISBN"); _isbn_action->setData("isbn"); _issn_action = submenu->addAction("ISSN"); _issn_action->setData("issn"); _month_action = submenu->addAction("Month"); _month_action->setData("month"); _note_action = submenu->addAction("Note"); _note_action->setData("note"); _organization_action = submenu->addAction("Organization"); _organization_action->setData("organization"); _publisher_action = submenu->addAction("Publisher"); _publisher_action->setData("publisher"); _school_action = submenu->addAction("School"); _school_action->setData("school"); _series_action = submenu->addAction("Series"); _series_action->setData("series"); _url_action = submenu->addAction("URL"); _url_action->setData("url"); addSeparator(); addMenu(submenu); addSeparator(); _any_pattern_action = addAction(QString()); } QAction* c2bBibMenu::exec(const QPoint& p) { _keyboard_selection = 0; _was_plus_pressed = false; QAction* a = QMenu::exec(p); if (a) return a; else return _keyboard_selection; } void c2bBibMenu::keyPressEvent(QKeyEvent* qevent) { switch (qevent->key()) { case Qt::Key_A: if (_was_plus_pressed) _keyboard_selection = _add_author_action; else _keyboard_selection = _author_action; break; case Qt::Key_B: _keyboard_selection = _booktitle_action; break; case Qt::Key_C: _keyboard_selection = _chapter_action; break; case Qt::Key_D: _keyboard_selection = _doi_action; break; case Qt::Key_E: if (_was_plus_pressed) _keyboard_selection = _add_editor_action; else _keyboard_selection = _editor_action; break; case Qt::Key_F: _keyboard_selection = _file_action; break; case Qt::Key_I: _keyboard_selection = _isbn_action; break; case Qt::Key_J: _keyboard_selection = _journal_action; break; case Qt::Key_K: _keyboard_selection = _keywords_action; break; case Qt::Key_M: _keyboard_selection = _month_action; break; case Qt::Key_N: _keyboard_selection = _number_action; break; case Qt::Key_O: _keyboard_selection = _organization_action; break; case Qt::Key_P: _keyboard_selection = _pages_action; break; case Qt::Key_S: _keyboard_selection = _series_action; break; case Qt::Key_T: _keyboard_selection = _title_action; break; case Qt::Key_U: _keyboard_selection = _url_action; break; case Qt::Key_V: _keyboard_selection = _volume_action; break; case Qt::Key_Y: _keyboard_selection = _year_action; break; case Qt::Key_Plus: _was_plus_pressed = true; break; default: _keyboard_selection = 0; _was_plus_pressed = false; } if (_keyboard_selection) { qevent->accept(); hide(); _keyboard_selection->trigger(); } else QMenu::keyPressEvent(qevent); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bBibPreparserLog.h����������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016271� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.522763424 30 atime=1762812828.042759324 30 ctime=1762812827.526763392 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bBibPreparserLog.h���������������������������������������������������������������0000644�0001750�0000144�00000001535�15104461633�020266� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BBIBPREPARSERLOG_H #define C2BBIBPREPARSERLOG_H #include "ui_c2bLogWidget.h" #include <QDialog> class QCheckBox; class c2bBibPreparserLog : public QDialog { Q_OBJECT public: explicit c2bBibPreparserLog(QWidget* parentw = 0); ~c2bBibPreparserLog(); void append(const QString& ms); public slots: void show(); protected slots: void help(); private: QCheckBox* PreparserShowLog; Ui::c2bLogWidget ui; void closeEvent(QCloseEvent* qevent); }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bBibMenu.h������������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�014570� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.518763455 30 atime=1762812828.042759324 30 ctime=1762812827.522763424 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bBibMenu.h�����������������������������������������������������������������������0000644�0001750�0000144�00000003757�15104461633�016575� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BBIBMENU_H #define C2BBIBMENU_H #include <QMenu> class c2bBibMenu : public QMenu { Q_OBJECT public: explicit c2bBibMenu(QWidget* parentw = 0); inline ~c2bBibMenu() {} inline QAction* addAuthorAction() const { return _add_author_action; } inline QAction* addEditorAction() const { return _add_editor_action; } inline QAction* anyPatternAction() const { return _any_pattern_action; } inline void setAnyPatternText(const QString& text) { _any_pattern_action->setText(text); } QAction* exec(const QPoint& p); protected: void keyPressEvent(QKeyEvent* qevent); private: QAction* _abstract_action; QAction* _add_author_action; QAction* _add_editor_action; QAction* _address_action; QAction* _annote_action; QAction* _any_pattern_action; QAction* _author_action; QAction* _booktitle_action; QAction* _chapter_action; QAction* _doi_action; QAction* _edition_action; QAction* _editor_action; QAction* _eprint_action; QAction* _file_action; QAction* _institution_action; QAction* _isbn_action; QAction* _issn_action; QAction* _journal_action; QAction* _keyboard_selection; QAction* _keywords_action; QAction* _month_action; QAction* _note_action; QAction* _number_action; QAction* _organization_action; QAction* _pages_action; QAction* _publisher_action; QAction* _school_action; QAction* _series_action; QAction* _title_action; QAction* _url_action; QAction* _volume_action; QAction* _year_action; bool _was_plus_pressed; }; #endif �����������������cb2bib-2.0.3/src/PaxHeaders/c2bShortcutWidget.h�����������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016226� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.618762667 30 atime=1762812828.042759324 30 ctime=1762812827.618762667 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bShortcutWidget.h����������������������������������������������������������������0000644�0001750�0000144�00000002437�15104461633�020225� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSHORTCUTWIDGET_H #define C2BSHORTCUTWIDGET_H #include "ui_c2bShortcutWidget.h" #include <QHash> #include <QWidget> class c2bSettings; class c2bShortcutWidget : public QWidget { Q_OBJECT public: explicit c2bShortcutWidget(QWidget* parentw = 0); inline ~c2bShortcutWidget() {} void setShortcutNames(const QString& path, const QStringList& fullnames); inline const QHash<QString, QKeySequence>& modifiedKeysequences() const { return _modified_keysequences; } signals: void statusMessage(const QString& ms); private slots: void currentTextChanged(const QString& text); void shortcutChanged(const QKeySequence& oldks, const QKeySequence& newks); private: QHash<QString, QKeySequence> _modified_keysequences; QList<QKeySequence> _standard_keysequences; QString _shortcut_path; QStringList _fullnames; Ui::c2bShortcutWidget ui; c2bSettings* _settingsP; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bShortcutPushButton.cpp�����������������������������������������������0000644�0000000�0000000�00000000132�15104461633�017451� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.470763833 30 atime=1762812828.042759324 30 ctime=1762812827.470763833 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bShortcutPushButton.cpp����������������������������������������������������������0000644�0001750�0000144�00000002677�15104461633�021456� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bShortcutPushButton.h" #include <QKeyEvent> void c2bShortcutPushButton::setKeysequence(const QKeySequence& ks) { _keysequence = ks; const QString bt(_keysequence.toString(QKeySequence::NativeText)); setText(bt.isEmpty() ? tr("None") : bt); setChecked(false); } void c2bShortcutPushButton::clear() { _set_keysequence(QKeySequence()); } void c2bShortcutPushButton::reset() { _set_keysequence(_default_keysequence); } void c2bShortcutPushButton::keyPressEvent(QKeyEvent* qevent) { const int k(qevent->key()); // This function is based on GPL configdialog.cpp // Copyright (C) 2003-2007 by Pascal Brachet, http://www.xm1math.net/texmaker/ if ((qevent->modifiers() != 0 && k != Qt::Key_Enter && k != Qt::Key_Alt && k != Qt::Key_Shift && k != Qt::Key_Control && k != Qt::Key_AltGr && k != Qt::Key_Meta && k != 0 && k != Qt::Key_Super_L && k != Qt::Key_Super_R) || (k >= Qt::Key_F1 && k <= Qt::Key_F35)) { _set_keysequence(QKeySequence(qevent->modifiers() | k)); return; } QPushButton::keyPressEvent(qevent); } �����������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/xml���������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013231� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/xml/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�015272� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/xml/PaxHeaders/ExifTool_config�����������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016307� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/xml/ExifTool_config����������������������������������������������������������������0000644�0001750�0000144�00000001761�15104461330�020300� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%Image::ExifTool::UserDefined::BibTeX = ( GROUPS => { 0 => 'XMP', 1 => 'XMP-bibtex', 2 => 'Reference' }, NAMESPACE => { 'bibtex' => 'https://www.molspaces.com/cb2bib' }, WRITABLE => 'string', type => { }, abstract => { }, address => { }, annote => { }, author => { }, booktitle => { }, chapter => { }, doi => { }, edition => { }, editor => { }, eprint => { }, file => { }, institution => { }, isbn => { }, issn => { }, journal => { }, keywords => { }, month => { }, note => { }, number => { }, organization => { }, pages => { }, publisher => { }, school => { }, series => { }, title => { }, url => { }, volume => { }, year => { }, ); %Image::ExifTool::UserDefined = ( 'Image::ExifTool::XMP::Main' => { bibtex => { SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::BibTeX', }, }, }, ); 1; ���������������cb2bib-2.0.3/src/xml/PaxHeaders/cb2bib.xmp����������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015157� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/xml/cb2bib.xmp���������������������������������������������������������������������0000644�0001750�0000144�00000000727�15104461330�017151� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='cb2Bib'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:bibtex='https://www.molspaces.com/cb2bib'> GET_BIBTEX_TAGS</rdf:Description> <rdf:Description rdf:about='' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> <pdf:Author>GET_FORMATTED_AUTHOR</pdf:Author> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> �����������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bCiterModel.h���������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015276� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.534763329 30 atime=1762812828.042759324 30 ctime=1762812827.534763329 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bCiterModel.h��������������������������������������������������������������������0000644�0001750�0000144�00000017126�15104461633�017276� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITERMODEL_H #define C2BCITERMODEL_H #include "c2bCiter.h" #include "c2bCiterHistory.h" #include <cb2bib_utilities.h> #include <collectionAnalyzer.h> #include <QAbstractTableModel> #include <QColor> #include <QHash> #include <QRegExp> #include <QStringList> #include <QVector> class c2bCiterModel : public QAbstractTableModel { Q_OBJECT public: explicit c2bCiterModel(QObject* parento = 0); inline ~c2bCiterModel() {} QList<int> sizeHintForColumns() const; QStringList dataSelectedCiteIds() const; QVariant data(const QModelIndex& i, int role = Qt::DisplayRole) const; c2bCiter::State currentState(const QModelIndex& current_index) const; void clearCurrentFilter(QModelIndex* current_index); void clearSelection(); void loadCitations(const QString& fn); void loadCitations(const QStringList& fns); void reloadCitations(const QStringList& fns, const c2bCiter::State& state, QModelIndex* current_index); void restoreNextState(QModelIndex* current_index); void restorePreviousState(QModelIndex* current_index); void restoreState(const c2bCiter::State& s, QModelIndex* current_index); void setDocumentFilter(const QString& documentfn, QModelIndex* current_index); void setGlossaryView(QModelIndex* current_index); void setKeywordFilter(const QString& keyword, QModelIndex* current_index); void setPatternFilter(const QString& pattern, QModelIndex* current_index, const c2bCiter::Format format); void setRelatedFilter(const QString& documentfn, QModelIndex* current_index, const c2bCiter::Format format = c2bCiter::R); void setSelectedFilter(QModelIndex* current_index); void updateFormat(const c2bCiter::Format format, QModelIndex* current_index); inline QString dataBibTeXPosition(const QModelIndex& i) const { if (_is_index_valid(i)) return _bibtex_position.at(_offset(i.row())); else return QString(); } inline QString dataBibTeXFile(const QModelIndex& i) const { return c2bUtils::removed(dataBibTeXPosition(i), QRegExp(":(\\d+)$")); } inline QString dataFile(const QModelIndex& i) const { if (_is_index_valid(i)) return _file.key(_offset(i.row())); else return QString(); } inline QString dataUrl(const QModelIndex& i) const { if (_is_index_valid(i)) return _url.at(_offset(i.row())); else return QString(); } inline QString dataKeyword(const QModelIndex& i) const { if (_format == c2bCiter::K && _is_index_valid(i)) return _analyzer.sentence(_offset(i.row())); else return QString(); } inline c2bCiter::KeywordData keywordData(const QModelIndex& i) const { c2bCiter::KeywordData kd; if (_filter == c2bCiter::Document && _format == c2bCiter::K) { kd.bibtexfn = c2bUtils::removed(_bibtex_position.at(_file.value(_fstring)), QRegExp(":(\\d+)$")); kd.documentfn = _fstring; kd.keyword = dataKeyword(i); } else if (_filter == c2bCiter::Keyword) { kd.bibtexfn = dataBibTeXFile(i); kd.documentfn = dataFile(i); kd.keyword = _fstring; } kd.valid = !kd.bibtexfn.isEmpty() && !kd.documentfn.isEmpty() && !kd.keyword.isEmpty(); return kd; } inline bool isKeywordView() const { return _format == c2bCiter::K; } inline Qt::ItemFlags flags(const QModelIndex& /* i */) const { return Qt::ItemIsSelectable | Qt::ItemIsEnabled; } inline int count() const { return _row_count; } inline int rowCount(const QModelIndex& /* parent */ = QModelIndex()) const { return _row_count; } inline int columnCount(const QModelIndex& /* parent */ = QModelIndex()) const { return _column_count; } inline c2bCiter::Filter currentFilter() const { return _filter; } inline c2bCiter::Format currentFormat() const { return _format; } inline c2bCiter::Format lastCitationFormat() const { return _history.lastCitationFormat(); } inline void restoreLastNonKeywordState(QModelIndex* current_index) { restoreState(_history.lastNonKeywordState(), current_index); } inline void restoreLastNonSelectedState(QModelIndex* current_index) { restoreState(_history.lastNonSelectedState(), current_index); } public slots: void selectCitation(const QModelIndex& i); signals: void patternFilterChanged(const QString& pattern); void statusLabel(const QString& label); void statusMessage(const QString& message); private: Q_DISABLE_COPY(c2bCiterModel) QColor _first_column_color; QString _display_ajyt(const int row, const int column) const; QString _display_it(const int row, const int column) const; QString _display_jya(const int row, const int column) const; QString _display_k(const int row, const int column) const; QString _display_r(const int row, const int column) const; QString _display_t(const int row, const int column) const; QString _display_yajt(const int row, const int column) const; QString(c2bCiterModel::*_display_ptr)(const int row, const int column) const; int _current_item(const QString& index_data) const; int _offset(const int i) const; void _add_citations(const QString& fn); void _clear(); void _set_mapping(); void _set_sort_indices(); void _set_table_data(); void _update_current_index(const int current_item, QModelIndex* current_index) const; void _update_format(const c2bCiter::Format format = c2bCiter::AJYT); inline bool _is_index_valid(const QModelIndex& i) const { const int r(i.row()); return _row_count > 0 && r >= 0 && r < _row_count; } inline int _current_item(const QModelIndex& current_index) const { return _is_index_valid(current_index) ? _offset(current_index.row()) : -1; } inline int _current_item(const QModelIndex* const current_index) const { return current_index ? _current_item(*current_index) : -1; } // Collection analyzer helper collectionAnalyzer _analyzer; // History helper QString _fstring; c2bCiter::Filter _filter; c2bCiter::Format _format; c2bCiterHistory _history; // Model data QHash<QString, int> _file; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QList<qint64> _included_date; #else QList<uint> _included_date; #endif QStringList _author_string; QStringList _bibtex_position; QStringList _citeId; QStringList _journal; QStringList _title; QStringList _url; QStringList _year; QVector<QString> _author; QVector<QString> _search_string; QVector<bool> _is_selected; QVector<bool> _matches_filter; QVector<int> _map_ajyt; QVector<int> _map_author; QVector<int> _map_filter; QVector<int> _map_it; QVector<int> _map_jya; QVector<int> _map_t; QVector<int> _map_yajt; QVector<int>* _mapping; int _author_count; int _author_max_length; int _citation_count; int _column_count; int _journal_max_length; int _keyword_count; int _related_count; int _row_count; }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bFileSystemWatcher.h��������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�016651� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.574763013 30 atime=1762812828.042759324 30 ctime=1762812827.574763013 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bFileSystemWatcher.h�������������������������������������������������������������0000644�0001750�0000144�00000001777�15104461633�020656� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BFILESYSTEMWATCHER_H #define C2BFILESYSTEMWATCHER_H #include <QFileSystemWatcher> class c2bFileSystemWatcher : public QObject { Q_OBJECT public: explicit c2bFileSystemWatcher(QObject* parento = 0); inline ~c2bFileSystemWatcher() {} inline void addPath(const QString& path) { _filewatcher.addPath(path); } inline void removePath(const QString& path) { _filewatcher.removePath(path); } signals: void fileChanged(const QString& path); private slots: void fileSaved(); void waitForSaved(const QString& path); private: QFileSystemWatcher _filewatcher; QString _path; }; #endif �cb2bib-2.0.3/src/PaxHeaders/c2bSaveRegExp.h���������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015260� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.602762793 30 atime=1762812828.042759324 30 ctime=1762812827.606762761 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bSaveRegExp.h��������������������������������������������������������������������0000644�0001750�0000144�00000002046�15104461633�017253� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSAVEREGEXP_H #define C2BSAVEREGEXP_H #include "ui_c2bSaveRegExp.h" #include <QDialog> #include <QRegExp> class c2bSaveREHighlighter; class c2bSaveRegExp : public QDialog { Q_OBJECT public: c2bSaveRegExp(const QStringList& pattern, const QString& input, QWidget* parentw = 0); ~c2bSaveRegExp(); signals: void savePatternInfo(const QString& rx, const QString& rxname); public slots: void accept(); void help(); void updateInput(const QString& text); private: QRegExp _pattern_rx; QString _input_text; Ui::c2bSaveRegExp ui; c2bSaveREHighlighter* _sreS; private slots: void inputMightHaveChanged(); void setInformation(); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bLineEdit.cpp���������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015277� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.434764117 30 atime=1762812828.042759324 30 ctime=1762812827.434764117 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bLineEdit.cpp��������������������������������������������������������������������0000644�0001750�0000144�00000002044�15104461633�017270� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bLineEdit.h" #include <QAction> #include <QContextMenuEvent> #include <QMenu> c2bLineEdit::c2bLineEdit(QWidget* parentw) : QLineEdit(parentw) {} c2bLineEdit::~c2bLineEdit() {} void c2bLineEdit::contextMenuEvent(QContextMenuEvent* e) { QMenu* menu = QLineEdit::createStandardContextMenu(); QList<QAction*> acts = menu->actions(); QAction* act; act = new QAction("Clear", menu); act->setEnabled(!text().isEmpty()); connect(act, SIGNAL(triggered()), this, SLOT(clear())); menu->insertAction(acts.at(7), act); acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(e->globalPos()); delete menu; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/PaxHeaders/c2bSettings.h�����������������������������������������������������������0000644�0000000�0000000�00000000132�15104461633�015047� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.614762698 30 atime=1762812828.042759324 30 ctime=1762812827.614762698 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/src/c2bSettings.h����������������������������������������������������������������������0000644�0001750�0000144�00000004112�15104461633�017036� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2025 by Pere Constans * constans@molspaces.com * cb2Bib version 2.0.3. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSETTINGS_H #define C2BSETTINGS_H #include "c2bColors.h" #include <settings.h> #include <QFont> #include <QKeySequence> class QAction; class QProgressBar; class QShortcut; class c2bSettings : public settings { Q_OBJECT public: ~c2bSettings(); QFont c2bMonoFont; c2bColors colors; void notify(); void update(); static c2bSettings* initSettings(); void setKeysequence(const QString& fullname, QShortcut* shortcut); void setKeysequence(const QString& path, QAction* action); void setKeysequences(const QHash<QString, QKeySequence>& keysequences); inline QKeySequence keysequence(const QString& fullname) const { return value(fullname).value<QKeySequence>(); } inline QKeySequence defaultKeysequence(const QString& fullname) const { return _default_keysequences.value(fullname); } inline QByteArray ksname(const QString& fullname) const { return value(fullname).value<QKeySequence>().toString(QKeySequence::NativeText).toLatin1(); } inline QStringList shortcutNames() const { return _default_keysequences.keys(); } signals: void newSettings(); private: c2bSettings(const QString& organization, const QString& application, QObject* parento = 0); explicit c2bSettings(const QString& fn, QObject* parento = 0); QMap<QString, QKeySequence> _default_keysequences; QProgressBar* _progress_bar; void init(); void processReferenceFile(); void setDefaults(); #ifdef Q_OS_WIN QString decodeFilename(const QString& fn) const override; #endif private slots: void guiExits(); void processReferenceFileEvent(); }; #define c2bSettingsP (static_cast<c2bSettings*>(settings::instance())) #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/AUTHORS���������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�012767� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.918760301 30 ctime=1762812827.154766325 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/AUTHORS��������������������������������������������������������������������������������0000644�0001750�0000144�00000000016�15104461330�014750� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Pere Constans ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/cb2bib.rc�������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013370� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.178766136 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/cb2bib.rc������������������������������������������������������������������������������0000644�0001750�0000144�00000000107�15104461330�015352� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������IDI_ICON1 ICON DISCARDABLE "src/icons/cb2bib.ico" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/c2bscripts������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013720� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.174766167 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/����������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�015761� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/PaxHeaders/c2bciter���������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015415� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.174766167 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/c2bciter��������������������������������������������������������������������0000755�0001750�0000144�00000001275�15104461330�017411� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #------------------------------------------------------------------------------- # c2bciter -- Wrapper for calling cb2Bib Citer # cb2Bib Tools # Copyright (C) 2004-2025 by Pere Constans # constans@molspaces.com # # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # June 2009: # - Make use of the "$@" argument instead of problematic "$1". # # See the LICENSE file that comes with this distribution #------------------------------------------------------------------------------- # Usage: c2bciter [dirname1 [dirname2 ... ]] # c2bciter [filename1.bib [filename2.bib ... ]] #------------------------------------------------------------------------------- cb2bib --citer "$@" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/PaxHeaders/cb2bib.desktop���������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�016513� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.174766167 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/cb2bib.desktop��������������������������������������������������������������0000644�0001750�0000144�00000000671�15104461330�020503� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Desktop Entry] Comment=Bibliographic Reference Extracting and Managing Tool Comment[ca]=Eina per extreure i gestionar referències bibliogràfiques Exec=cb2bib --bibedit %F GenericName=Bibliographic Reference Tool GenericName[ca]=Eina per a bibliografies Icon=cb2bib MimeType=text/x-bibtex; Name=cb2Bib Path=/usr/bin StartupNotify=true Terminal=false Categories=Office; Type=Application Keywords=bibliography,citations,scientific articles; �����������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/PaxHeaders/c2bciter.desktop�������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017065� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.174766167 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/c2bciter.desktop������������������������������������������������������������0000644�0001750�0000144�00000000640�15104461330�021051� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Desktop Entry] Comment=Bibliographic Reference Citation Tool Comment[ca]=Eina bibliogràfica per escriure citacions Exec=cb2bib --citer %F GenericName=Reference Citation Tool GenericName[ca]=Eina per citacions bibliogràfiques Icon=cb2bib MimeType=text/x-bibtex; Name=c2bCiter Path=/usr/bin StartupNotify=false Terminal=false Categories=Office; Type=Application Keywords=bibliography,citations,scientific articles; ������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/PaxHeaders/c2bimport.desktop������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017271� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.174766167 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/c2bimport.desktop�����������������������������������������������������������0000644�0001750�0000144�00000000613�15104461330�021255� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Desktop Entry] Comment=Download reference to cb2Bib Comment[ca]=Importa referència al cb2Bib Exec=cb2bib --import %f GenericName=cb2Bib Import Reference GenericName[ca]=Importa referència al cb2Bib Icon=cb2bib MimeType=text/x-bibtex;application/x-download;application/bibtex; Name=c2bImport Path=/usr/bin NoDisplay=false StartupNotify=false Terminal=false Categories=Office; Type=Application ���������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/PaxHeaders/c2bimport��������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015621� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812827.994759702 30 ctime=1762812827.174766167 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/c2bscripts/c2bimport�������������������������������������������������������������������0000755�0001750�0000144�00000001473�15104461330�017615� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #------------------------------------------------------------------------------- # c2bimport -- Script for calling cb2Bib in "Download Reference to cb2Bib" mode # cb2Bib Tools # Copyright (C) 2004-2025 by Pere Constans # constans@molspaces.com # # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # June 2009: # - Make use of quoted "$1" argument instead of $1. # # See the LICENSE file that comes with this distribution #------------------------------------------------------------------------------- # Usage: c2bimport tmp_imported_reference_file #------------------------------------------------------------------------------- if test "$#" != 1; then cat <<EOF Script for calling cb2Bib in "Download Reference to cb2Bib" mode Usage: $0 tmp_imported_reference_file EOF exit 2 fi cb2bib --import "$1" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/xpdf������������������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�012603� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/����������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�014644� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/PaxHeaders/pdftohtml.cc�����������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�015170� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/pdftohtml.cc����������������������������������������������������������������������0000644�0001750�0000144�00000011612�15104461330�017155� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������//======================================================================== // // Modified pdftohtml (constans@molspaces.com, 2014) // // pdftohtml.cc // // Copyright 2005 Glyph & Cog, LLC // //======================================================================== #include <aconf.h> #include <stdio.h> #include <stdlib.h> #include "parseargs.h" #include "gmem.h" #include "gfile.h" #include "GString.h" #include "GlobalParams.h" #include "PDFDoc.h" #include "HTMLGen.h" #include "Error.h" #include "ErrorCodes.h" #include "config.h" //------------------------------------------------------------------------ static int firstPage = 1; static int lastPage = 0; static GBool skipInvisible = gFalse; static char ownerPassword[33] = "\001"; static char userPassword[33] = "\001"; static GBool quiet = gFalse; static char cfgFileName[256] = ""; static GBool printVersion = gFalse; static GBool printHelp = gFalse; static ArgDesc argDesc[] = { { "-f", argInt, &firstPage, 0, "first page to convert" }, { "-l", argInt, &lastPage, 0, "last page to convert" }, { "-skipinvisible", argFlag, &skipInvisible, 0, "do not draw invisible text" }, { "-opw", argString, ownerPassword, sizeof(ownerPassword), "owner password (for encrypted files)" }, { "-upw", argString, userPassword, sizeof(userPassword), "user password (for encrypted files)" }, { "-q", argFlag, &quiet, 0, "don't print any messages or errors" }, { "-cfg", argString, cfgFileName, sizeof(cfgFileName), "configuration file to use in place of .xpdfrc" }, { "-v", argFlag, &printVersion, 0, "print copyright and version info" }, { "-h", argFlag, &printHelp, 0, "print usage information" }, { "-help", argFlag, &printHelp, 0, "print usage information" }, { "--help", argFlag, &printHelp, 0, "print usage information" }, { "-?", argFlag, &printHelp, 0, "print usage information" }, {NULL} }; //------------------------------------------------------------------------ static int writeToFile(void* file, const char* data, int size) { return (int)fwrite(data, 1, size, (FILE*)file); } int main(int argc, char* argv[]) { PDFDoc* doc; GString* fileName; GString* ownerPW, *userPW; HTMLGen* htmlGen; GString* htmlFileName; FILE* htmlFile; int pg, err, exitCode; GBool ok; exitCode = 99; // parse args ok = parseArgs(argDesc, &argc, argv); if (!ok || argc != 3 || printVersion || printHelp) { fprintf(stderr, "\npdf2cb (a modified pdftohtml version %s for cb2bib)\n", xpdfVersion); fprintf(stderr, "\n%s\n", xpdfCopyright); if (!printVersion) { printUsage("pdf2cb", "<PDF-file> <TXT-file>", argDesc); } goto err0; } fileName = new GString(argv[1]); htmlFileName = new GString(argv[2]); // read config file globalParams = new GlobalParams(cfgFileName); if (quiet) { globalParams->setErrQuiet(quiet); } globalParams->setupBaseFonts(NULL); globalParams->setTextEncoding("UTF-8"); // open PDF file if (ownerPassword[0] != '\001') ownerPW = new GString(ownerPassword); else ownerPW = NULL; if (userPassword[0] != '\001') userPW = new GString(userPassword); else userPW = NULL; doc = new PDFDoc(fileName, ownerPW, userPW); if (userPW) delete userPW; if (ownerPW) delete ownerPW; if (!doc->isOk()) { exitCode = 1; goto err1; } // check for copy permission if (!doc->okToCopy()) { error(errNotAllowed, -1, "Copying of text from this document is not allowed."); exitCode = 3; goto err1; } // get page range if (firstPage < 1) { firstPage = 1; } if (lastPage < 1 || lastPage > doc->getNumPages()) { lastPage = doc->getNumPages(); } // set up the HTMLGen object htmlGen = new HTMLGen(); if (!htmlGen->isOk()) { exitCode = 99; goto err1; } htmlGen->setDrawInvisibleText(!skipInvisible); htmlGen->startDoc(doc); if (!(htmlFile = fopen(htmlFileName->getCString(), "wb"))) { error(errIO, -1, "Couldn't open TXT file '{0:t}'", htmlFileName); goto err2; } // convert the pages for (pg = firstPage; pg <= lastPage; ++pg) { err = htmlGen->convertPage(pg, writeToFile, htmlFile); if (err != errNone) { error(errIO, -1, "Error converting page {0:d}", pg); exitCode = 2; goto err2; } } fclose(htmlFile); exitCode = 0; // clean up err2: delete htmlFileName; delete htmlGen; err1: delete doc; delete globalParams; err0: // check for memory leaks Object::memCheck(stderr); gMemReport(stderr); return exitCode; } ����������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/PaxHeaders/PDF2CB.README����������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014437� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/PDF2CB.README���������������������������������������������������������������������0000644�0001750�0000144�00000000652�15104461330�016426� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ pdf2cb: a modified pdftohtml 3.04 for cb2bib . Separate superscripts to avoid words being joined to reference numbers and author names joined to affiliations' glyphs. Download ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.04.tar.gz Copy/Overwrite: cp pdftohtml.cc xpdf-3.04/xpdf/ cp HTMLGen.cc xpdf-3.04/xpdf/ cp HTMLGen.h xpdf-3.04/xpdf/ cd xpdf-3.04/ ./configure make Rename modified pdftohtml: mv xpdf/pdftohtml ../pdf2cb ��������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/PaxHeaders/COPYING3���������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013776� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/COPYING3��������������������������������������������������������������������������0000644�0001750�0000144�00000104513�15104461330�015766� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/PaxHeaders/README�����������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�013540� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/README����������������������������������������������������������������������������0000644�0001750�0000144�00000035734�15104461330�015540� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Xpdf ==== version 3.04 2014-may-28 The Xpdf software and documentation are copyright 1996-2014 Glyph & Cog, LLC. Email: derekn@foolabs.com WWW: http://www.foolabs.com/xpdf/ The PDF data structures, operators, and specification are copyright 1985-2006 Adobe Systems Inc. What is Xpdf? ------------- Xpdf is an open source viewer for Portable Document Format (PDF) files. (These are also sometimes also called 'Acrobat' files, from the name of Adobe's PDF software.) The Xpdf project also includes a PDF text extractor, PDF-to-PostScript converter, and various other utilities. Xpdf runs under the X Window System on UNIX and OS/2. The non-X components (pdftops, pdftotext, etc.) also run on Windows and Mac OSX systems and should run on pretty much any system with a decent C++ compiler. Xpdf will run on 32-bit and 64-bit machines. License & Distribution ---------------------- Xpdf is licensed under the GNU General Pulbic License (GPL), version 2 or 3. This means that you can distribute derivatives of Xpdf under any of the following: - GPL v2 only - GPL v3 only - GPL v2 or v3 The Xpdf source package includes the text of both GPL versions: COPYING for GPL v2, COPYING3 for GPL v3. Please note that Xpdf is NOT licensed under "any later version" of the GPL, as I have no idea what those versions will look like. If you are redistributing unmodified copies of Xpdf (or any of the Xpdf tools) in binary form, you need to include all of the documentation: README, man pages (or help files), COPYING, and COPYING3. If you want to incorporate the Xpdf source code into another program (or create a modified version of Xpdf), and you are distributing that program, you have two options: release your program under the GPL (v2 and/or v3), or purchase a commercial Xpdf source license. If you're interested in commercial licensing, please see the Glyph & Cog web site: http://www.glyphandcog.com/ Compatibility ------------- Xpdf is developed and tested on Linux. In addition, it has been compiled by others on Solaris, AIX, HP-UX, Digital Unix, Irix, and numerous other Unix implementations, as well as OS/2. It should work on pretty much any system which runs X11 and has Unix-like libraries. You'll need ANSI C++ and C compilers to compile it. The non-X components of Xpdf (pdftops, pdftotext, pdfinfo, pdffonts, pdfdetach, pdftoppm, and pdfimages) can also be compiled on Windows and Mac OSX systems. See the Xpdf web page for details. If you compile Xpdf for a system not listed on the web page, please let me know. If you're willing to make your binary available by ftp or on the web, I'll be happy to add a link from the Xpdf web page. I have decided not to host any binaries I didn't compile myself (for disk space and support reasons). If you can't get Xpdf to compile on your system, send me email and I'll try to help. Xpdf has been ported to the Acorn, Amiga, BeOS, and EPOC. See the Xpdf web page for links. Getting Xpdf ------------ The latest version is available from: http://www.foolabs.com/xpdf/ or: ftp://ftp.foolabs.com/pub/xpdf/ Source code and several precompiled executables are available. Announcements of new versions are posted to comp.text.pdf and emailed to a list of people. If you'd like to receive email notification of new versions, just let me know. Running Xpdf ------------ To run xpdf, simply type: xpdf file.pdf To generate a PostScript file, hit the "print" button in xpdf, or run pdftops: pdftops file.pdf To generate a plain text file, run pdftotext: pdftotext file.pdf There are five additional utilities (which are fully described in their man pages): pdfinfo -- dumps a PDF file's Info dictionary (plus some other useful information) pdffonts -- lists the fonts used in a PDF file along with various information for each font pdfdetach -- lists or extracts embedded files (attachments) from a PDF file pdftoppm -- converts a PDF file to a series of PPM/PGM/PBM-format bitmaps pdfimages -- extracts the images from a PDF file Command line options and many other details are described in the man pages: xpdf(1), etc. All of these utilities read an optional configuration file: see the xpdfrc(5) man page. Upgrading from Xpdf 3.02 (and earlier) -------------------------------------- The font configuration system has been changed. Previous versions used mostly separate commands to configure fonts for display and for PostScript output. As of 3.03, configuration options that make sense for both display and PS output have been unified. The following xpdfrc commands have been removed: * displayFontT1, displayFontTT: replaced with fontFile * displayNamedCIDFontT1, displayNamedCIDFontTT: replaced with fontFile * displayCIDFontT1, displayCIDFontTT: replaced with fontFileCC * psFont: replaced with psResidentFont * psNamedFont16: replaced with psResidentFont16 * psFont16: replaced with psResidentFontCC See the xpdfrc(5) man page for more information on the new commands. Pdftops will now embed external 16-bit fonts (configured with the fontFileCC command) when the PDF file refers to a non-embedded font. It does not do any subsetting (yet), so the resulting PS files will be large. Compiling Xpdf -------------- See the separate file, INSTALL. Bugs ---- If you find a bug in Xpdf, i.e., if it prints an error message, crashes, or incorrectly displays a document, and you don't see that bug listed here, please send me email, with a pointer (URL, ftp site, etc.) to the PDF file. Third-Party Libraries --------------------- Xpdf uses the following libraries: * FreeType [http://www.freetype.org/] * libpng [http://www.libpng.com/pub/png/libpng.html] (used by pdftohtml) * zlib [http://zlib.net/] (used by pdftohtml) Acknowledgments --------------- Thanks to: * Patrick Voigt for help with the remote server code. * Patrick Moreau, Martin P.J. Zinser, and David Mathog for the VMS port. * David Boldt and Rick Rodgers for sample man pages. * Brendan Miller for the icon idea. * Olly Betts for help testing pdftotext. * Peter Ganten for the OS/2 port. * Michael Richmond for the Win32 port of pdftops and pdftotext and the xpdf/cygwin/XFree86 build instructions. * Frank M. Siegert for improvements in the PostScript code. * Leo Smiers for the decryption patches. * Rainer Menzner for creating t1lib, and for helping me adapt it to xpdf. * Pine Tree Systems A/S for funding the OPI and EPS support in pdftops. * Easy Software Products for funding several improvements to the PostScript output code. * Tom Kacvinsky for help with FreeType and for being my interface to the FreeType team. * Theppitak Karoonboonyanan for help with Thai support. * Leonard Rosenthol for help and contributions on a bunch of things. * Alexandros Diamantidis and Maria Adaloglou for help with Greek support. * Lawrence Lai for help with the CJK Unicode maps. Various people have contributed modifications made for use by the pdftex project: * Han The Thanh * Martin Schröder of ArtCom GmbH References ---------- Adobe Systems Inc., _PDF Reference, sixth edition: Adobe Portable Document Format version 1.7_. http://www.adobe.com/devnet/pdf/pdf_reference.html [The manual for PDF version 1.7.] Adobe Systems Inc., "Errata for the PDF Reference, sixth edition, version 1.7", October 16, 2006. http://www.adobe.com/devnet/pdf/pdf_reference.html [The errata for the PDF 1.7 spec.] Adobe Systems Inc., _PostScript Language Reference_, 3rd ed. Addison-Wesley, 1999, ISBN 0-201-37922-8. [The official PostScript manual.] Adobe Systems, Inc., _The Type 42 Font Format Specification_, Adobe Developer Support Technical Specification #5012. 1998. http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf [Type 42 is the format used to embed TrueType fonts in PostScript files.] Adobe Systems, Inc., _Adobe CMap and CIDFont Files Specification_, Adobe Developer Support Technical Specification #5014. 1995. http://www.adobe.com/supportservice/devrelations/PDFS/TN/5014.CIDFont_Spec.pdf [CMap file format needed for Japanese and Chinese font support.] Adobe Systems, Inc., _Adobe-Japan1-4 Character Collection for CID-Keyed Fonts_, Adobe Developer Support Technical Note #5078. 2000. http://partners.adobe.com/asn/developer/PDFS/TN/5078.CID_Glyph.pdf [The Adobe Japanese character set.] Adobe Systems, Inc., _Adobe-GB1-4 Character Collection for CID-Keyed Fonts_, Adobe Developer Support Technical Note #5079. 2000. http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf [The Adobe Chinese GB (simplified) character set.] Adobe Systems, Inc., _Adobe-CNS1-3 Character Collection for CID-Keyed Fonts_, Adobe Developer Support Technical Note #5080. 2000. http://partners.adobe.com/asn/developer/PDFS/TN/5080.CNS_CharColl.pdf [The Adobe Chinese CNS (traditional) character set.] Adobe Systems Inc., _Supporting the DCT Filters in PostScript Level 2_, Adobe Developer Support Technical Note #5116. 1992. http://www.adobe.com/supportservice/devrelations/PDFS/TN/5116.PS2_DCT.PDF [Description of the DCTDecode filter parameters.] Adobe Systems Inc., _Open Prepress Interface (OPI) Specification - Version 2.0_, Adobe Developer Support Technical Note #5660. 2000. http://partners.adobe.com/asn/developer/PDFS/TN/5660.OPI_2.0.pdf Adobe Systems Inc., CMap files. ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ [The actual CMap files for the 16-bit CJK encodings.] Adobe Systems Inc., Unicode glyph lists. http://partners.adobe.com/asn/developer/type/unicodegn.html http://partners.adobe.com/asn/developer/type/glyphlist.txt http://partners.adobe.com/asn/developer/type/corporateuse.txt http://partners.adobe.com/asn/developer/type/zapfdingbats.txt [Mappings between character names to Unicode.] Adobe Systems Inc., OpenType Specification v. 1.4. http://partners.adobe.com/public/developer/opentype/index_spec.html [The OpenType font format spec.] Aldus Corp., _OPI: Open Prepress Interface Specification 1.3_. 1993. http://partners.adobe.com/asn/developer/PDFS/TN/OPI_13.pdf Anonymous, RC4 source code. ftp://ftp.ox.ac.uk/pub/crypto/misc/rc4.tar.gz ftp://idea.sec.dsi.unimi.it/pub/crypt/code/rc4.tar.gz [This is the algorithm used to encrypt PDF files.] T. Boutell, et al., "PNG (Portable Network Graphics) Specification, Version 1.0". RFC 2083. [PDF uses the PNG filter algorithms.] CCITT, "Information Technology - Digital Compression and Coding of Continuous-tone Still Images - Requirements and Guidelines", CCITT Recommendation T.81. http://www.w3.org/Graphics/JPEG/ [The official JPEG spec.] A. Chernov, "Registration of a Cyrillic Character Set". RFC 1489. [Documentation for the KOI8-R Cyrillic encoding.] Roman Czyborra, "The ISO 8859 Alphabet Soup". http://czyborra.com/charsets/iso8859.html [Documentation on the various ISO 859 encodings.] L. Peter Deutsch, "ZLIB Compressed Data Format Specification version 3.3". RFC 1950. [Information on the general format used in FlateDecode streams.] L. Peter Deutsch, "DEFLATE Compressed Data Format Specification version 1.3". RFC 1951. [The definition of the compression algorithm used in FlateDecode streams.] Morris Dworkin, "Recommendation for Block Cipher Modes of Operation", National Institute of Standards, NIST Special Publication 800-38A, 2001. [The cipher block chaining (CBC) mode used with AES in PDF files.] Federal Information Processing Standards Publication 197 (FIPS PUBS 197), "Advanced Encryption Standard (AES)", November 26, 2001. [AES encryption, used in PDF 1.6.] Jim Flowers, "X Logical Font Description Conventions", Version 1.5, X Consortium Standard, X Version 11, Release 6.1. ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/XLFD/xlfd.PS.Z [The official specification of X font descriptors, including font transformation matrices.] Foley, van Dam, Feiner, and Hughes, _Computer Graphics: Principles and Practice_, 2nd ed. Addison-Wesley, 1990, ISBN 0-201-12110-7. [Colorspace conversion functions, Bezier spline math.] Robert L. Hummel, _Programmer's Technical Reference: Data and Fax Communications_. Ziff-Davis Press, 1993, ISBN 1-56276-077-7. [CCITT Group 3 and 4 fax decoding.] ISO/IEC, _Information technology -- Lossy/lossless coding of bi-level images_. ISO/IEC 14492, First edition (2001-12-15). http://webstore.ansi.org/ [The official JBIG2 standard. The final draft of this spec is available from http://www.jpeg.org/jbighomepage.html.] ISO/IEC, _Information technology -- JPEG 2000 image coding system -- Part 1: Core coding system_. ISO/IEC 15444-1, First edition (2000-12-15). http://webstore.ansi.org/ [The official JPEG 2000 standard. The final committee draft of this spec is available from http://www.jpeg.org/JPEG2000.html, but there were changes made to the bitstream format between that draft and the published spec.] ITU, "Standardization of Group 3 facsimile terminals for document transmission", ITU-T Recommendation T.4, 1999. ITU, "Facsimile coding schemes and coding control functions for Group 4 facsimile apparatus", ITU-T Recommendation T.6, 1993. http://www.itu.int/ [The official Group 3 and 4 fax standards - used by the CCITTFaxDecode stream, as well as the JBIG2Decode stream.] B. Kaliski, "PKCS #5: Password-Based Cryptography Specification, Version 2.0". RFC 2898. [Defines the padding scheme used with AES encryption in PDF files.] Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, "Practical Fast 1-D DCT Algorithms with 11 Multiplications". IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, 988-991. [The fast IDCT algorithm used in the DCTDecode filter.] Microsoft, _TrueType 1.0 Font Files_, rev. 1.66. 1995. http://www.microsoft.com/typography/tt/tt.htm [The TrueType font spec (in MS Word format, naturally).] V. Ostromoukhov, R.D. Hersch, "Stochastic Clustered-Dot Dithering", Conf. Color Imaging: Device-Independent Color, Color Hardcopy, and Graphic Arts IV, 1999, SPIE Vol. 3648, 496-505. http://diwww.epfl.ch/w3lsp/publications/colour/scd.html [The stochastic dithering algorithm used in Xpdf.] P. Peterlin, "ISO 8859-2 (Latin 2) Resources". http://sizif.mf.uni-lj.si/linux/cee/iso8859-2.html [This is a web page with all sorts of useful Latin-2 character set and font information.] Charles Poynton, "Color FAQ". http://www.inforamp.net/~poynton/ColorFAQ.html [The mapping from the CIE 1931 (XYZ) color space to RGB.] R. Rivest, "The MD5 Message-Digest Algorithm". RFC 1321. [MD5 is used in PDF document encryption.] Thai Industrial Standard, "Standard for Thai Character Codes for Computers", TIS-620-2533 (1990). http://www.nectec.or.th/it-standards/std620/std620.htm [The TIS-620 Thai encoding.] Unicode Consortium, "Unicode Home Page". http://www.unicode.org/ [Online copy of the Unicode spec.] W3C Recommendation, "PNG (Portable Network Graphics) Specification Version 1.0". http://www.w3.org/Graphics/PNG/ [Defines the PNG image predictor.] Gregory K. Wallace, "The JPEG Still Picture Compression Standard". ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz [Good description of the JPEG standard. Also published in CACM, April 1991, and submitted to IEEE Transactions on Consumer Electronics.] F. Yergeau, "UTF-8, a transformation format of ISO 10646". RFC 2279. [A commonly used Unicode encoding.] ������������������������������������cb2bib-2.0.3/xpdf/PaxHeaders/HTMLGen.cc�������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014365� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/HTMLGen.cc������������������������������������������������������������������������0000644�0001750�0000144�00000020430�15104461330�016350� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������//======================================================================== // // Modified pdftohtml (constans@molspaces.com, 2014) // // HTMLGen.cc // // Copyright 2010 Glyph & Cog, LLC // //======================================================================== #include <aconf.h> #ifdef USE_GCC_PRAGMAS #pragma implementation #endif #include <stdlib.h> #include "gmem.h" #include "GString.h" #include "GList.h" #include "PDFDoc.h" #include "TextOutputDev.h" #include "SplashOutputDev.h" #include "ErrorCodes.h" #include "HTMLGen.h" #ifdef _WIN32 # define strcasecmp stricmp # define strncasecmp strnicmp #endif //------------------------------------------------------------------------ // Map Unicode indexes from the private use area, following the Adobe // Glyph list. #define privateUnicodeMapStart 0xf6f9 #define privateUnicodeMapEnd 0xf7ff static int privateUnicodeMap[privateUnicodeMapEnd - privateUnicodeMapStart + 1] = { 0x0141, 0x0152, 0, 0, 0x0160, 0, 0x017d, // f6f9 0, 0, 0, 0, 0, 0, 0, 0, // f700 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f710 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0021, 0, 0, 0x0024, 0, 0x0026, 0, // f720 0, 0, 0, 0, 0, 0, 0, 0, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, // f730 0x0038, 0x0039, 0, 0, 0, 0, 0, 0x003f, 0, 0, 0, 0, 0, 0, 0, 0, // f740 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f750 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, // f760 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, // f770 0x0058, 0x0059, 0x005a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f780 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f790 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00a1, 0x00a2, 0, 0, 0, 0, 0, // f7a0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f7b0 0, 0, 0, 0, 0, 0, 0, 0x00bf, 0, 0, 0, 0, 0, 0, 0, 0, // f7c0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f7d0 0, 0, 0, 0, 0, 0, 0, 0, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, // f7e0 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0, // f7f0 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178 }; //------------------------------------------------------------------------ //------------------------------------------------------------------------ HTMLGen::HTMLGen() { TextOutputControl textOutControl; SplashColor paperColor; ok = gTrue; backgroundResolution = 150; drawInvisibleText = gTrue; // set up the TextOutputDev textOutControl.mode = textOutReadingOrder; textOutControl.html = gTrue; textOut = new TextOutputDev(NULL, &textOutControl, gFalse); if (!textOut->isOk()) { ok = gFalse; } // set up the SplashOutputDev paperColor[0] = paperColor[1] = paperColor[2] = 0xff; splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse, paperColor); splashOut->setSkipText(gTrue, gFalse); } HTMLGen::~HTMLGen() { delete textOut; delete splashOut; } void HTMLGen::startDoc(PDFDoc* docA) { doc = docA; splashOut->startDoc(doc->getXRef()); } int HTMLGen::convertPage(int pg, int (*writeHTML)(void* stream, const char* data, int size), void* htmlStream) { TextPage* text; GList* cols, *pars, *lines, *words; TextColumn* col; TextParagraph* par; TextLine* line; TextWord* word1; GString* s; double base; int colIdx, parIdx, lineIdx, wordIdx; int i, u; const char parsep('\n'); // get the PDF text doc->displayPage(textOut, pg, 72, 72, 0, gFalse, gTrue, gFalse); text = textOut->takeText(); // generate the PDF text cols = text->makeColumns(); for (colIdx = 0; colIdx < cols->getLength(); ++colIdx) { col = (TextColumn*)cols->get(colIdx); pars = col->getParagraphs(); for (parIdx = 0; parIdx < pars->getLength(); ++parIdx) { par = (TextParagraph*)pars->get(parIdx); lines = par->getLines(); for (lineIdx = 0; lineIdx < lines->getLength(); ++lineIdx) { line = (TextLine*)lines->get(lineIdx); words = line->getWords(); base = line->getBaseline(); s = new GString(); for (wordIdx = 0; wordIdx < words->getLength(); ++wordIdx) { word1 = (TextWord*)words->get(wordIdx); if (word1->getBaseline() - base < -0.55) s->append(' '); // superscript for (i = 0; i < word1->getLength(); ++i) { u = word1->getChar(i); if (u >= privateUnicodeMapStart && u <= privateUnicodeMapEnd && privateUnicodeMap[u - privateUnicodeMapStart]) { u = privateUnicodeMap[u - privateUnicodeMapStart]; } if (u <= 0x7f) { s->append((char)u); } else if (u <= 0x7ff) { s->append((char)(0xc0 + (u >> 6))); s->append((char)(0x80 + (u & 0x3f))); } else if (u <= 0xffff) { s->append((char)0xe0 + (u >> 12)); s->append((char)0x80 + ((u >> 6) & 0x3f)); s->append((char)0x80 + (u & 0x3f)); } else if (u <= 0x1fffff) { s->append((char)0xf0 + (u >> 18)); s->append((char)0x80 + ((u >> 12) & 0x3f)); s->append((char)0x80 + ((u >> 6) & 0x3f)); s->append((char)0x80 + (u & 0x3f)); } else if (u <= 0x3ffffff) { s->append((char)0xf8 + (u >> 24)); s->append((char)0x80 + ((u >> 18) & 0x3f)); s->append((char)0x80 + ((u >> 12) & 0x3f)); s->append((char)0x80 + ((u >> 6) & 0x3f)); s->append((char)0x80 + (u & 0x3f)); } else if (u <= 0x7fffffff) { s->append((char)0xfc + (u >> 30)); s->append((char)0x80 + ((u >> 24) & 0x3f)); s->append((char)0x80 + ((u >> 18) & 0x3f)); s->append((char)0x80 + ((u >> 12) & 0x3f)); s->append((char)0x80 + ((u >> 6) & 0x3f)); s->append((char)0x80 + (u & 0x3f)); } } if (word1->getSpaceAfter()) s->append(' '); } s->append('\n'); writeHTML(htmlStream, s->getCString(), s->getLength()); delete s; } writeHTML(htmlStream, &parsep, 1); } } delete text; deleteGList(cols, TextColumn); return errNone; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/PaxHeaders/HTMLGen.h��������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014227� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/xpdf/HTMLGen.h�������������������������������������������������������������������������0000644�0001750�0000144�00000002160�15104461330�016212� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������//======================================================================== // // Modified pdftohtml (constans@molspaces.com, 2014) // // HTMLGen.h // // Copyright 2010 Glyph & Cog, LLC // //======================================================================== #ifndef HTMLGEN_H #define HTMLGEN_H #include <aconf.h> #ifdef USE_GCC_PRAGMAS #pragma interface #endif class PDFDoc; class TextOutputDev; class SplashOutputDev; //------------------------------------------------------------------------ class HTMLGen { public: HTMLGen(); ~HTMLGen(); GBool isOk() const { return ok; } GBool getDrawInvisibleText() const { return drawInvisibleText; } void setDrawInvisibleText(GBool drawInvisibleTextA) { drawInvisibleText = drawInvisibleTextA; } void startDoc(PDFDoc* docA); int convertPage(int pg, int (*writeHTML)(void* stream, const char* data, int size), void* htmlStream); private: double backgroundResolution; GBool drawInvisibleText; PDFDoc* doc; TextOutputDev* textOut; SplashOutputDev* splashOut; GBool ok; }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/PaxHeaders/testPDFImport���������������������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�014346� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/�������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461330�016407� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/PaxHeaders/metadata_bibtex.pdf�������������������������������������������0000644�0000000�0000000�00000000074�15104461330�020233� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.254765537 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/metadata_bibtex.pdf������������������������������������������������������0000644�0001750�0000144�00000156607�15104461330�022236� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/SRPUXN+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/XHPQKW+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/CYZVRG+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/NWSIIM+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1647 >> stream x�}WYs�6~���[ș�& ����&n:q�q�v:m ���� �n�_�=@Q��/�X����U�&i�Zn��ǫ�Y�$M<n��NR��~�#�vC !�;������ǟ����B&" Rb�$�.��,��?}�b�\�~��w]�5��MA��&�2��*ij��ޚ��p�����"�z�M���D>G" �E��!2M��\$MF�T�wQ\�)���� 2�g2�R��A7�%Q�eu~�tww�5U�����*� .�ER���'Fʢ y-Cş�U~cVL�Gq^���gl�� {72AU��j�_g���l4 �1#��'d@�s �X�Ex���DJh;��r��� ��Cue�.��Ư^L���I=�Sv����b����>VX- �#��WX� �c�S���b�'�W'K���e>��E�� <'�X$��,3��d���<_�����*LE8O2�_�<g�o���>\��2�ʊ��9���_԰���¥pɠX���Z1�����5�6z�;t�ϼ,#Y�!��4���������0B�Dž��BQq���M�*�p��(�R.�7���U��+�����g�?�:������p��5��>���Tu���bF�;�ݨ���TQ���G�T��I8��_�E�����S�W<ƃY����J��Q�<M�J��,��1k��A��¥���a�_�?�;�s����{�̸Wn4��W�zG��[�![��_zN�*�C��{�v�� ����� vK�:/�� �����2��_ƪU����L̗�ϓ�h���EY�L�0in�d�׭�u��0H4lDz ��z&F�)���&�(p�$I#��8ujn�d_-h9�z}���ýQ�g嘝H�'/���A�@;�&`_�;�C�IH��@ �����z�O�y(�pO�)��+F����Z5^��%�õ�=I2�`<ƐX�g����`ͯ�>Ljxg*�֖ {gڙ�����;>^�C���Ա��`R� ��M�]��Q����!f:AedR��< �n�ϓ�)��2O�l$����N#�7 �/���;*�$_P*$�O- M�i<!ʬJa����A>z�@̶w����w뙨.��v8�m,�����#��j��b3��JO����ڹ�����%_"�,�Xc�5�-%t�Q���u��vPe�f�M�p ON��V�ֿ�8���JDH\�h��W��:sa��4�ij�������*5�*]�0�6��e>Hs?>)&@��08�(�y�w��х��~��A�ӆ!S-��̠P�f#.�E��o�[8?a���!7�/�v:����-;��y!(�e �(g�w��y����ozp�O�e�w�"���{AU]`+�ɡ�݂���|��M���@��n�q�Bw���3�Iۖ?�k��̿8�@������n��A\�L����S�Xn1 �M�)9D���Ň�N9y�� 8!R�� �5;m�Pb��� mY��S�-��K�n��i�u$,�������������<�3������Τ���"4��*��֊�#�ś��C�����.��J��"��a��O�h~�����7���*�OX&)�􈏏�:��>�/쎍�:�]�O׸���j�����~cTһ����*�7���e�Z endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/SRPUXN+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11638 /Length3 533 /Length 12196 >> stream x���ct&���c۶�ƶmolul۶�t:�ݱ�t�����s��;kΝ/��۬��U��{����j���JRe5FsGS����#  /���* ��� ����s��Y;:���yIXxxXI$��/^v^V88J1G'/kK+71���HD��.�f&$ &nV@��&f&v$j�f�@7/&;;�<�J� t�x�͙��XXH̭��HL���p����q�p$��W����?K@׿\$4�$�%��i��`�Eb��cVt�;�/��1������%���M��a��^���������8�;��]H́.�.���Mhn�n��U7;k3K; �_)kWIkO����������+��y����C���?��T�5����Y�UT6�vpS�r�/�������o{\�=I�����W���ϑ�M&�`�hn�`I��f�`n�b�_��%*�������B���w��<$<�<~��R����(#N����x���5swq:��s%�}���-��������(М�l`��j�h��+"���5�>�6���3�}�Ƅ6[l�|)�9�Z���վ}M�r3gM',����l�L&�z_k� +>��7ޭg����+��v̶k �%��2�"=k�k�E��*��7�D�)Q`*� u$.�U4��d���L���ߜZ����� U���}��_��G u�u����7X����a;��y�3���cֻ����sM�U��5��:ȦO������E�؉_�Ǹy�!��P��#?�΄|�4�w�����, Γ��ˢ۹�-���/��{������3��W"��6@��!ѳ��WR�o8�T?��G|�|�a�E����z^0��xNn��№YZIv�U�#NV�)Tc�����!�^�+��]�F`|� �5w��K��5W�w��Z��;�gz��XGkwR+�6^�A�-�����d��>L��1���>�{$�02�E0���a.!E $ǵ�rc�����Nz�e�̢S����1�Vr���ʲ"-h�۶�ՕӒ�I�,:˟��\��k��6��mDto���O���p�O��]Z�g��f�f�����4x W�’��K�!?f�����0h ��ZMc�VKK� �J�O���E��Q�GR�}J�^�a�…�ͥ=������L�ERM?l��s�v �H뱐9|�">dz���ôT�2e�rF]%q0?�}��&TXn}��I(o$�Z�>D�l���?���[ )��q3^"�u��טS����2������=��.��@��K��� �T1������2Kxu�t� ���ݞG���j�4P�JL\Lx�g"g_��V^��&5�*�6�)��<�s��������f�:�ҥ���iҢOCL,��:��+������$�ľͤ<c@�i�-o~~� �L���6��wxg�z�<�7'��T� H�N<��wt� v"Q�v@ ͥ_ɯE/��4.63��:������ܺ��`�y�"��r��Tac|���c4����F�Ej�+Y��"9)a6Z'�s�,�ηY�1���u>�6!/����v���E)��C;���w���N�[�k������U_1|�@,8z��S5���q�te�����~Q�goF���M���n�M���jJ�+�z�(����̍�Ƀ�dI8f�C��0s�iD[� �95� N�k�?��Uv}U�kr�8?�[t(�U�Չ� ��cz 2��R����S ���Y�0�\ �7��a� \<�Ł�ҘI� UA���.��녔8��$K��E7y�K��ZՖTl �,��%�1�|�:e��S�bP(' �C�׳x]�'�:��ѳO�gLl������)h�E���b�;O�\��\ԘV�����܁�m���0�ߴ+������J�8�^��+̻��8 xߓ�J����T[4�o�&�"MJ1�&]�)�Α�*�F ��������Y%Lu����_��� -��膀�s|���ͤt�=!@e��n��"��75�U$3:�r��2�w�{h�^P�5k�f���/�2~����Us�%�}cc4���]f�a�F���mr�^�%n4������s�13��M5i!*�͚�k �e�~�(l��ws���ifQ�ę���Q�NX�8A��[�П����IUb�;f����8��]̨�yC�,�#%������������D!�}��\`/��W� b��9j']��rD���„R]h���y��.'FLh����J�:��8��|��o=�"B���D5Ǽ��3J�pv��|}�N���W�nH�\,��w�’��6Pc�U40�Z�X�a;?=|=��~ �EN�,�J'I���� �3��)�cth&���>���PW���P^�s��~&��� ����ܘ�0�z?��j��Ǧ=t�3��P([�G=�0��ן��V��Gq����l����R^�R[IZ�)d��%Cxw��%O��m�[���c�p��*c�Q?��!}��T���¸�H <�����w��˰�"� 7�z������/�:>���v�* �-�nnt�٠�.1��l�<=��[K�դ~�.�9�|��4�,��'�Q��������Ze��E�Iu�TO1c�G���4mV�2���lH�2��3��rN�)����g1�NL*N�5[hd�������+U_Ɛ���y�3Az����Q�88�����+�R�$d�Jfj�_�'7�y���� ����b? ���Ӹ�(�Yմ�%9�r�ѷ�~�*d�ٙS��s�3��H7y���a�B*�N�v=X��vD=�ď�@v��K�.�dǫ��>u�n��9>GhK� ��Ϸh?G���~�Y�e�z&��>�'!��wmh���x�a�x�~b>�4T��ä���[����^+*3�n�h��OK%��E�К�srD����v�����?8+�.7db1��F�5xrO��xN���Y��~H�]����ȏ�a��j�MT��.����}���������1� ���z���5���X��w�y�)9�������������̚3�P����l�?��#�ȉ��mz�Kg>$7�T2f�<xr�PK��ɞ���%S�:3��X���WM&I��3k��U��0p��%��V�/��_�59�����Y��!�aE�� ]0� s�[�����吗Ʊ�ic���Ke �-5�i��ġ,]O^��R�����8��D\�Vv��5@xΤ��E���\�k�>�E��p��[;���G���v6}d����9��Fc����7�n����!f�{yyUH����ɇ���2�`��������D8���k<��C8��S��P����B� AȂ�vxAӕ瀃N.����!��>���}2[��Q�@��O+� �g���7��jI<ۢ_���^�?�� =xW�4vB7b"1e>��)�����{�9Nf徥�j�2V�P㟍Z�?b�i�uYVQ��װ�k$AǾ�W�r��b{���Y�w=Z�N՛k���/�H�Τ��G��t;��ө\�_���j����q�3v�p��b#Tn6�͉9���L�(9p�DŽ �+)�z1c�Ay�<��A6��?8������೮�k�d� �OB�� \��+��6�d���g��#+^�OX6�5A�� ���\��;F�*�=g��gμ1-K��[�c��w��q��Ú"��K��ב5�M�N�?Tr��Z�a��X��6 �c?�l��!*� �-O%rZD��#���(�;�ޏ0m����R�3���3+//�&\(�@$* ��!r�ڞK` � ��A؈:j��� 8��AU:�-97�g�x8�w�����!��ބ>��T,3�?6��I՞��]��M����uPw��妾�������u�e���oD��YEٗ���Bt���9���K��=�`����ʠ�]p���Ѡ�����@4��m.���u+i� _�'����_�W����I6��ʛ��:#���z_�2X�b�A5��f���j��O�t�-ToMO��^�� ^��P;��73�Zk��h��pZ��;37�Bh�����g����1���i�)���+(�w������ӽ�M��gj����ݶ^��X��*鲜�aÒg�ަ(������Z��G>��J����u^�2�n�`����ZӲ��`. �X=s�_�~��<��3�aЅ�C�>�wiu��5�����ٺ����� ����a���˒���L�����`"]���x��߻�(ǥ��IQ���`Cl�Y{����x�qQ��� ���9'��c�=;�s[�3n�H#����MGFQ�Z�m�}}I����ϦW�yl���@&�0\0z���N����ĭQ�=�0|ϪVs�5I�&&�h�r"h�l� \�w"lǨ��Ցɉ��*m��r��Z�ι:�����"8�*�zF��4#]�8LB��g�ž�%�ƿ~���4� �p|��6��t}ϯ6f�IpX�h����ҎZ �����$ƛ��N��(�_2�xέ ����vOʷB%����4��Nj�[6����f�~�`�P u���ptd�&5���O�����Ԧ=V5PI����HE��rc��Bp�`,���� �.��������e��ݭt����M�!b��nE� �����-��:���m�Ht�I�'����ָ��~g�n^��=60 @ےn}�'{ڜZ���M�Q�|���Pf�oF��\����`"a�8[G^O�����<���Y��@߰�#%A99�;���̑>D �����7�����0�\�����ީı8�>V��q�ٷ����k�g7l��ք [}��#\�w� U[�Iܢ,����y�Fs.���X+c�\�v86Izp��)��b��|j���W���<�� %�td� ��j8�]��U"E� []&�A�������|����%�8f��-��'����[X_��"���ncʉX{�̱kht'O�\���k��f7�#�n0c1�vF��_b��fd5��a��4%�sP�q���w�n���f:�,�F�pfH<xIGU�/A'{V��I���@ �T1&�z�Qk�x'UKh�;ӟ�[�"g��j4Qu9.�!���(��(lJW��A�����"/M�D7��&��t��w��� Y�F� �����t�}j�0��DU��(^*I�x��pa#3 �ѐ�_��"1vQ=�8��r�oWI���`T��j��3+iWK+� �|J���Հc���\���.V���~\�>//�O��=MVĈ��X�+.��D�1lX�'%�k<d� IؾEU�M��8������rP\zr>���������������_>S���Y�8���&ֆS$�tz���D�PM�M�E�����.��#GQ�3�>U�5��S�mk\���V��*�S8��E~���@4�lGc'ק5��vQsl̷�$o��ܡ�/���H`}�$�>����J�sM�OJY�]�@�}�M^�k��W`e�w��סG�P�4�������G�K�5s���e*��)brT>�ڱ,;]h7Q��l���4V�����Qjp��|���y�mIy���N%J�����4����e( ���Ӝ�Z+ =2��7�����~e&�� bx���*� ���x�#�Wz]N�ޗS�]��S�h�����d���t=挴�̫�"4o��K�I*�~�!�F˯ǡ�ΖADl?�P�9;�Y%�[��k8;���u�&�/^�4]�N]��ӪdP��[�� P /���>:�T�cA�J�!3Ə���y�yn����Fkl�ޔs��(���0Yw���^?���yaXYT^�*LHE�{����c����'� n&�K���'�҇�k+\ȫ�I^�#�*�������T���Y$�!*�s ��}�A��c��jn�$H�8��,zQ8�M��xk�X��#.R��D�VW� ���� �K��@���u���3��,e)��g�t�$e��"��+7��;$D/��`k�ů E��yX)�o���^�=���������B���W�z�ka�O�I��p03�e����5$*.�Ӻ�iJ�9���Y�'1���J,�4���t��O�a��&C�m��^�jrN� ���H ���H8R��ڧ'��\-�?�UX~Wϰ}!�&M�� Y��}��ZF�� ���ڂ�om��٧�Y# yo22�up�� v,k o'$�A��'_m��L��DOt7s��������d�a� ���IK�,u ���Ļb����Q㍥�����7��L߿Ǐv��w���������TX?�Dt�17���εÈ&���&3�]=�tNl�$(�����_k����o4�^7N���9*VR��?p�x�������P����~�>�{-P�b�_)9��pqQ�(��?\ �����޼e����,�?ň�K(��n��γ��3N���nO�}�f��`[�P�.�[E �zZM�k{a��LJ�l���{�� aB�P�����r�M�o��^,}�/˩搗b���"��K���$('2�o�-���W�Mb}�h�Yˌ����d�RTs��P�2��dg[+��e0a��b�H��w��6(�5��)D]��C��Z~3T[� ��pm�����B��~�X6/p��6 �m�4���Wkz#�z�R] Z�H�e͐Kͻ�P��z<��3Q��h�y��'��0��q��J����N*��+ C��Q�kR��x�0�N6��~���gF��?HjC`���{�"��J{�����Pys@N�(�E'(�F��*�[�� ՜v��0��)���������-X��>m�e�@�X���KŚ��zZXԣ��u��AW��;�j� ������1�)�����"�d�����W�^]Cj�����]/�����#����ਣK�[���� 6+�t� ��_n��u��0�*X-��)|t���`�gL~' ���N�I :�]�Y����6x��!JRu�ڮ�z�����'��vT+e���u ����b���eQ+�y���1�5����b'����Y�qf����$�~�2L��8�+��s��_0��n�;���O\Sߒ�~�����$�0��<���_�����l�Y`cf����A?�����\v�U̲�CǫR֍���I.���j����i����K���R�Ί-f�W���s��q�Z���~�dP3ʢ�� $�P�-�����&�����E�\��#Λ$FwI񲡺z� b������e��!C s�M!YF�5��������W��./�$z���r�5��0�L/$p�۲����GR�Ž����!�MG#��hR���\[��vԮd\�W'i���K��^�b8��ʬ��T�_w.�}�a�� R�b��7EOTE�"��u8�\�om,n\8"iP�� �9�izP���Ir�iM�@fa`��[��G��r�s'KY֟��&�;aa��P Zf�_��$�c��t��2��[6���7�R��S�ގ��2�Q�~��ri��O.-A$v��X h�Ӻ ��C~9A���l��٭�i6�9��oV3��Hy��YұZ!}ӱ������q3�.�uD�ʸ'��'U�f<z�m��u��e��R\ �`F!��)߼��(�P����&P��R��U����{���W�/ 1�m�̠�h�����W%N�wjO���c�>�W#O��N>^��V���a��J�6Y�����&[��gcRJiՊ� U�$�²�$T�:�j�B����d�ز��L,k���D3;H��G���oN����H�'��BT�e���o�z�Vg'kiĦG8:��o�P�6B۲��A ��˽�lZ�����S �:�~�A��P/T1��k��Y�!z6l�T�?�؉���ˤcԘ%$��\���ӱ�j�n���ɮ�/�S�J��c"C5�ߴ�������O�~���l�G�`]Py�EkW�+~� v���t�N 7��գ������ V�$��"�U�C��l^�.u��#�!���8Z�N�_�t�����߱��^����;vw���C�e�|��-�1,=� �ƚ(\��h#Fڒ��5�9�['n���e�g�}�|�������ޒO���I����w|9�~t9��C��"��aH�w t�W��1n��Ŗ����(A��Yb=�v�����D�Q��9�S���;���0 �v�L�kOT�"2�ڭ�ѹ�::j���Zã���G��9d٨��I�Dee�&Y���QI<1&k����7_z���`�6�Μ��k�[�k�ٌ0�T&hM"=X����)TmZTC�1nv1Β���1��V�ݛ:�n�f�my� �yN�6]�U=~�n$˧�9;q�|�$���Lq�a����{S��\�%����*(�2ra�X�Hl;4oX���k�nĥ|���sǙ�DFXTnuX7����,ٱθǦ.g��8 ʧ�{L�bL�)�\�b!.i7�绗����B�̙�У��[b�\sU�s$��G�g��o�u}K}L����׺7)]n�H��� qO��1�s�"?����Mp�>,��vu���D�ul.7Dz��� ��xu��F�D�vr�b�S�l��>䷑�An_Nx/�'�pW?�G��,1�vD��T��"P�<Ot�K$(�^�Dv*$��4���H�(��.Z�,�c�,�5��>��?��l��.R���J!�L�I�?ɠ(]��J������5�f��? ��N��?F|r�����o��WvJ.K�Z�R���ڃ��c�Z�ʻ�s?`o���o��mBtk�8��#R�b�P��Eǩoy�&�Er�T�._uB��k���1�F�,c�2"����" �o�nJѪP������ȿ����h8B����?c:�>���6��GP��R���6+�'QHǜ`���;��E���v)��o�@� NȴL<*ʙ��O�ZFȸ� ��/��}^��E-/�C�l���Od}�n�լp�R��H�1��gA����3&�F7�������ƕ�g�;����H�eEF�n%�.u�3%*�c�qi�cy,D{�Da@��"�0����z%�@c�Y�3�oG�Y���U�%�0�>'����YZ��HUn��˕���,2 uK����"91��`~8*إ8|e��֌���Lu2.� "o���Q~q-��"��`��b�|�Ƀo�h�q�\zl��o͆Fⶥ�fV�;������V�<��C]�D�j���ݧȼW'�.4��q1����o�r۞%}zBeꬱI��$��"�B:��^xh~fOWCЕ���ax&��[���2��6ݟ�]�VQ� _Ԯf���z��KO�,�����$SJ�+Bӱ�0�*���A��we5,�x�6�m�A�"6{�o�4��q.,\���6� ~L���}� k�/�İ3���c�X'L%��CW ��=<�=�:��;��s���e��J�[CP����H��2����^���V P�(�nu����0wU$R-����0�J襡�Q� �wB���f���CŐ�l�]I�M: >�C���l�[D���J,::@bl;3�j|�%8V��0�&�B��8���\Cw:n`@�,��{QI�e��b�[ڱs�s��<����6a� Qh�D��.2�k���I�!z7�ɑw�3k�\m}�O�ǹsB����I\Y%����@O����Ώ�e뜕+��-�`� l0׹i\4�DV��:�ێ��3|��P���0�W��iJAI\~�y�Wl�����}��Zk�4�џ6*7р��儃}OggfL؎7U����c��# �%} 5 Q�䏌7�I����������C��sg^���q�;��o�c7�0 �D�6雧x������Y*{֛Z���R^�Z�͜���� �p�e��� y���(�%#Ѯ�PP�h��v�渻�S��� �^TQ�dz~,����T�N��y�F!�y�1�қ�P}���aj��bQ�m�"����і�G�������]����k+e��2OK�Kf6K��K��v(P�O���?�]�]f��u��Eh�6n{L�������q�Y�5L��"ʽ �����ؗ��2�%�@��tƖ�ɡ�(��8t�YQ~�@��-6R�D ��&Nf6+���\1��}jEz�gH�3>;uz�����q���5g��x���)���{�s�[}� ��^�l)Cp8�u>�]�:B����x[7�!�,I��b!r�!�j]�G<�n�3,�Y�.����\!�������-z���L8�33X}�: X�aAHYk���__�ԟa��,��v �O‎�f%�Mq�� ��&�g��b�!�� \�1��� .Qew���] s�]�w�O��n���y ��0��D|B3L�i^�P �$(�=;D��e�c��c��ܵ��D��)�"��i�H!)�Ւ��G17$�~MV�"�|Q��z+�)���bHT�n�6l�ٍk����C�<��R���ü�u�C�i����p���Y%�+�d�S@��1��R�_#��Fe,q�,p��b�p=~poiŕ+ͩQ�y�7��A��B"��+*�B�������+J��i���DG���9����|q�1e����+�ў��Ji��6ff#��uG��-x%���)�Y��́�#2��Y5Yr�2�@ӭ�� �B'���d��=�7R,� Z�ʗ3�b�)L=[v� �r�׈��k��s0v�9d>���j�ni����;N0Mb��o�Ep�#��@53ٕ{i�$�z�&�x? 3�c�v6 F��^�[�Iح^A&� �<x���k�焜��gx��� o;��h���!S_c9��Y6j�%%+7ѐ��K���~�q����V��a< ��8�$Ћ~sz�HSzR���H����{+@&(��$1c�c���D�p9���nsd0޺J�܅v�.ɜ�� �a3wG��i �\�����R�qU�}/�����m� �~e�C�@wTnb)��������/*x�^#��>��� ����@���m�K�S������js�.v!Z�/�� Ғ��tq�Pc�s�O*϶�-��v�G#�U��ٸW��]^���%k�:9���b`� u\P��{��Ǟ��hH�=�6� Ի�10<W*G�����=�1�KiÎ�2�?����f�r�� H ��~��8�^���b^L����6��L�� �x��T���_fCvQ�$5���;�h@(�t'Vu�l����=��,>�W� �F=+;�=���o&���X)o/{QM�� ;y���D]���ց����>��Fc�7ؽ���xt��XN�y��{�rŘH�ڹo�(~��0� N�y��������ΝH���+lU���>���v���t'ɥ�g���w�]>u��嚔�>�(=i;�$3=J7j�,qP�TPh|c�B��Љd�Ĭ�g�}��fU�<+�Qă/n�M'�5H�zYދ ��SS�Y��uՍ���i �3���Y�o�W��� �������t��ri,0��� ���|�Mh����h=�T����[h�c�eo�̉�<^�ґƇDZ����?t �Q�/ ��c�E��%lmЕ�������\ތ�C>���,�*m� ~+��ͦ:�j�l��� �6���������,�AC���_��v �C BI���&L��y��^��1���'���0OƢ�q?�{���t;S¿Z�]!�I#��޿�;��H��]uKFҞ��ld��f��/�я<ԭ����'��R]h���a�!�v�fq�d��轐��o ����)��T���F����l#�8�� ���!� �^^L28 �b�٨�`�7�\���Þ3�}��³$P�$|���7��Y­�hJ���i� g@K�<�3�J1S�R��;�l��)�@ ������ ����g�6I0c��;[�|PI<����"F���252�M�~P`<J�޽C#�8�Q�D��FX��[,��T%��J���)�v��AHz=�\ _o��P}a�&� \�q1��2,&�1Š� p �CCAH�9��M�T� �+5�B\���� ������2��T��>Qd�#$�g���Ӈ���A�AH�A~ YtZlv2eO)�L� ?�vA���xD�=���'õpM��<�2�X�Ţ���w>ƫt�b*��M�C6q3�S����m(x��9�|�[����1t{��kJ���>�d_~�U7���S��_p���� 3;��������-��:I�/ endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/XHPQKW+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2808 /Length3 533 /Length 3353 >> stream x���gXS���a� H�"x(Q���*��EABr�H �����1�HT�4A� E��RiR�*"��R.:3�>����}�o����{��?���ko�����.���$i995@�B�Q���`z(T�"I��I��9UUy�t;Z}jJ�j0e ����O �/�C���@"��H�'�;2A!��-�I�2����6?~�l@���e 99��A��7������2�����h_�?K~ ��� �I*q� x�?��!����~���������/k�����9��Ց8 ����K����:�����kcBBb1(]�`��0>�2��ƐP��;��̃x�_��@���n� �DZ�^�Fb��K�����!���;>C.Î�+w$<z�\9���E<����=�[�F��J��JO�@�)�pd$-�tt���UE�[�Si��\�M �% ��|�g�K$�x�ϛp��?cw�р@� � A�p �%�Q��³�!�{y��;���轏��S���ڴ�*� �=%�ʫ��E��M/H��v����X0}ՙ��5{f�v��͑TŽ�̖��{Mo�=U;)V![�����ҝtyK�^�8��J��zXG�&n`3�O� �lz�m�{3�=�vH �$�{�\H9>r������c>�J�k—�]顼�K�gV��䧉V7�gŋ�?Kj>n{��%U��dj��#Hԇ�A����юұHΜ������Wz�&ڕ*Í?�IpE�m|}-�j��T k�N&ݨ]���:S�u>o�Gi��f*����S�����In{;��_�Dw�9gr9b݈S�IGb�X}����\�^/�%�"���tQwߘj��� �߭ Q�3ѻ%~)Q���[L�y�����,�L���5���+)��Nõ�<&�#;؉/W׭�fh�alqC��������f ��*�����`����ك�"Ķ/�p��,=��}@��{�S���W� x���jf������� ;/���j2z�M������9���� ����߫W<�S���iH[���Rz&�y/,J���0�}/��}���'����K�;�*���m>�����3��f~�����x?h(sR��6�������v���oe�a�O/6w2�D5&�D��|���J������3�*�봋�\��oͯ�����qN��{o�%vO�����_����ʿÚfVJ��&o���`�S�1Rk�\,��츆sb���� ���vffK_tY�D敲|����c����Z�dc�r5a/�k�JG'8�!��<��ᇡ�2F���� �ŗ��� %Ƿ�# �J�)OQ. ��o q�p��h�勹�fOy�+�� �fΈT(U�l|y0y���c�����<���dD����l� �L�ݢbD��Pl�~��ȭ��Ѧg�D�b,����$�؈��e� ��� �0g|4�\����u��l�F���I�B�B�;_Rm9����D��ų�n:7I�ji4�`%�����y��}M^��r������H��Sr$v���+`�4�ϭ�Ƌ��[ J!��`������-���:3��`�n��.-S�~o����~��@��zY��s6�B�}.������5��[ȵ7����빶|mϐx@Hs�ȕ���O/���vv�V���Y6zt[>\�2�FJQ��Z����A\oD�������ݽ�/���H���mR��Y��*�� S,*�w���$1����k�9Nxnڈ9|y�\��n�|oս�ѹ ��*�;Y˪7�h �/8F�5nس$�dk^��|qj�Bz�4B��(�UM2�`�, 8�i��ڼ�QU _y�N�+t�p_4`NY8p�L�N��p|�5��Z�Qd�bϪ���Xl�M��l�t�~��K�u�Iu�`*�ܲ����������眰ַ�B/��j3Xw���;e�c�pO���+���-|1�AHb���A�^܉�*`~��lI�D��/����Y6�#�}���Ftt�Z���۳�ƶL���b�6[:�n8W=i.�桇�����ܣv� ��gG ���6������V��ޤ�%��� ���K I4���7�0����tфk���Z���?}R�-��a�CE"���iJ�Y^��% >�����2T4_M`0v��}�]ϱ�Mn��)q`(p�`�X­��(��1�ON~�OFW�M��M��9@Ӂ��e��tEw[@;W��2}��n(�`�e���f��J#Od5+.?jO_��r0c�/x|*}fKd:}g���E��5 zL�٬�4m��iA�[y'��:��T׵��{�i<�.>�P�������f!��5�jץ͸�׾U���4S�W�cýI}�x��q�i�x?g�J��O�JUa��l�J��n����bڿ:�vG����������^U�+�ۋQ)���9�w�.ƹe�L~����b�'��� �a\<�.Ag�W�LfJ((QkW�z�g�<s���2t��0דp���cH*�f�k�����+��Ȁ���h[� ��ﻖr.��c�Z��Hw�R�1[SlC=�=�f5��U+��1�Pk�i�!Q��<#��hRQU�0��E]"ئ|���?8kp<�"z�)�IV2�f@����D���3j��k�N������mmIW��6T��o妴��~;q�j�����-���x�8�Y�ns &�&��bD�8_�Ǝ�s�e �������LԮ{�ޖz���E'�3��d_���4;Ք.�n�Fs��+��eE�����Ԝ�ڼ�tX͹�M>�x����键_�f�u� d|�z���Fm8���{[{!�{?�|�A�#�a<�/|l��4����{cK3$�T&�(�QT!(h�PQ�)ټTQ���=��D1~6�M2���mw&0��DƭO��#����C����U����@�0yQ8*y�o�^�C ڜ>@k���� ��[*� ����� W���>פɫ��o?��Qےw{ev���vW9��EJڝ뷠w�JeY�Z*��Oꨙ8:�Ŗ o�U1���e�r}����A��s����7�;�\l6K�h�F�U!_ wIkd���G���j*Cx�� =��x͋"��9��?)�mo��FK�����\ю���ȩ'#Z�����>�"N��]4Tv+�S'z�rD��7��!plX3vF�r�x����7� 3Oܚ���k)/ԭ��Ap`�*�?�v)=��㰊ΐ�˳�b����z���LJce�e�4ҹ ��qXv72�>F���N�f����k?�uJ�� �ڶ���x��:+^�SSH&�(���W��=]Ųx�Jŕ�[����\7�}�i^/Z��-2��i�Wo�p�n�e].�{���ΰ������ "�$I��@� kl�K endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/CYZVRG+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2582 /Length3 533 /Length 3117 >> stream x���y<���C%Cv�c+��k��p�,�e�<c&�3s�N�"Ke�C��CD�([�(�ZSBٗ,%�H���s_�s�����}�����~�����~�ϣ����m����6T C�7�,=���\QU����JAa��74���@�!���� U�JcӉ�f��Յ,� ���P� ����B��B�A[�,H$����`� �,�������e��`���~���������c��h�@z���ũlQ���xԑ�5�b����Տ�6L�C��mQ�c�D�w�Lc2@:�@ŁtʏVw�;�%���1v �����@��]"�C@���%�x )���܏[k���:���������{� C�0��i�~�������C'��^0 �eܺ�x��a�5K�)� C�a��?��RYZRCNi�#�m]}8��# �>���])� &h��a0���7ˤ�A ��o����x��~@0�B8�RD_-9�%�O�z����u����^�_����yA��C��� ��N��vsg�.���)�E��q0Nx����͖��f����kxɨ�҄v�D�'/�n���׫L���)�"q7������=Mgj_��xj�>�+���f���������\���f�����.ѕ8M>�����h���u�6p"A�c�����O������3�=J������?�uG����� ����|-����1T&���m�gޣYY�^�G�Uz\U4.޸hW��-�;�Az^������q�O6� T�]n�n6���HUBG�ijskѨ[��tP���.���M��7��%��@�n%|�Cu� ƨ��7|S�M�=��:����pL��}n�P ������nH�zձ�����V�������l��B�t������-3����S�Σ��7��3����$n[#�#=3nA�#������G�򴀰��B0 tb��S���c�A��,C�z�l�1%��i���1{�:�*�H�d\�}[DM���Ѧq���jAե�x:k�Jo���S0�Vo�����ܓf�m�=N���TY�mo��cg��Ԍ=;e�$ËT���A�o�>f2:�m\���p�l5�G� �,�Ϗ�jJ9ufI������T��&��w�!�����X6�2"*�������i�&�8���8��68'AI{� ����Z�VtJl<��/A�2& ����\&�(Qf�Ľ=V��p KZbA�7��GRR�c���>��������'ϖ��U�7e!ɵ�a�( ���Ϛ�t6W݀�dA�nZ���[>�����x��~��]PP8?��M¿\�L�IB�3$gJWzI@�����r�ѣ��r�{��̊6�;%���tV����K1@��i��Gt�k2��5���}s�Q w̵���8��3�Ԝ�T�b ��l���Wr�����Ƴ6~��$��p�����wn������)�+��5��b��D�� �3ȟ�x>h�l�zN�� `[�����؋��vT�դ�'14��J���i��4Ֆ��P����)6�W�Kx��e��`P,����T�}Yq<������~���w{є�#�zP�v\��!�����,=�Yh���L]-+��ҲP��5�S��}.��8�e�9?on��X��ˁ�7�ϠT��p�b�@��.�)/E�9؜�{i���)>��#&Ã��ץ��YE����� G.%�Ȗ�����i�*J�G�8�=��_̋M��A[�_DF�i��#�[��7?���&�e�*��jZ�lor�d��M�Hs)��n�!����LSD�}�'�mg'f����ـ��I"g�ע)ؖ��YFt�!�����9[ �i蜌�ݫU;�\�O��U����p�bɝ���=I!����]N�L���{��~LW��RP��=��ǬuaJ�o�J�fLF�Y pX&x>�.^)=Xs�s߈{=,;{�c�����K�����k��{��+����I$^�3����Ե����D�_���t��ר0ÅV��t��r<�#^�4]t��d��g_K�{&/O�ph~|7���e�TVA���B�H�W�����r�� K<���^�~���y��@�镤D%T�������:p��>~��{���ZHL�(W>�mē��竏N�Tt�����s��Em�hb�v���{K��E;�Y�B[atØ� ��Q}3�c �~�W��˄���u%J�I'j�_cG:��_/�(�2nmK�[���RѾ�0�˟+Ҵtccwb_v,~�$�z�J���O�*� {”���W�p-��/�� vU�`W��s���ȘfiFC��)�[2<��S߳�׈%���~X��C�� �5�tZ�P�8f��Z8����r�����5TgJ L�'u�.�p��"k���$d�:��nI��~Qb�?�����~V�Y�j��|3_�u�l�}Ry�)�㶉��Ug�k{��J�s���]�TNTM�E?SM�e��g޸�>,a�xަ2P��SȪ r��jb�桐hasK���������"��#/�¡(�%iI)şx�C‰��������$�|�zj�B%�M�<Y��Y��"�t�7ϵl:P��N��\ �I]~+0{�o���$@0|���z����� O�/�oE�5W�g�L��M�$m�}�箴��=�^MNŊ�����,��� 4��D�FJ��/�H��,Ks)x/�,�}r햓/��{A�ظ�o$���K��L�j��Y_d�ߕǬm�O6��K���&n|h���(�7g��%=s�;T�����+����qY�̑��dn���|fJ����T7EQ������/8�/�ǰ��c�%����CV�v k�+�����ɣ�#񡡎e�̝��y������Y�^ ��2xm^-��%jkqgx��2#'.�� ���2�{h�ѱ:�[W�5F#,y����p��=o���X�$�Dm�\��� �\<4%� ,Ϟ<s��(U?"�q���CJrB=������gY�;�-7P1A�Q91�-n{ok�頗b_�Y�lc ������<���9�.�Ҽ1}�/��n[���Z��{�f�5a�(�'��M��4 �_\�$�Ï�q�UvI��//���'�$CgP�z �S�J_ endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/NWSIIM+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3993 >> stream x���gTS{�Ʃ*���h)���$�DJ"]zLĄB(��Ҕ^D$�H� H�^�H/  ��4)‹޹יּw�̚o���/g?�9���}���p ��(��!O�ɂԁS=[5 HV * !�$ �� �Ձ 55���PARVWTVW���@�Lĸ����K�\*��h"��M$w��Q�Z�4�, ^�����^�����D_4J����( ���v��r���xWP�O���W�M�>�Jq^Q�x�B���G��G,�c�������>8���W��=��������a xx���D�)�&��n�A�ɦG��c ���a���n84P�O �m��G������y��h<��G[� gfc��J��C�l�<ɒ����_��5�?���1�@{yYyyБ������o� �H �wZ�x�����O(==�� X(��>:@ 50P,�_�Vx�����˫(��V�>D"O�}�>���s�4��d<���;K Im�l4�\�y�3 ��,����|}k�8f�w7#°��1��%xL���:�J�L5���Z�d��|��ݵ����E�4��Wv r+��jg�2)*8����w��Y��M��bo�MP�8��N��s��s�\�:r���8A*�y������>C.Q��U ;�Zו� *7���86��_�ϯ9�v-��ۖ&�s��q���k>�cd}�;v8!�c`|���@��,���õ�� �Q�F�����'о�W�,�Å�)a�I�/�Cl�k�Q�)H�j[T/��!.� �X���;�ba����;qшg2�9yYo�Ug����h���'͉�l���+k׾D�ع�`�ݸ��uFg��)��Zq���Jn�$�~���Lզ��l���a5��[����x�;{��ã�����~��2��S�}��M�V�ې"t�;]u #G!�!͙#xH�zC���,�4b�d��P�:7����6��(a��0@kJ��+�ꁕ����'AV7��D�s�+B�H�N�uX�W}�'Oz�4�O��Z ~u�!�%�T���7���tC�1$�K[Խ�������%}�E��榩��aw;x2�2���A���- \�>ֱ� �n�ªS_�ao{d����@*Y;�rT6gͺcLb�|���a����~�!J�d��,���z�w���dHx� S�`Luto�e>sK[ �0i\aԇ^�h}3��9����q��ί�),7��F���vO�_��_��VU�,YY�����^���i�B=���v��a�O��T�c>�d�ib�/$�+.�F杳�8�����,���ӝ��J���Z!�G*-�c�ow�NF\��۹���"��y�Ν��v$⃗Bz_�<YߍMb�|۫�v��cA?Wl�s�W2��;X�V�{s�=��L����ī~m'��ӱȝ��7AmVȹq��Ҹ2��֑E3O�I~�K61Z�M=�,Ճ���ed7��Ǵ�W0/[��g��0�o���w��ܵ܏��v�v�R���>L٣��=�I�2��q��]H���tM��h�K7Z�2��)�1'ϛL��̷�3����MP��ц%JӽV�Z?�_kz����u܌����^�@����L�C��[��FQ�V�&�����y�C�M�6�~���m� ��'��ul����m�/I{<�¬;7�3e�;�����>7�KJR�֙���/ōM����l"������ꆚ)�8��>D�?�E�����,�7��Z�" ��������ߍ�����Q+.�a������ǚ�x���"쇱�q��$��8���~�����r��j�����ڤqt��I7��X�H�P#o���is������A����8��5�ӻ�Uˇ��0:��RJ�F�ݛ�ƶWI��KUyԒ1�`D� �s�j���=���b��3�����:�Rp���ӛ�΍�1� y jrߗ�ĝ���� ����~��y�@0��uw����/?g��6rIg�~3�J���c�2��rj�ՊN�y���u�ƹ���Y��68�bʟmIy�+jCN坘��4�s�YJ���0}���#s�ή��*����dx�˺�Ü�j)6�,��C1��4��$;�j\�Ƴ���Y�����$�˄$Q ������Ƈ<5멦�hgMD������u�b�`�|�{�"[������óĻM���)�I7Ye3k�� ��$��h��Uk����~1�u�&��&��{S��2.�kF�x�Sl��;7�u����J����o��ܸ0�a� ʩc�ԫU,t�vqZ�j��"��I�r�\O�ڞ�̉�J�)˓RìOY��B�םB����u�'��z�6�a�Q�\�U���-M��Ѩiۈ�����sb���bq�#s��"Ő���,�r�3BLKP���↚���;i��B�.M����)Wj5轌�b��i*�V:ǹϽ/�@LY�(��y�㠚9�sF��b簃�3R�6ص;���r\�Z�l�]����k&�d�U)#�J��,]�*���u+�li� [�����k�m��4 n~c:�����"���u�}��0}�Cd���X)Ix5��8vݧ�{c��|��ke��}���B��Y��{�ZG{�����}��!~�p�yFg���w&��RF��.���E���,m����� �0�cyVdz٥�k`t�Y��Ģ��w�ܨ̗��Q:��y�ez0d�YD�Ă�x ,9-Z��1Sr@�.mԐ�p���_�&^�h86:fjif(�h�1��vF���F�O�[��ͳQ��j� >�>��[X�Ҡ�\����t�uVoD����_�7�ݒ���=.Mc��W.4����������2_�՝��fq���y��RTo��~ M~(�?+$Nы��O�{��J�5�w�Js�+ْ���4�<���W��� ��L�-V��T���;�J� ���*Sdy1��r�ݻw�\m������b^�zI�P��݆4^oX �� y:Ќ*WC�U.,���b�=��>R��W�c}p�LA���c���r�L+ܖ+���tl:k΅��i����دm�Z����,kS��iz��n1�W7y��cI~��E�U�N�7��N�8w[��t����t�E�o9��5<:,�%x�ZS���$C�@���FTx�1b��A�#�|I{�"�`���DUq�E�o���㕽8�ʅ�h�ei�"91�H U�t ߠ3���ݚ.y fL^e:���P����,�i^!(&N�n�����ύu��乧1[{a�.�&(��&f3Ȓz�ʀ�R!%,q��JeR��q��d�7��O��*#M�Vj�f'Vz�vW��'w�AM�JܛC ���[q�^2k��xO�׽�e�L����l\f�SA�7k��,N��k�!&�#�gw�n_�.� �F/��<R��{bʱ�!�h�m�TK�dT����Kn���u�^���6�,�Y�2[s�X������k~�+Lj�c��ɩv��g���[��V��І[Y��P>��]�bqnЬG~E�!C�0�?C�vmNGK���o}p�7��~ Y!���!]6>��e��z"�f`���H����i�?_�������Nû�x�'r����z�A<� }N 8�r�5}�����^��P��c ��Oc�.�;.����t*nv�h�ɮ��2`��ɇg�T��Q3'4 ͂u�u�����|l�@j��H6�-����?�~���އE>pK�y�5{������X�ͪy�vE6餠֨��]moRv�T0��`�E�e/���������;����~OA#�2��� ��-ӍDk$����$��(g�� \I��ǃp����>���[��- 5^?������U�|��}���iø��@��rk�VԀ �t��:-�4f�\�C}�bnjǔ�����/�ֆ�Ë��͝Ƨ"f�6�@�a������5ٔf�f�`����i�rs;�Te��9#%�o v�/�vv��ڴ����������O qh�D�@�������B endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1439) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019143951+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000030427 00000 n 0000031017 00000 n 0000030692 00000 n 0000030870 00000 n 0000030591 00000 n 0000006497 00000 n 0000000009 00000 n 0000006744 00000 n 0000006558 00000 n 0000000913 00000 n 0000019245 00000 n 0000019055 00000 n 0000001829 00000 n 0000022901 00000 n 0000022712 00000 n 0000002765 00000 n 0000026320 00000 n 0000026132 00000 n 0000003711 00000 n 0000030770 00000 n 0000004710 00000 n 0000030820 00000 n 0000006431 00000 n 0000030952 00000 n 0000030974 00000 n 0000030995 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 31112 %%EOF %BeginExifToolUpdate 1 0 obj << /Creator ( TeX output 2004.10.19:1439) /Producer (dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate (D:20041019143951+01'00') /Author (R. Llull) /Title (Llibre de les meravelles) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R /Metadata 27 0 R >> endobj 27 0 obj << /Type /Metadata /Subtype /XML /Length 3807 >> stream <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.24'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:bibtex='https://www.molspaces.com/cb2bib'> <bibtex:abstract>This is a cb2Bib pdf import example. Llibre de les meravelles A short summary here. Llibre de les meravelles A short summary here. Llibre de les meravelles A short summary here. Llibre de les meravelles A short summary here.</bibtex:abstract> <bibtex:author>R. Llull</bibtex:author> <bibtex:journal>Ars Magna</bibtex:journal> <bibtex:pages>1243 - 1249</bibtex:pages> <bibtex:title>Llibre de les meravelles</bibtex:title> <bibtex:type>article</bibtex:type> <bibtex:url>http://ca.wikipedia.org/wiki/Llull</bibtex:url> <bibtex:volume>74</bibtex:volume> <bibtex:year>1287</bibtex:year> </rdf:Description> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>Llibre de les meravelles</rdf:li> </rdf:Alt> </dc:title> <dc:type> <rdf:Bag> <rdf:li>article</rdf:li> </rdf:Bag> </dc:type> </rdf:Description> <rdf:Description rdf:about='' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> <pdf:Author>R. Llull</pdf:Author> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> endstream endobj xref 0 3 0000000000 65535 f 0000031752 00000 n 0000031972 00000 n 27 1 0000032085 00000 n trailer << /Size 28 /Root 2 0 R /Info 1 0 R /Prev 31112 >> startxref 35976 %%EOF %EndExifToolUpdate 31731 �������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/PaxHeaders/nomeaning2.pdf������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017153� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/nomeaning2.pdf�����������������������������������������������������������0000644�0001750�0000144�00000074253�15104461330�021152� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/TKGDPV+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/AWUTTI+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/QADBYN+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/SBJCEJ+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1581 >> stream x}WKs6Wh&I6qӉiz$HF*@I}E�o_"Mt_rx-)wŪN<~aRJw^G"OTH5YUT*d%Zeʹd Ȳ)P$+D*&+F;}^VTInn*Tus̟/ɳ,O"y(x,WYVKğOoYUE=ERݽEL\Z͟k&+Y.2 n%HhbE&I^eU0#ƣ\'9/A.d:1IIDEJ=RɄ3`"J_]c4٤ǡ Γ,F)q_ΣWV"FOo:lFpHS[f~#E&mM8'Y˼@VG�*r EřxNUe#v]fYUF95IQd=�0ƣ  vw85AAMw.څ'18 tKzЫ IՕ^-į=)k`|8,1vcRǣRi0l,k<, Tڍ`9LgO2UvBS@-o#bl%\&S RS/6\qxc 1>j:js1-at+]�LMBьp~"u43f6  [%~&F06JI 4 (pӍPma&bF#?'>k$5 IyqI#6i@ $Lǫsz8J*FڝVRP̚{M|Է�j} XophzCFqK]Gz$`9rP5~v[b,Ԭpcx^{l2%nxձBwjFЃ+P jďCヌN:a=ȇaE5޷'m&>Xx%++(ʱņ+*C<m�v*@{&]tud*vCj U&~<y$Vs?*JdHhKDΞp@,-u:n n(`q6}|œ&9 @e</`hDw]"q|.p!mlРZo&#.< e)FsӛAl{䔅)ģP8)pu.*|G,dUu�3FBYʏ=`)u? ;h[Tk㭱Oҗn?vJǜ er9 CQi!"D ;˲ %顚P1>Eaq @,*KńyrW�t�6hfu4R�s|9DKx3�33#"I#Z>s%zuOJ7URWOJ`/쎍ypb~ku.~* endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/TKGDPV+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11503 /Length3 533 /Length 12060 >> stream xePᶦq,n%Cp8۸;A[pw'{p9gso=zUS*1ٛ�A`FV&V>*+ E R h I|�V^^6ɆH wphiLA�c%-@ `�Dmmx t:͘YYfV`  s{�f.Yr:9d0#2+R.vG[\@' R-fV.v^ 62Y,JY9KY͔�sc[g?@ٿC?%5YUT6=Ƭ3'+w.=soILͬ@�51JL݋wXXx\>Rd*daaeg sVMThNiVY ˩h^4mW췤^kA|h4<xa L89y$Qs񚅤h@ojNaBy!e)ф7+Q`)/Wj[VtyI^DB&ut55kucoͬ{n!2T)kNcEO{ bcY+J B_G>#W4oSONft3So},8ot?UX.)<h$ =? R5Wѕ$22GȒ .qZNj~Cqm>i~g)ElxPxTZ((*}O2omkOo!5:C<=`Z N&d^ MDBiCd8cLa:^ @<-Wcɚ|}Ψd(N `DZAw f0He*5Sd==a[+wIY ziڟ7fj)@�SvRdN2ÇxB1Q%+_yu-.!f;(XL܎HUVM/dm� ßu63DA7_Iy&夺(Zlov0u&9p<@}zQo$}.?)ۃQ~,ՏYjϪ"H㪡E]^iy#^7^/;,% èAtڃFX K`\h'(ǼOO#.Z~4U{ 'I`b&(O&%-6 s je zeN{<2#JUݻw t�BFph 0̄OfO:{Os:PRN-OVGH[5=EY?LEHᦻ/FTz7H1OgI#H+OJDoY cZأ,x` Zv# FAImf*c@Z9()ɶۼyWޕ auU)RjU]^+TA34VK$={ތ+ns/ EzUis|�KD36c^_ɑ1J=lO4S!j^@fOڕ^P|g;6CƝT9eo:@'Rk@BNu RQp~c}* fFœ~T'lztYDQuM{ א/:b7hdhMV<Yf"bFz' r;6Y$8n*Kpѻ-qnΣ)k`Hi_PEAuJKƠwpqtG=JS?6F/,קv Kkq*,%[ZsWn*jtK(t0?_oY T?LB`"[a򴛆A5p]<NO@m j\t~eH8|OS < rcܤy#ӿD`@/lJ0{ WOZhgF!c(زw9MU7ᅢ t!"ý td0xbXh|;bpMbL<_� 2kAՁe[?;,H9PLs3D/0w{ۛw VUD|nH[A^;5dx1P`;|,aO&Nt+IU3P똺%} #ö07v&#HDo%؋$Qܐ *COB,dLzp-=7 lXE\qbܒW.-+8sW:n;k:NjM.'#:.qgZB o;6dw;-;r@\z(a jxQ^"9f gjv1Eve^F@q0HMkVRjtz31յdyj6-vtu*(lS ۖT9#k=s3 7=8lҙ; #ar`t4]AW B8TfjUlV!yI<f1vljZR\_-'Җm(vLj2uM8x |#w:;Q0ΒrCL|-cD6T~2:zsv$5\lDx^G%B껖MW;WXb[t1)2yȋ(..e"0 lyjct9{NMy'E@#Xx n0~ׁ1Yܱl(9LW~'l'Zu%D~]̃( 佒޸舟/|Z vد0Aҡ9c6OPHg.wg".q;[BArn+UOwxDUiqor ^"mv5$a޻lST ur Oߦc`f KA8 l!_wk\MI "''sMSH.?|W'Dďʓ!JchUOx?W 8a2uGd׌ͬ"0ڌew{UFr 0#PMOQιY�qPdNv.2&5/[믶$lr(age Ú`j\:c$E}t7ed2x o”s$*%x &g)O *8ARthpIdLFjheuKtbRmZ<*{8lAdsxjD"7Q@5hr>y)9ym3#% J@T}S-LISsmn3"--uEX~T"+q+gV](zngImE U haP,3s(_beR4phr ]$O$-%4b ^=,Y}U<^>Wpqӧ_\?噦]Mו yn D)ݟݞZM!]cAe.m*8kULΌ#w+ O%b&S{lo<RV*Z ̖)]SRHQ;֚fú՚ᆉ!O!u W[n emR_L_ dtDK}ZcGB!{7y|O ";ˇPql "7e0ΩUKMhhVD2X"0k!L38 gD&Z#s7>U~>@[ هI q%H^}Mg[~�kmo…oGg d{ý`ibēF:+^4Б1sjja΢|;d*VB5T`+75ѐʽO(|C &KN ݑ-! OGy=˖\<v~eW~#Ǘ`--uSB@vg[I* Oү\sA1IxspY"j c ck c~Gρ'7ݞ<\ƺ3I3P`eL]s$YёNs=MX+ݝfNZ1D'<:7„Ի+i|F֡ ͘d_J؍&{o*vb- :.+,nSVbV?ػB9=Yb|[*CW|*8SD&S1 u/(]+:{Eް4v.4\]%2 : }B"\^s `86vOJA{tk`�1tK^Tu1Y7Y] RIe(* @tu0Tʃ.C%* bZ2\t6 dzUV^ԛKaxx5gh,i٘č;tX2^ú/6{sM;^q;UWۣt :2rowYK8Om.4 ( A6 𝐸ir7(_+I7 K5JESKK*47ZU 2oCJ-%:Uro*8Xi 0CY ph Pc>z2J=RU\uŵ z KPMiA!+pז5@1kA!AG,?6�9.$3XUزxLUuE6,)7ħմY8ұu+v<yFq(i94 Dp@ OGO %_[%ljnu?0hucw'ջnA]z&$oTt^ q]: pXIfߥ7ۥîLzH'OstK] [FkDR \CE.ݳԪ,rw/�|iXùn;rfL@ZX{(!>zrfSck$>-S>&Ld�IapyX1ls4uyptm! <9.V;]-%~s@ vL>"lcNkZMmsd{y\|Kl[UBڷy2MU~BZrǟ~!ON=cZ'RwStް8"Z̞-^IcN>og@BD+$~V{͑k}N.ث bmF?2#1J!H3.JS-ʀ?F| ޾xW_,S_ۖl837ܝ.HԻ"#6 [u44)09o+S<F ׁ ;7f%df̾Hpw,Ys-ۀ|7Kv5`Cox"&̓?MR#S#$O('#X!c_i$͜Di\w*ն g g hb?ٙ'<If88;;[%,;1AOR7Ftܧ +&794+]D4C}ͥ[rDm$EFqBXXm$DMD�DL9e2Q/Lu#[Ur SWMJΔ ArF ze+b6V K 6MOs5Ha<_n~ocp%q=ӵn%@}<'{GC|.~F<kfh3`}>#_W0 qQP5K"[7-Д 33>5y>rpbq~<ZꟉ`B,/ ]".ᲁ(YXֆE> vrlm0s& S$|z>uQky|QymLJ/g+=s!]Q > &NJB䇁Qs70.6H (hj�Eա�%U'+u?dh84 N*GdGLB Rj&*VDzYb k8 ~ÁOL8Xb3FJG!$$OYOkV2mv h 2aq1]ÄK!,(.;YK)F\C]B3\HNDFmԶ`;8 zYUEǚORW|yϚ dYOa*/dģYpFruOzd2{^Q7hꡥO'hR ZǽcGu~^"?Syĩ) Q/d0r2Q;U,j  8IE+M H}8ӟ ,]8A!*DϿE9LFSKQOCe̟k#a.|~<VD̏[د63r}ىKh߂t.#\X4rD͈T FJ ԥ؃! 'p)'obP窿Bi)m^µكݩǁ5cºk6˸\AMeZ"4RBif-Q ꮕs5. ݌.H>$-*_" )'- O^kQxt{cl_ RM]ed3Ogs20zw5x:VK0-Sw  c7~.M 2_%š\1A֟.St�iD~KGr!uU<ܘًGT)klB 3s}uƢ> MUak鼚&a!$/=( 1_#|YKF;rYW%Ї7ݙ.sѧ{%o yT vA0Ec[QkyrCv8)VD( otb1IoDت҈웡;;Ã)4Ǔs4{d9Bleu~Y FAG拰 90153yGlɈRsU NH{(eM0,.?_,3+ցGy>5 )pt gw=D`[mZz[Ue%"NI Ic}egwg-F�54 8>@5VrݬJ�#uMr%ݖ~bk켁9|uD:xll)"[zK:GY-st/V֫oe=1 W,ϕ0xk̛M{N?]z^F2c;oS '4[/&({p3nk;ifqw l1 OV#Q=H^Nx1I YRy&WPr|"�#3"^(\pd L7`(|=\ea9#Qb>6uVpjf[3M;`EoWi!hLҬWEyX wV1zD1Sx(2|,kl>Dҥho{Q s1-Dd�iMNrq.8#1<hy=- ,][ӳCcxKmv4 [D<htOFK]ߙb$B8/%%dXW0|ԕia{mp"k?C<v޻ -oJE8$|_Y0 T3{x0{bɚTy1Hr/(pZ@@"/uZĘ6' Ԝf_:yH"BQP˄))=V1Qz.օZ$}1?B= g=Qo">:ȴE�Rg$~K&[5SHn%x`R/6@%QSR�etƽL.;% AAقRk{ʴpmQ2"D'ԧqH*R>FAs5Wk˕C?$ w<ꂣ֓1FH)@"@K#M e< "+?r}H183о,ցbҹ #BR72.,w1z%!^J G>Ryt@k>gl}&~䒂=W1hdދYه_]BErrB6QnCǯLETs$;LV\b.1`Q{@O!ZP7o_h8[B9mi:jy0 EW1YSvSKQ@w_t bX41_Mh*~YGgo>8N90;U̕X�?h>V,ݴRg@4oKp#@>We;2 l Yfz}!~U|[a\U tjz@8N[-~nQ6Hi|h+l$v$!*rDCg5-{ސ}n#N̲~J=D=ިa !5tX{86Sґ5XjddnlG:+<jni^7dܠ{G6gn7߀Â<AjL<x er۳N_=$EL} :,2AgTqk<3Tyx$D)ֶǼO""dَ-h?)Xqp4nzIuRUIú~hR+.j Ȅ /[:wvBL|=Ig BEȯL s^Ǣ+Yf*c\ yA?*K<w~qxQS,eH>y1l='0z+~Jd7U=L)xw҆RgTt䬮E&|aeΘvz]DCXT o6C-R#73,Yu0Ցx$iF'cN\q[ҼZĐ{ɮã "ջa!#U-\>AQ1rÅ,SJ)F7"o FM"x\}Ts<?]iR ޔWբ`&t\)tY;vĽrs.?l崎WN0@s'vYK5&L)JM!52*iߡbѮv e=ypn2ߤi>U.rJ-tKvͶ +2+C|@_LO*C휥2ķ2&UߓIxj9\7g>~͐*/KOU'O#iGq"<OFT< qq{i7 v;*"64M/*m[-}}FaG72o|K1}g`c.\쏾{>WP $3nn`<cx)Y:̡XypL kiD`"T?iw_dP>mpEy)-3NQYuSA`$%{LAmD)&g5 {Yy1JRC.\&ђGP$^bL ;?MO3 5H]g%4VymT3|7 5 r0.mFO\gP qO$!(acqBд|%LJjl~Ev˗(,[!ELK'U٨+i%HT찱6/9T+i +Fb0S9b3 ).0J%/PõËj]wǭ&�bF߭;(ag5y R37շu!0 ǪlPvdbAP&MG[9}{0@Nzw'?@[%=?~q!~wUаu4c_nQ8:ؐlץfz"У#T"Er5>H?rL4#2B>6!9^U;AytDdG'Bzi<6ˎ̧in$X[a d-^U+ �r 7m z%`rps}o0Ot@�{0,}I'V/(R@�M7FhN4{KMz):v`Go LO$mI? džCpOzrvNtR:N(Գt@-(37>u缯:}�N7M3<g&ݘɸNXgfE!6*eZmYG@.�Sr6m:3~{l/=6 L QY s !ۣ&2tC2:+. )n iٚU]˴{nOSG4O )qT wopD;LT}_[62Ń> I3hה0Ma,׏X+4j,YYyԹ ?4M0`TzNUm'�)B3G~ ^_=z'w23]-:]o[]GĊ܂.o5eOgjq=iWz8Ópqtn-Ծ`k%P%Y}}|]Q܇?t"*tΔNH͵2ٵS?w)D?,>:r6T.y4l#pAB9ߥ^ҧ7Ƅ޻RoȘq+j^Т#G5rUXVc{+_X@r@"MU"X"֦$SʊL]{I DnQ}�" #eo-@; ctֳ^\ܡR'* @Rw60/ѺPzž}x@dh�/{LK=y׹*3&W%.r)O(Qf|u!q$g[`ޑsT_ ECrn̶^~ބ-:=nq,#pQ)&9#FX43څr)%2J&>)kma�ŠeZ{S>EDM \e=a6l2^'fAG'#[F1 atJQ3+&ᆮh@bέS�V"k>jj=YhY5l.=fpAs9bJ7$duz۸̊U$ "D={.dV󑶭3j1a~7F"CHZ\4f l:FJjVUZcH\Ed 9}n*Lf?\Hg{RIʵ4N>ق"IIcB-Z߇KC,≸d%9x._I{:<̿uelGBbGǓUS+Blܘ>;jmy'(5c7[!se;䤍83'/JiOd%b0'c|VGa$ [k&q3%P!HǴ$?=qb3^IBD'ΗfywKa2^nzrxp_ ġFZ%C5>蜛.XB[ QJX/o- logda� endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/AWUTTI+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2664 /Length3 533 /Length 3205 >> stream xy<%#H[ceȘy0Ec4QB,ɖ,eɞl99yu2vz8hD&Q puB 0>DFƀbx2C8�@ާS@d�oM?Tj`z=,�ؑx��z`?) NK<@/<  E$jq@�I* q$B=!~ olnO Xb?/u O]A&SA `AƁҟNopd_ڠG"�T7!? gPsrG~U1x>??c?P/{+?u;C’qx`GŐp R/+#T\U@*^W D*0LM,֟BIԟ7aoĞ` X@0syǡ[ij;SƂN4 >l>;7jzZ>"-,jĨ-:rZ(-)otx*:t5ъ\ߝ/;Q6[PZ{]= 6oj[wiQ>kS8$~ASZ6S6z|L8R$`vgj$wPcΖ0)?A'*-EW{R$y,䳙,Qf[ �V?BX9/^rfl̘wEygw}Yg~Y2aו0ј{}l{*M խjݾg jW-\'钵^3sR$G` Ql=91'q-Y.9z"s YZfFቛO$O@ycW>Wx13ȑgWO*1ДV娓t.֬} A8ou!}/_ ]]6M)]<1(tz6OldW,lPJ?BʲZĦCB4ьsv3{U]ڔ0@//(vP E]%w[HXlx(\b3GOnԿ$th]?L87Lt"ڧf&o[XmXq@zy 4iqC|b@tyyX9 yD5jJV~*G |rh`O�bx˵f72^xnpikuX71GwtIe(sz3&$KUJ~Sg6-v,?~2QitX|,,ݬoBf+YQjf+CR(!q3of771z*ZY 6=P(jIF;G<ͽcT&X0BpKo#p*ρ;Ka_FK 7U"]cn l+!ox|J[+ߪb~>V͛ͯ:6Y&D1b+gf5]8U wH=<@%V=x]͹\ɪ8|%sFcK쌡ٰJ^Z:akn9]7_toi>s$ :ye?~EݵβS|jzk_| ߈l'&)B1AZh:6(l>m1V(+YxA-r`w[*x6dMizXIN<|#ꓻ1.“9KuR4؉/"w6`LvT;؋%ʷ&"KnUGl;О)R-ģ* #\3-r4l/ʣ4_4pm#YX#$V'L? Jgٮh= }w?fYyƮV0_nI]�yS|%dGgsK,qE$<~P.g^EgE#>ȯ~2]Oqᄩ[Zރ}&cP/tT({h^ا.8b+@AO5soX{VAeQ-oxv\1OAsޗKɬWpB‡+2Wp8ի2e鸚3%Chs_Mn(V h&K,FEhT3.ț /njZ;*p$$Ay1s MNKRΨ2rN}g1Tɼ b4~GЧtVou.67f4=oť&xJ{p.W3dIihJ]Žү^YO\,HFj*N SWW߱>lҫmң3М@Vu] E?T)ggJ9�{;K;s&sSI6>2Rd7,`!n[;<wN:](cۣ3;;(3]nM b#*#m)s\LQ@)vSx.5kgLshoYX68 ;0L@WgȩWX~Ect9Ok(}gt>T?j;e.PC7U)QLaQpH$r,uԻӱB-;1`mwϼ}QՎO*)( $_**j \Z%W?_P5qEP4, H\A^L�;=GL=4*iN2Pt}p<u_C\Tgm^Xu!2:ѹJ3ɛ?QCV5KjKy J04ͳ.Kidv/譠[BuxSL.mC>3ujЇ)3SvoK؏ocCĭbtD 2)h|BAJfNH's\>LDn0]-p UҒpe6eЇ 㝾+zWtȋiRZj 62; ,Pd"C endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/QADBYN+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2094 /Length3 533 /Length 2627 >> stream x{8T]"F[ܶ0CQ&ߊИY̘.ƶPD"˶crO%亱rT}>w?w-C0S$005;Zp9 dC  �L�83=l< �d JjO.}4�`!X p&c �D" pi 5iA #`/G A?AYd@ |mT. v)qd@<Dێ; e շAD&SE : :Hl8J~3#6ƚ!$?"H%!9X�!:H}�ڎhSv~/] DwaPd\#YﮇJ<Zp8b׸{}f KH~3CaSC`H]�D�. GѕD �> *$?ov )NєX;Ы^�͟OC|Ѳ$@zCTY~9 5 Gֽ Ck< a\ `2d7\RtHVoWue^$,^!*(=c0rӉkŧ'M-yv6~4I8Lds5([x΀\9ԊiTcVVRt^We89ҟdN[)>aJiR7 *寳ZP| *ZZڊ&.NJtOIF(eI/!mn%^�NۋI=:7YP5/D~h( M}g<U̮vm+mt)O/A|Xb$T*s^G~P6"z8i|2=ڒ=(Ly~, /NVlP ~#8:8ZnmhDΎ<1&&Gy%0S嚍L-gOUcH~#]2.)BZrx ԡ&q |#Sˇo>sՌknMl6H7s&U.\-L-)hT84mԤ{xJ-/QG?&*Rˤ<N#M-Ry/g�n]`z gX0j& %s%2j,}zrN T&o[c؄lfk=KGƸ/imeGqZ=ɘXRP2#_t2*=E\ ¶ܻ^yO?YF&{\~[b8nG^b\ظY`C䨆P[=7faiMy먉UQYٵ" 3A.MTM|%GnannVx6K'fu6TK/]WeB+d%P#2a,w;sb`NxڳV-_%sܾ*s.yfvO3iI<#]~=d+QQ;w|)ɡ|uza8.} bE`C~^<1MАͱZ] ﭤ4U<V<r;|OZg*J$`$lWMr+cB;;;4Eoh=Ej <u⎳f%_& e\u2jμ4]}<=Nkx,@Ў9?yo ~z4Hxr6|hֽ .fӂ˔ٞ87joxxd}j2Sv.[of,pv+z Pw}Y]C} W2]%unJӜB&яt5k޹:[GW.΢!'#n 3nE 75z>>C 2iYeRirF~v#Y6eS#:\ADΟ/~ج?SwC(P!!QN.ЧҠ%"Cci9i>1 w\qgT#,oN\ u�* B?~?%¼kh4N.69ntkZt]WϪ~|;|{٥,~f]٣٬䴶&DBt쀭<@c_b:]\Ri qz22QL$z*g7Z2}dӆnhЈ^xP.Hyxմ1ig}( i; Om}[QNPN5ؗyӰd JLbP`HQq lNXdR'o_|Ei tNw_Cwm/ڈMbAժضz^+1;,TR[CYpD ;vsXI䚌Ht; dLܐ[!}ܷu׆Tˈ//'DC0Գ?�M endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/SBJCEJ+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3993 >> stream xy<ǭAvH샱2fgfӌX&I4V!ɨd %%J(&d)KY⧞<u\sJm P+h$R�i!@@BBD#HABkA APY RRQR�@LxyҐ\@4D70mH DV� p8Wh41R��@ $0x/&(ޓ�TSF D҇灇(GО�E+4!뿡{I�gkOh#|08>$4hI@[p%!p *)aM0hCBz=8oGpkm f?pO%;w p9DL0YIAI th<zr0c<ཀ6$ -А"�+H T+WJJJjUd�Ɠ~F#Y0rͯ:3[45v›ёX8<Cډ[nmdp;AzMs'&Ŧt|s, Fm!&T Tlcxŧع:-k dl#~ʉ$L/'B%rn]_.lKOl*u9s?V>ܳ$XjC ӹF``R5a|ӥ,1fʹB֞cs\d//\PG ~4 =T[JTT;ta/ qΔ}Nkڲ>OOAqS[S8̩jUׯ}pNvzq?&MO)Rt)eK9HC Fj*#I7m;C*H[wxZ>!xCJo(P w P܈p) UCƗhVnwڪ!X$m)duc@;*Ǧ>~/#_T|b.l媝v* =$[/?iS\2F6>VmmI5Qtşm'XhmGTa YK}͆l+8uH Ɯكy~)G(m2ZVbA &,R40jW'g3d}^lFj8'~*3Jci_!܄;do9uVoU_CleQILUOOfUJ>\hW;}jSpږ$?;\@o%FkTz*�a tG&>>;JƇ-?g{ʆ+"[r+φqԺꘀL,%h:z '+-G/X9H@nwP_CMG'_)yJ j_r׍nn飲W.Y<~3e=[ p 3wp;.KF)ȇ?S։0n#i8~JV�'1c20sُM 9*4Bk-:OX Y3Lh=y/uzXi,]Do gZwγǗ\JrC&C<D2F?gHMH՛܈,ˇ*|R[݉eB͔Cܴ,!bM;@,7ޚ,6.&p+N FD ]  k1}{]cM* 쇹y `~ ^竉IEWK; 2{<4Z4"di1W灥9BykHGzWv×JL$[9Ba;kGd$Goz}~0.Iwf%9@k$UepqUVulJҴߺ+ UdA}X$}oﱈm?MfG4~|Kv e1_skQЍtx{γ|]18ģn)kKy*PLj8SN2곱|'Tqw}T!p_4GB⯵8INĮ#NwHLT /uTKs:qζΙB0ZmF^B`2qʭP K_Eujv<W@= HᆲR;#ԛ>V98L;% vDwo2Nѳq׌ 8c]IdLy7<OD8IlKYJ3)'Fl!jn@xɓc[FF6;a1\XcOª*yO @sI6Il_̳-P{]R&:bZEț|-F'V(vV `;|FC iM# PݜiS}9h̆ M)V߮ .})y<-qZc3}M5+F.Wt*e+Ty Gَk:u~e rvWSv;>FcX>![A%?K92vf0γ:y>!yfGڕn̞<Q!(yfw8p& /RA8%CKl 0c%vdfK`tU~iE ۧ=+峂TtXZF6gl&Wެ-  M2t|lܙkif$t9q FoHMQ\Xࠉ׮y /;ⴰTekm񠌯;e!:2.md弲9c7M`2>@roVTbV8iՓo!q:cccu>W3ikTݛ쪞LF߆hwsn>m/4d(A^#/6lEVa.hV*/_C%ԙe~)7޵1,U(SΑfE>HM:!=lc4|엎y8|4Qxd @*E/ri;jKHAf"#I}QmeȒ(kr)Շ~q7 oL NـS85{wIhM$7&"9Z0+ &ځ3eɫ,'`\4[DϬD$|[<΁J gn80C$٨Lx RƖXhZ!B /gI`K9ԭ$#^)]6^{yaVx%%Of}ǑⶅY!cƛ bZ/$kU gX|>SrrhmVL#na(1:<SX~wJ-.<360G@*[-s$J> ¢f8~Luzxrz%Z5)? p;�ʻ5lM:/d>fgÉ8caw %+=`x,XCO^,\t`~뇯=x,ܼ/ bg*苙=8_B6 }$d= )ZsQH%a eyѶnw C=ժ}DǠ9^ގc,IBiSceX<'2|0Ș^?/63HجW}%3ѻu>F<"RwOx1rv n|WTB.J&ar#^;7UJ vIp >F͗O)*blF%;mWjWYi֎�g$YƯNpiZRsjiڨXT RTJ2fHh#җkuIICuvdF#(8'-AS3Ud-lj{]ゑsː�$ >"� endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1439) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019143940+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000029587 00000 n 0000030177 00000 n 0000029852 00000 n 0000030030 00000 n 0000029751 00000 n 0000006431 00000 n 0000000009 00000 n 0000006678 00000 n 0000006492 00000 n 0000000913 00000 n 0000019043 00000 n 0000018853 00000 n 0000001829 00000 n 0000022551 00000 n 0000022362 00000 n 0000002765 00000 n 0000025480 00000 n 0000025292 00000 n 0000003711 00000 n 0000029930 00000 n 0000004710 00000 n 0000029980 00000 n 0000006365 00000 n 0000030112 00000 n 0000030134 00000 n 0000030155 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 30272 %%EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/PaxHeaders/nomeaning4.pdf������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017155� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/nomeaning4.pdf�����������������������������������������������������������0000644�0001750�0000144�00000075520�15104461330�021152� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/NOAEMU+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/TCDBMP+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/EWUVHY+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/QGNGHU+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1662 >> stream x}WIs6WjƤ zM'n2N` H�&} "o-,}noĢjqH,WqɕTJm/|s*bÃ2e<`!(|G./ Qd]چsv \dc\Ug/v~XJ<+$ژ2k /ӲA_Pf@<"UM&l OWw˶N~&L*uhX7O4o׫ڮx[Elvv΀{(A,R2 TI 4E ЀDp#kEG}J> =H~5OH*qliUyZ\&jJ׊d֊I+^ճW*G~NYhfr+PT&P(#PY5$g"2&o>tkUM\+/:')J�V;7fb+]3icΣkUTumExy=O&�RpY1xWVm򠻥9 M ,@U'Y-h^'5!}# I$څ0zcFNPݣo!V $ig,K*YoqkːUI[iU:7>-ƮOO8Lv*Tyȸ~W 0`7t1BNܰ &S Rs2\%qx}0\i,S\2V$y2-9B?zLfߵah$9z&FH)5&=(pH#8ne^zuõg#{Z-n{oc8# H&DOy(pO9 +Fsz</ nk=jwd x!P1]_0a*DŽL8=CjԱ7i@&.L %f:Ae dR…sNq4(F3<ӦB /(U9TɌ!Du!0zÈw'ޭg>R|Xt /V¹jl+I%'=VL`?0˚\9յJ?L:=ףvQ4mS8tbV^jEҠK$En{{fiH$(t=R۬ ͙J |0xݨy #S9GhhÐ7#63(Ȗ8 q# #g7y`ٲY;Z>2:�NJ.iRːEUu�3v&nt?k?,\"2ͺG:޼3v9m]%㈓TSXn1g Ͱ)9d4i0ItxLCy !N[+lcB8eŁܶk5{cYCz@g�`]1~n&=-g<Z+NG3 0;ӟ=:+࿢,3%?-lu&%,gqѨP{63ow_^ubcoDwC> endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/NOAEMU+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11503 /Length3 533 /Length 12060 >> stream xePᶦq,n%Cp8۸;A[pw'{p9gso=zUS*1ٛ�A`FV&V>*+ E R h I|�V^^6ɆH wphiLA�c%-@ `�Dmmx t:͘YYfV`  s{�f.Yr:9d0#2+R.vG[\@' R-fV.v^ 62Y,JY9KY͔�sc[g?@ٿC?D%4YUT6=Ƭ3'+w.=soILͬ@�51JL݋wXXx\>Rd*daaeg sVMThNiVY ˩h^4mW췤^kA|h4<xa L89y$Qs񚅤h@ojNaBy!e)ф7+Q`)/Wj[VtyI^DB&ut55kucoͬ{n!2T)kNcEO{ bcY+J B_G>#W4oSONft3So},8ot?UX.)<h$ =? R5Wѕ$22GȒ .qZNj~Cqm>i~g)ElxPxTZ((*}O2omkOo!5:C<=`Z N&d^ MDBiCd8cLa:^ @<-Wcɚ|}Ψd(N `DZAw f0He*5Sd==a[+wIY ziڟ7fj)@�SvRdN2ÇxB1Q%+_yu-.!f;(XL܎HUVM/dm� ßu63DA7_Iy&夺(Zlov0u&9p<@}zQo$}.?)ۃQ~,ՏYjϪ"H㪡E]^iy#^7^/;,% èAtڃFX K`\h'(ǼOO#.Z~4U{ 'I`b&(O&%-6 s je zeN{<2#JUݻw t�BFph 0̄OfO:{Os:PRN-OVGH[5=EY?LEHᦻ/FTz7H1OgI#H+OJDoY cZأ,x` Zv# FAImf*c@Z9()ɶۼyWޕ auU)RjU]^+TA34VK$={ތ+ns/ EzUis|�KD36c^_ɑ1J=lO4S!j^@fOڕ^P|g;6CƝT9eo:@'Rk@BNu RQp~c}* fFœ~T'lztYDQuM{ א/:b7hdhMV<Yf"bFz' r;6Y$8n*Kpѻ-qnΣ)k`Hi_PEAuJKƠwpqtG=JS?6F/,קv Kkq*,%[ZsWn*jtK(t0?_oY T?LB`"[a򴛆A5p]<NO@m j\t~eH8|OS < rcܤy#ӿD`@/lJ0{ WOZhgF!c(زw9MU7ᅢ t!"ý td0xbXh|;bpMbL<_� 2kAՁe[?;,H9PLs3D/0w{ۛw VUD|nH[A^;5dx1P`;|,aO&Nt+IU3P똺%} #ö07v&#HDo%؋$Qܐ *COB,dLzp-=7 lXE\qbܒW.-+8sW:n;k:NjM.'#:.qgZB o;6dw;-;r@\z(a jxQ^"9f gjv1Eve^F@q0HMkVRjtz31յdyj6-vtu*(lS ۖT9#k=s3 7=8lҙ; #ar`t4]AW B8TfjUlV!yI<f1vljZR\_-'Җm(vLj2uM8x |#w:;Q0ΒrCL|-cD6T~2:zsv$5\lDx^G%B껖MW;WXb[t1)2yȋ(..e"0 lyjct9{NMy'E@#Xx n0~ׁ1Yܱl(9LW~'l'Zu%D~]̃( 佒޸舟/|Z vد0Aҡ9c6OPHg.wg".q;[BArn+UOwxDUiqor ^"mv5$a޻lST ur Oߦc`f KA8 l!_wk\MI "''sMSH.?|W'Dďʓ!JchUOx?W 8a2uGd׌ͬ"0ڌew{UFr 0#PMOQιY�qPdNv.2&5/[믶$lr(age Ú`j\:c$E}t7ed2x o”s$*%x &g)O *8ARthpIdLFjheuKtbRmZ<*{8lAdsxjD"7Q@5hr>y)9ym3#% J@T}S-LISsmn3"--uEX~T"+q+gV](zngImE U haP,3s(_beR4phr ]$O$-%4b ^=,Y}U<^>Wpqӧ_\?噦]Mו yn D)ݟݞZM!]cAe.m*8kULΌ#w+ O%b&S{lo<RV*Z ̖)]SRHQ;֚fú՚ᆉ!O!u W[n emR_L_ dtDK}ZcGB!{7y|O ";ˇPql "7e0ΩUKMhhVD2X"0k!L38 gD&Z#s7>U~>@[ هI q%H^}Mg[~�kmo…oGg d{ý`ibēF:+^4Б1sjja΢|;d*VB5T`+75ѐʽO(|C &KN ݑ-! OGy=˖\<v~eW~#Ǘ`--uSB@vg[I* Oү\sA1IxspY"j c ck c~Gρ'7ݞ<\ƺ3I3P`eL]s$YёNs=MX+ݝfNZ1D'<:7„Ի+i|F֡ ͘d_J؍&{o*vb- :.+,nSVbV?ػB9=Yb|[*CW|*8SD&S1 u/(]+:{Eް4v.4\]%2 : }B"\^s `86vOJA{tk`�1tK^Tu1Y7Y] RIe(* @tu0Tʃ.C%* bZ2\t6 dzUV^ԛKaxx5gh,i٘č;tX2^ú/6{sM;^q;UWۣt :2rowYK8Om.4 ( A6 𝐸ir7(_+I7 K5JESKK*47ZU 2oCJ-%:Uro*8Xi 0CY ph Pc>z2J=RU\uŵ z KPMiA!+pז5@1kA!AG,?6�9.$3XUزxLUuE6,)7ħմY8ұu+v<yFq(i94 Dp@ OGO %_[%ljnu?0hucw'ջnA]z&$oTt^ q]: pXIfߥ7ۥîLzH'OstK] [FkDR \CE.ݳԪ,rw/�|iXùn;rfL@ZX{(!>zrfSck$>-S>&Ld�IapyX1ls4uyptm! <9.V;]-%~s@ vL>"lcNkZMmsd{y\|Kl[UBڷy2MU~BZrǟ~!ON=cZ'RwStް8"Z̞-^IcN>og@BD+$~V{͑k}N.ث bmF?2#1J!H3.JS-ʀ?F| ޾xW_,S_ۖl837ܝ.HԻ"#6 [u44)09o+S<F ׁ ;7f%df̾Hpw,Ys-ۀ|7Kv5`Cox"&̓?MR#S#$O('#X!c_i$͜Di\w*ն g g hb?ٙ'<If88;;[%,;1AOR7Ftܧ +&794+]D4C}ͥ[rDm$EFqBXXm$DMD�DL9e2Q/Lu#[Ur SWMJΔ ArF ze+b6V K 6MOs5Ha<_n~ocp%q=ӵn%@}<'{GC|.~F<kfh3`}>#_W0 qQP5K"[7-Д 33>5y>rpbq~<ZꟉ`B,/ ]".ᲁ(YXֆE> vrlm0s& S$|z>uQky|QymLJ/g+=s!]Q > &NJB䇁Qs70.6H (hj�Eա�%U'+u?dh84 N*GdGLB Rj&*VDzYb k8 ~ÁOL8Xb3FJG!$$OYOkV2mv h 2aq1]ÄK!,(.;YK)F\C]B3\HNDFmԶ`;8 zYUEǚORW|yϚ dYOa*/dģYpFruOzd2{^Q7hꡥO'hR ZǽcGu~^"?Syĩ) Q/d0r2Q;U,j  8IE+M H}8ӟ ,]8A!*DϿE9LFSKQOCe̟k#a.|~<VD̏[د63r}ىKh߂t.#\X4rD͈T FJ ԥ؃! 'p)'obP窿Bi)m^µكݩǁ5cºk6˸\AMeZ"4RBif-Q ꮕs5. ݌.H>$-*_" )'- O^kQxt{cl_ RM]ed3Ogs20zw5x:VK0-Sw  c7~.M 2_%š\1A֟.St�iD~KGr!uU<ܘًGT)klB 3s}uƢ> MUak鼚&a!$/=( 1_#|YKF;rYW%Ї7ݙ.sѧ{%o yT vA0Ec[QkyrCv8)VD( otb1IoDت҈웡;;Ã)4Ǔs4{d9Bleu~Y FAG拰 90153yGlɈRsU NH{(eM0,.?_,3+ցGy>5 )pt gw=D`[mZz[Ue%"NI Ic}egwg-F�54 8>@5VrݬJ�#uMr%ݖ~bk켁9|uD:xll)"[zK:GY-st/V֫oe=1 W,ϕ0xk̛M{N?]z^F2c;oS '4[/&({p3nk;ifqw l1 OV#Q=H^Nx1I YRy&WPr|"�#3"^(\pd L7`(|=\ea9#Qb>6uVpjf[3M;`EoWi!hLҬWEyX wV1zD1Sx(2|,kl>Dҥho{Q s1-Dd�iMNrq.8#1<hy=- ,][ӳCcxKmv4 [D<htOFK]ߙb$B8/%%dXW0|ԕia{mp"k?C<v޻ -oJE8$|_Y0 T3{x0{bɚTy1Hr/(pZ@@"/uZĘ6' Ԝf_:yH"BQP˄))=V1Qz.օZ$}1?B= g=Qo">:ȴE�Rg$~K&[5SHn%x`R/6@%QSR�etƽL.;% AAقRk{ʴpmQ2"D'ԧqH*R>FAs5Wk˕C?$ w<ꂣ֓1FH)@"@K#M e< "+?r}H183о,ցbҹ #BR72.,w1z%!^J G>Ryt@k>gl}&~䒂=W1hdދYه_]BErrB6QnCǯLETs$;LV\b.1`Q{@O!ZP7o_h8[B9mi:jy0 EW1YSvSKQ@w_t bX41_Mh*~YGgo>8N90;U̕X�?h>V,ݴRg@4oKp#@>We;2 l Yfz}!~U|[a\U tjz@8N[-~nQ6Hi|h+l$v$!*rDCg5-{ސ}n#N̲~J=D=ިa !5tX{86Sґ5XjddnlG:+<jni^7dܠ{G6gn7߀Â<AjL<x er۳N_=$EL} :,2AgTqk<3Tyx$D)ֶǼO""dَ-h?)Xqp4nzIuRUIú~hR+.j Ȅ /[:wvBL|=Ig BEȯL s^Ǣ+Yf*c\ yA?*K<w~qxQS,eH>y1l='0z+~Jd7U=L)xw҆RgTt䬮E&|aeΘvz]DCXT o6C-R#73,Yu0Ցx$iF'cN\q[ҼZĐ{ɮã "ջa!#U-\>AQ1rÅ,SJ)F7"o FM"x\}Ts<?]iR ޔWբ`&t\)tY;vĽrs.?l崎WN0@s'vYK5&L)JM!52*iߡbѮv e=ypn2ߤi>U.rJ-tKvͶ +2+C|@_LO*C휥2ķ2&UߓIxj9\7g>~͐*/KOU'O#iGq"<OFT< qq{i7 v;*"64M/*m[-}}FaG72o|K1}g`c.\쏾{>WP $3nn`<cx)Y:̡XypL kiD`"T?iw_dP>mpEy)-3NQYuSA`$%{LAmD)&g5 {Yy1JRC.\&ђGP$^bL ;?MO3 5H]g%4VymT3|7 5 r0.mFO\gP qO$!(acqBд|%LJjl~Ev˗(,[!ELK'U٨+i%HT찱6/9T+i +Fb0S9b3 ).0J%/PõËj]wǭ&�bF߭;(ag5y R37շu!0 ǪlPvdbAP&MG[9}{0@Nzw'?@[%=?~q!~wUаu4c_nQ8:ؐlץfz"У#T"Er5>H?rL4#2B>6!9^U;AytDdG'Bzi<6ˎ̧in$X[a d-^U+ �r 7m z%`rps}o0Ot@�{0,}I'V/(R@�M7FhN4{KMz):v`Go LO$mI? džCpOzrvNtR:N(Գt@-(37>u缯:}�N7M3<g&ݘɸNXgfE!6*eZmYG@.�Sr6m:3~{l/=6 L QY s !ۣ&2tC2:+. )n iٚU]˴{nOSG4O )qT wopD;LT}_[62Ń> I3hה0Ma,׏X+4j,YYyԹ ?4M0`TzNUm'�)B3G~ ^_=z'w23]-:]o[]GĊ܂.o5eOgjq=iWz8Ópqtn-Ծ`k%P%Y}}|]Q܇?t"*tΔNH͵2ٵS?w)D?,>:r6T.y4l#pAB9ߥ^ҧ7Ƅ޻RoȘq+j^Т#G5rUXVc{+_X@r@"MU"X"֦$SʊL]{I DnQ}�" #eo-@; ctֳ^\ܡR'* @Rw60/ѺPzž}x@dh�/{LK=y׹*3&W%.r)O(Qf|u!q$g[`ޑsT_ ECrn̶^~ބ-:=nq,#pQ)&9#FX43څr)%2J&>)kma�ŠeZ{S>EDM \e=a6l2^'fAG'#[F1 atJQ3+&ᆮh@bέS�V"k>jj=YhY5l.=fpAs9bJ7$duz۸̊U$ "D={.dV󑶭3j1a~7F"CHZ\4f l:FJjVUZcH\Ed 9}n*Lf?\Hg{RIʵ4N>ق"IIcB-Z߇KC,≸d%9x._I{:<̿uelGBbGǓUS+Blܘ>;jmy'(5c7[!se;䤍83'/JiOd%b0'c|VGa$ [k&q3%P!HǴ$?=qb3^IBD'ΗfywKa2^nzrxp_ ġFZ%C5>蜛.XB[ QJX/o- logd endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/TCDBMP+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2664 /Length3 533 /Length 3205 >> stream xy<%#H6-72fLf$A2(BY[%KY'[bG{|s㾮}ݷ> dy\02p� f�1$(2H0BA �@(ƠbPUрA 2!?%PC*u@hB}A h,HQ��}K�` ��&^�QeF&꿥1@R�I* qb\!Ľ~ olnY?/u ]AA`EĀ$Ÿ.opD_ژQ8,Zo)l16bh_ �A{ hhd`e+VEa dC  M` >EH$Je`@ $g$wj*�BE*  N̢I$@yGhHt: <ٽ0夾"u,J3?H̖*sm#/k͚ |Eg=5t֞�Oeg3]7%A X Mn[n#-`^Of"]$Mv#`k`nlug8IpF2/Z4NT8 -x0~Ù:t1FgKT|A끖|9=cw vƍV}mB߸j3{y\O%_/Xe7m̘oeyWw} Y~Y2eד0՜{}l{*ݠ [͵o߳+˖t@oGXƌH)ũ#T7G_NgIl|K6M8W߫580i6bY/F0I=~C)^ef\\�#G]=HBSv[kNJdѸf_N0q|M|)?vu<P~LPZǨ|y]cDA+Z@3 + fsk N 3p4[z}EkGqOH/'eHZ,1P%BⲽdCqu!?dr7-FȐaBMsS]ʰ(,hV0h)^w]Ļq eRxOʁs=oP9!Bpq]M)OjÞU  @NRLۍf q_J\WL{PS .0qtGw둴~? Ybdj۝Q{cbR s'&_+(D&{%K;)*ʬ&ndo&""?~=Z֡}9{aMU%`EϟdxyUcp; 9ܻ;ƥRΕ#dz^9'h if}Q5R 56>ey؉W7_ZV3ttGRn|m~2aZhU^D7kWTɂ. Cnq"mNV~f2WOplC{14 ;V?[)[k~BQ̴{-|铬 >vn#ШZWK_aw_Y:\+,A:S_ gZ=I1Mr9JoQ#lP"Ŝ[zj6~Q^lfu`w[*t.vv:?IN|3Ng.'wc݄'ss /8fe_r='39QMhb/ޚ,yZEV@zK *\Җ>8,4Iv ϴTSѰq,o⠡s WV}St(MɄ%Z-:fI=X:~EK4w^軻?<;nnv@߆yBtÌ_\:Xn dv ]";-XϿveoǓAIU}TE|-J >E WSpS÷}LcP/|\$wh^ا.Vnk%=Tۅ-߂XwVcS]g]-9bl/ݗ<Uea"(Ccm+SMY2t-J3 )h{.&0D n(YDj:Tj0.[T,niRZ-4U ou BY~i&L'Hdg4sM{g5RAe^l1V\p#׉9:YB|0}7VP2Z38WQfq4SVY^yOwv7< ŰwC &/}v =j; M\N׼pq`2?pPf>$K{dC Dv#6b5e)%_9)YCX3ur=3z#уB~ZF a!r۫2bߖ31k7;\z:&ۛV)͆<t !J 9)T-t:z0`[<9VGubxF8Nz\4sO$ gYDk{@3>L:-4B &bvYvԽ r.T:0I%GG)%KǨBnhW$tZsG14YH4=]jw`oz$Fjn@NѯiǒBEZHL3y1h8{Ӷ!A2ų6_/,:D Mtƚϟ(ۈ%Z|<,Nd<Y~4"'i|nVң]}yҔ,75s[PL^Q0cbfmYǑR qtM%|Ѯˆ̌wuYݕuV<Y*M)diڛY*QKxym}[Zf `wea`e&6Z657Cmh᦬n�Q$2"A aW endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/EWUVHY+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2687 /Length3 533 /Length 3224 >> stream xy<T}eIYX طa23fH%BHKED-F"e˞~^u=<~>sdu"R >`fop3T �L-88(�fTZ$T~�N&)=��J H �0 a� D �dO(k !hA:c PTv)TJp$@IM4pP5",83עLJ#順˜ A:Vw8SjX3d ?Hd9$LB�@3_:H!awm�4]ݬ<UId %ܟ_5�#vOfN!Pd?a)D</TԈ(u]m@]K H@O?rhhtpa/F`I`H_'QV]O~4x!WwHu/Kc 0!>mP`:%gMY8AU}%+w.̪Ůټ`Utp\B#_ELsTFߋS^ꩤ6}Bq  nJKT2BK4:$N;~1uטt蛕%cIYUvQ ͩ=c7 >No'/gw*(?ؿY>WC)E)wez\5sv(J<X)Պ,y !<Δidt. $í{3Y"oΨl-y8eW5M \+:*;`J&J?^'\P nv 2 >-Vfw{]N^ŋr"qh^Aw`$.%M5##U`y }vfxl&QcptmLΎBYÅbiL.X(s7Ƶ@Q,Bs{]AenX;9֫F.SҮȶt%<D_߀s?�sͣ}/8g4l+51ՄTҹRv2G[T .^X1n˩s#Ra%f%sQy\*ye-},+ 2MQZ>ӮĠ?GZSCޏ$JY+^13Y;10 Ʀ=r]zh&K5txaQ\AQԲ `N *de: x^PySz�#E+t_w%YG&ZMj*\\;ɵة2YS]BmD׶0QKܰ첦9uBUHPCx 38*yHd-x9 &nW_`~,|&X Rh<@h-x*&-oz|pe\Y:&8uH6e s)?յI-`ϯ͸y*?d_u1 9o{ZDu*}~}ƆQr^iˠc<#𩒷tP#ei zuX.JE<aW5`0&"a`+FU|?m(uLIQ70f? O=︜Lltly擜i2/1/$֬f%<d% 0x.OWix-}ɶ۸�wzz,tf)Y)9ݴgsf%uÂmERJG9b28xtтzʿD?L|'Cp-ug6Ys"e9^2? a9FnޏQE*rX yԺ&!D+I3#&8"Ԙƻ'2E}) i9GtCI{gQ+DSZX?x57(^;I  [zrZf2swǧ*1sN.%Pu[Q^dr|l-g`q±}3U阏@3} 2h")ʊOZ-\`E:z>7*+i⹄<vI#Z԰OMw  ^~pءv+3']`^Ynس\77htp6P+f zb/k*-ܿ< 35t91뾚yakZI +ol˖7%6%7ɲ1i=#T1CT^ sĦen ݌1O2l2\W9= p)>|az? Q#]&`sZS("66;F5l#?ϕXdWJ/@;* %+ X'< gzm\%|8MZz{xΠ8B]̙z\bě5:XjK1)7]~Bהk62s'uZ*0ݜ31UjĊs*G. Whld֨^9O5:Lx\�CsmR`{s/h[BRe.p,,/'J h/KdZ ilXy :zo;`uvOu켧pS#MlbLr Ol'V;ۑo˹ I:eHQdr_hy( mP%_M@UUɭ_ -^]/aEz\{T_ƅ;RF}3'_xнʨumAڽ҇/2ù%¯P'8:!:/*)1v0j">>迯u`w!oʪ?gr'7/p8F䗊TvIJI7nEQF@D4"]s9$Zze8.U C D EV<xcF@>K%IAf :N%DH܏ɛ<63`JV\RI3 o75O9.%+~ `%8 9*rlFozFunm&u84nC+[GT >.-x�B03!xzoUuK endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/QGNGHU+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3992 >> stream xy< Bj$KL٧d02 Ѡ,e_JYY/aBY⧞<u\sͥuQh<( !&z6@@DB@#< VTUA@]W&�D'qu#!hMD7q4$b@_xh/%�@@IDbp�_LP &xsŏ9/)QxD]�ic1Cp,+מFx`0=<}hBpZdc1JD`1H]+ Sx`(8t :;~^jzRg$rAY/Ɂ_OCQ+МԿB*@iy`ja|+@oC q߇]0AH@ fE#p@mr*x۾ƌep+"9ʺN!~A~Izlöc3_W¥nfK0*ƖN~]dW*I82M(DϺB|Pus4ja}?x bF\euT,vh#m<XfNߪ/p7X2й$fShƑRy3ѣqn}3SdR=gd 7/ ; M<qT;Z˖pey~$r5 HTUxyVZ)`JG\2lJZ4[ :)zNQfksׅ-Y;nxN+X$vw™jz/TK7iWi7#?y~7-%n?>8؁[?먑O@R؃5h7A" Cz[z�osï_l)v�[ҪX,c!dus,W-<ͤc>}˧ WxtbЛyLa%m5<YKN-/3e#.럪03I1P ΝavxśgiOPfVJGL/KaqҨeu}p�2KC%rLa H}W/[0y�F_KIZ~Kʼߘ^+kds硒C Qz*r}):*+`"ȫbj"A\wlҠJS^ W]䞷`? ӕrj*2l/u1uAq?=3@/azȄ-&_e/ۜv,D$9g F[7}ZƎgb)Z-sc%7N?k",YGkF7v0U T|ܑ٪llbMXnw9{7PxO؋{_aB!>%-OҤY, ə8E`f|e;l}ԫ<+=ڏ;xUn-X[3ƧmNO[L.,HJ^ LH?޽-eofi+; ?blcM*a8cwzɾH:-`l&N̆Sc8}s?YX@KaD!y\(A_Y%c}NfWt Q14ҰD0`y(Ɯ_z΃///`/n'/D(_n3Ls5Gȝ=#1e !8lwvqYՇi4S;UUC,%)nsfXmoQS{bxe0z L%IU J1Ƈ*?iN~4,t2.1pK37#M $.nczIg\Nu2VQN_և:M D:+ Nuw`x}NCmFͨ4Jˏl&|Y"֤Z/s%+&O3|i*Og 1Il3}QM%ƶo( }4HO1gJ_Nft]bbvPFM=ܵ߻P#F?O+];ٿH⟜xxY&f�tҨն}KmrgaB\<aR�wծcR<Kg9Drrǚ(T8ֈ͋C"=Ul4,è,5;LiʜȮȚ81%̠y23Di1/|Y/yq{p F!%]cX3i_Q!;%n4?<W%gR=(=Ĥ}$f!j%8hRtTO/)ro}Ą9HU7as*ޔɪU`~Wa[97*s.t'&)T'Ѯo۩JYR?ʰYjx;=�+%CR`8Wl ^",]*\ b/?89'Ne q3͟p"}q<!"^t8*ڮ(>cF^FW/oC{& K}n% 7.B_D/H%ÒRIŇu( h&#vlKӃ9'bl`2)F\kU\z AۅzluCsz*~߅Sf95$֯^ljg|~gW3MB'=W:#уA1ރZڤq.4cx{ )22R#9(i5M"Kf6jIA=ˬB{%~}@(Ӌnfk?(VKquP=*Mt1YtgVQ?@~v NdLi_X V6cؙ/ENq֚?Ŵ6=~s6X4^%kxCqJ|9J_bx:[£R^'4hEW#f^kQLB @d!G�N6)NɋLᮆj#^`SGMu;-iaFU1YnkrQ1W6\N[G}5@' kL)t8 R[hX*@#Mz3kLHUbE+B/,Z4\}wy/&CbD}kyNkií>Is}` x=bgf΍Rw!ϧ@4OL;l8b&B, bh}v+ ?͂a6ZfiF3upn^@A)vKVUJb^ZpK9WLNuo^d!fgh(SOG_< $g:;/XCg,\>1酫:zϛppbQ./~0swLa9<}^ 0|-m~`Uu봋Su';:?Jg^RqűT(fºDZO~ o=5'6'ME?~Y>=x[~l}h9Ny戁=-obVd0QwL]Dk]_|hbT@GD̶f0={!s13QLd}勵9&:' 7ɿ/:_iPۡ/Ys 68в̊ .٠J3^9c_׾>1ܵ!BK3DZɈxLf'$Ò4/LCF$5JvW=4g=Lo~EH,A =w�_5 endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1440) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019144002+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000030264 00000 n 0000030854 00000 n 0000030529 00000 n 0000030707 00000 n 0000030428 00000 n 0000006512 00000 n 0000000009 00000 n 0000006759 00000 n 0000006573 00000 n 0000000913 00000 n 0000019124 00000 n 0000018934 00000 n 0000001829 00000 n 0000022632 00000 n 0000022443 00000 n 0000002765 00000 n 0000026158 00000 n 0000025970 00000 n 0000003711 00000 n 0000030607 00000 n 0000004710 00000 n 0000030657 00000 n 0000006446 00000 n 0000030789 00000 n 0000030811 00000 n 0000030832 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 30949 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/PaxHeaders/nomeaning3.pdf������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017154� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/nomeaning3.pdf�����������������������������������������������������������0000644�0001750�0000144�00000075542�15104461330�021155� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/DBSFOS+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/TXSURH+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/TNADRM+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/GUFCLH+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1601 >> stream x}WKs6WhƤI$6Iөiz$HF*@I}J"~Ye݂׋WMzq]$M?ŕDJ)n˿~|U2"#R)>>*U7LVjR,(yIYZ54#KT%:M2-")d}_&U_fv/ R6$72?\.[%xzK4{f{ fy!xBzU\ˤhf o%?2|nr')BC FeE{!FƣR1j@d@|S/ e` epMfW|< xs01 RXyG$yS7o_^ZQ@͂$a=U!UC;7f"#9I~ x~,zYBmU('F(* g9(+Vlu˦ōtW++ʛŻ%T<(Ġnn &h>h>؅ը]x=0z/Q'S){k_+o!q aYUB37S"1-B9Q-BipXxXZ8k`[ L˴x$j$JUdk?Y M>[,ňQdp*NfO6\qE<Davi,S\|euji2mXgRIsLvq^ކBaKpȔճajQSdu B"t#7^ω{O3;_Hg^PGNHx?L�'>)20,Њ 4+Q`Q< c.pPm&>[LY0eCN(8&fa>!R鸥5]Dq(!p%ptcYbԬpwSxN{lEFf#IPӦe ݩqLB®B/?W 2j<up0zCXQvw뙨-a;<7^`u4菕cC Txrة�jP"F*ir@Ĕ*]Fc~4ݞZfM@7;[a |,\"q=-z{fm2V3HP!Vz$㬇 ͙'M)�# ` :W04;UDy8L|Et64֛Ȗxqqc "e8?YdɖG΢h쀌qIY4tW0;ƢP^PUW 0c hčl>X0[hwcW$Хn29I%J*Kr9DoH!gm,>{ȣtgF ; %!ۘP1:@3v_t'epC�l�lLu0s3|9DKx3�33#Qi¿*#8}JK JJp/ ggcOz ׸rg~cu:%./ռ endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/DBSFOS+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11820 /Length3 533 /Length 12377 >> stream xUP%qww6 lܡqƥ;4n[#C9sĜ;/61UkW+WDR}Sa634ubdDY,@ff**QɄ 01;rr" PD,̝�tPqmL,@�y_#5@�[[#@00rY"0J\LrhIJilgk061E`R_c ׿K8[[+laZ4l읝L�v&.0Ϳg@F¶f&�,%,LY8LA֎&;ILDEBQ_7C9-;so[ؚT@  w(;7OFV>cfp_j?M�\<l9;8:M-WEIvG(ϟ_Z`~sҶW5ZFm縏 7xOՎ@+uD!Gtە D�zTz`B6S'ʓOR tVZ&EJoKB$-EUFJ"=b6kc+ki nrVɐ+HdΖ0^ކ=0;o|z?"_}lM;l)VGY@zn^~&3Q*:X^MG3=~@=wGhnF8E:5bP0&S|-:%s# u~w9OTᏮ(#0aOw|S׳y\sp/cӧ|KjB^ׂN#ZіFlMd+Q )862{(*iIԗ}p04 <X42)QW_Me? 'ٱ͊pjo9HbFaI8c !?ض6GeBEη >rw+z !}-;d&É>,Uk44"(%x&7WEa3#?ar_MY̢N:G?bK2 &gx[gzI5*ݛ<c(${"K0 AZЇwNKhPOdn1ʣ2@*T94Wg/ItQ퍷3DUD"0;[Rpbl|l"D'^01.ǵ*tTMcg ga=y OĠwq=la޺m- E~d_bW IQɸ',[ ׅW` do7FJcrdeuK3A�U20.b~ z$%`1)Nug]$Y[CIgfn'ãqdO\e ,Ȧ1QSaxnFa^!Ng3& #r2l7+Lvϊ cdZ-*lc=])-ReRLۗjΤ,{5 W_`કr.ܠ{Y&HzN~IzcXiHlonʒė21~װ@sVc^pT~(<g5Z) tO&^;VCuV໶ 3i EM;v]TيLt 0!!rq J=Y7[V:5c<(&ڭ@sH ;$$oE$|=CXLĀNdbAvzG*cTou7|v"Fqj̎z)l[msJ9n%$dأ" >ai`_c9#[ZIT#\1{e T!N, u'8ͲS=ݯO~w%cymK4 6~jǧ  Nyn 3pQ#M�lt>ep\A)yTA1.đST HԥזMQeR[-Ẫ)mLD},y[VvrgɪЁ>X#$]R\GKsD$+壎ci±mA}0 Q1l# t l-Ԝ^~7n8!2Eԇ<t#6m罼؎+Ƚ \,к.Bs0Cj%pr8a-AE.^n1BByb!!6Q;ZԣT:iJ)Sghi3iB:i O:{xM }ˆv1:YDcSLR;z4a//(vʔosE}*1K,BwHoNr41^N<FI6j#vR'Ya1q դ&`Ƞ ^Jx6R2`JrAաUSF0ƉF !:[g3vR2<*z*%翎;h:r]RL,`i&p=D�DNjb m?y:rJsp:A'P3( `Sp }IOJUD;z|Iv+Mh]֎dvq F4zu=ekc*7. TX.><Hz۽aP|(КWy]mx؊GJ[of}lݔTmנyC/H+1}{ߵ 5@V(IC&J9{^v_#ɽ )vrj>U,>F@41J4|@)gO ̺㖸V So6b HgFt^e#|'֥VQWQ=#9<ZU^NYNJrJ\)tyhË"6U0q.6xJs ZGH `7\?Od^ұ_s%@YAޑ/ (7o4laMJ.3nq{<K7EZ86?V-S`hud K)2U2 wo >K"wzbv],Pƕ"-<W`obP~z'a}SFTyǘcejl37Y%)ׂP_WBfj =$R'J~_r }_ZgvB{b'Jɥ^rpkUضNǘEd#cyi5]ЏM [ 8,W֕ LV[ z$P:qa�մ"DVLDk٫ ݆n\r~›9> s0m,SDͷO(: <h/;)q;+YAo 馐M]km4[X4fCc&G=oO\3HM 7l:H\`+;n~ .U&،DYziE:7L[r9}|zU@hrH>OVQ R}8v;9wc+*_aP_[d`抹\B#AHGv}UV}n|^l+<eK!hTx5_Hiw 40q$ڒX,aОQH)5۫l7s9+Ӳ�ja7d6Ղ;NK &*wsJzg$0\1( –I)kTj\|_X6# Mgh\]j2M?_3a ]gzD12! I ReޑEB;+>㈙uN$m2Ʃ۹W ,n&ՐAPd[h|,"�p7%&CIDPIzh]ֺty]7WH8]w'C`OΕWS필`>$ݛ;Vz!.Vן *Xhv>׏ 'Sb}CK05r扩\7* yxBiy6+Dɂ8s%܄S,eS,sPR6%Dt|;|?8{_.>vqL=//t}M&a\ <~j`ԉ}+@(z:1ےbZgٶF"o>@IxKv�-ɛ(F7gz㶨pD_YOY fA�P2k-vmח=1z6[O?cK7CaG/;Ov9{gsqzؑ=\)ɷJ+Iv)%(z9DT7|s1�?/6cЙ'[RsH#zZ$&%I4(\‡@w@[0[=3ZdO4F\-<T{J2N$v]7m}h#$̗`6 3R0�;CUyf}F*\Ε{%h"]jZs? J!V1} z1GSE @f4D7ȸo# /H%TV MZؓ6ɼ#[Q5]mNrO5s&]Õ! |@/ˑQZ!!+QİY8wig]x5z9;d[&B ꣊;ABwbLEΗBE[ϕ3!B?M5FaPCLMx$m.Ų@Q%F5w߉ՖC֦}$ 0Ƶ|R.4!g"oc8HiUldEY?Bͣ:fih|*вQK5:B:5atOzո C>1t07ME{BJ0sq{wd]D$Z&$@Tz( ih+MRKB;4B )R?jO=o`a MU+旽T9$c$2s/2UZyf1S,39&wsP)f$62,6ݻ{H;9=eqxЀEO-T=4.iZg;, l\ *(}+SJs0DX_.]kϷ{x0_]PM Jw,0bŚx4Q JZCjI[g"_;\8 P]e{CozDj_d  nI?3(PayRBIP<D5�N"V6!dݾo;V:14{r8;RwrS7|])wb{w K]d%h7b @L0gQMGDz_bNym̳!Ȱ-$Y7Qjfd@Mv&9zՑ)g, Ok n$(\jG7TQǪ(?:#)-ͩ^MY7'lq8{"ngOcH k`pz㰺N>laI3Ngf.dp.Ñ`gX3Q?\!~XP0ͮ61}<;HʪHk-Ă#ycw- ֔En=iv`ZJwE =smi:HRR/[t DV8itpnR8jW(e ;7F2/H0"h-B4!}%Gw*#V!_L!'ʱ:C/ņ\�PЩTݼ<FL(z^eaJ BAWloVbkzϲ5r C ?ەyO-=])x,64/Df) �!/GT2ʕp:ٰ驲r oE,mKIwm_q;O.hlu;:"`dfˊW1EXkg2 V%Aݭ&9"ާHQm5 AdlZ'C.9 DSA6<&NB+wt>Zk{Si kHy5=9-sMrÇ630:?8> R"㕧bb\ۻ1d2R2Ji/fI6d_ڑSrFĥ2KX9[߄ZA`40:h5i>n|PJڬz;ﴸ=BC.4:$ jY5y%@4ŝfrrL^_;%?֭%S'v([]p mE[G.Mh|"yf]bQxݐvmA2dW' ?\:)A1f6EP$]k hy] il vVO âTMn 97=7Z&}"h;H+5=l` RucϭZ2QMϮ) Rt'X4_Lړ7d 6NrO13v?bhR 5[W~ߺ'G>ڲQ.zmo;~cHF׍՘qX4gS%@䆓:qLdԓ  b{I}(y'4hΤBý7Mě%Tֿg.~h\h|"o ̤�u/$4t# #e\ZDT[~ $LPQ.%= n Ȋ p̵DN`(Lm$x 20Ee ׄ.;02nDoM%cC]YH( Q4 ſ%`z5&_:ʬ&5GQʛj҇qfHřsPO(% 9,=v3Pj{*A.le-rMRPi", 'N;8-Ƀ<YW;UXFi sR&ѬmG:ДSqvIͼ}�('oF}S]0k+.מJbǓaMHGssl:g XpS dK}.Cf3;HvU0é%ȳ'`SOj@j7q1)m꒗T߀,k OG=5=/m_ID䙄w2s|`V7ӗH2CLMD6x>ߥm~}2¯~V߃EKo̢0�pR<5=81<occ/rt#NnU%$ l; !yh8sQ{]xT,QM,rip_N<j1.ܱmki 3~$dw"e%A>S(}?fpyXRv[BIwC89ȪkԬ o?9Yt/7{Q^Zm'$-=V J6犷SPw*xtN| pK֞RFr& &OV0җ~ ;|]҇l r_jC}u0sPZ#B0G WA#rǃ?LN|ǜmEb.An/>(?pzD>h/a{&Lћ}K<^m[I$XLD_1b0UayK)ML.,ߙΝjR(v3ioWT9Y vS9Lo33U $1,h+ᐫy63c.~,_I0&xso!#P KÔ�7 `reMoGP!JT 3m[HTy3y@eaHԫIt~3^l/g$V=Rf^hMin1:IoңnzDXryǒ:q9XLUGVA=ݫmEg$W;s&GFc7򳾚*rB=\mb:I~d~?gP�cXoz݈N-F(WWzX-w*vA'xAX=›f�ڤ*r5N$E t̶^_Cϓ΃s hBMJ|4.8 %T,9WH˔OTe+dZ;y2SraoP~^2"8ʜ'T9jþKg'38bOP >?bu ߔuAJݩ| iC7NYjb,kM ӒUogaF*c@r1#)#>.+YdkB?$˿6GPHd񔁋:-X!<21s>%Z6L&PK6gЁkǟ/P>"ՙ f}ika?Wݪ Go\X]pb AH)vl}`AgZ o/.:mOĈOfUhtPȖ{h #[&>:]ɾ{ϝ+CpT [O{Y)l[ 3zQLXã#S|/mlS޴^ʂ.٫Tǡ^i\Q@4&4u="FPp*Tl@,"҅vm6]w뼅n( u[" } \p=O)rvXEG5d3)ן)vkM1lXp&xz*gQZ-UʞX;[4?ly;Ey H" E($8u@`O2U4I=*uF[Rlsp-G`emӝQxfܖdWIS.!SuvR?޶s5*̓z*S%gwf %R35e~tهD)K"^Gm~&4cwmH&jkOT xkoT.(>yuʄ9`ܭtaJӎς @Gl2+*Vb1D+K7 Ӓyz*.%π[OzqդisGD(mTN`g5lY/Nql 'T(,"cU? +pB^5%Sr_kD l>�ݥLUvgk줙wQagw˟/Ht '#Ԉ{Ky lÌ(<Gk׍;PV^Y*ĜF͓>M¥;wNK ZrŤP }!C@}?;_p!cT?3!J)(328Jwh9jXbDAӻW?װ a=FMAٳj=3-tEЙ(Gy g͹:'";U"Ɓ["{| Ԁ\?l%+r9=tu]|x30ewgݰK{Fj=3ivBi:؃- W`hVknHP¢Ď XsQM-Sd h3ihЊRՐ&op_]4[Ї"8e2MAU-(*2 RpdI*w}[igiÿS亠7'gNi$e|;X !n]g"?WއΈ6tS+BVT?;PR7o͐c9]S7ӏ.eG4-hT4LXAlqi*%H>L+۝[gֽ~QhP)ynQ&4l"L7щ*-~˟=ь_lYɉB8<1#*=6"T,@A%I@+ dX"=Y�7uM܍ӍPt?^ gaoJ,;pw|+" + s]eEm{rKh6d,LKЊ?% PП?[#_a/>V+)܏9Uy2m6d}y/>I$^lkX2*3*Bsuv~fcW~G}f _^uH'd{RdwVKGorTt(_ ):P t4B" T:7_ 5|z SvG-zXG)o!^%I dOnzi|ruVY46Yqf!J|I=S:buzkq[ۂRAWNxaQ>I,b`Le@)0Lt˓9.K\ ΋H:2Z⥠aD>L2M#fp~ټ;tĝW?%$ZhFOnuv%zC_ǍO./ v_ƽRGDt ZVի{]y<"b7:>gݗ(L\TKlt,%aąKL"4 @#.pjK?Ct^Jp( } >tMbo41"CfX\ L3)lbqz| =MpE�<0vdGxĢeYpշ뒆c@Ͳlrfx+n(&L-;w�'3z]:wR+mL`E/aU}&/LbIea틶:{O~_YaeY>Gp><w*_%D?%<9^rR[;>o^zU>;howudc]-vUy٫_ )x")WC C)IEe&\bKib9}QxI͜͟=& I("P9DJ M`ɱdԓ)tR+{X]:ǐ "<kܲm ځ c}W^H+)1\hVjk*qۋS;daHn S~ {LY7vJ'%I.Ԙv?e8jvj3n$,XҺ\;{T-R[J > = ݮ1< Dwk(Ǹo&Δ6,~èF3Oi)_ CNX|<F\1^E7hBUSDX P1-㹣;** /_yIDn1~2^8C[_}s޼XI)&ɣ9x$o2կ]6I-n!ޙ?VM~�u(ŵo<q܌^lSԉ;3qyL8ޭkC =Bpfp9폰>:47Oi?q¶w,G!Ⱦ(-u"J lV~(K=8B I;ҥӟ*н?�W[HC;~r#WAXfbrI%8"cwA|wbugG̟Tux 2^#ī4W{Rڐ9Nt҃_Q A_pX> rRK]]r}ʫ")Pi .JcY 3 2OH/A`R_W,_A1 GqLsTI#ZdB,v=<XE~ԙhpYA))i[l밴?uݭ$z*NQOU,T1%O�9ů^8^DRz/AJAƵZ߯۠5TaI@Pn%g?<37܄JPXx=^rH_ঢ়<u(Dn4mYl4W2/a//o `% L endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/TXSURH+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2808 /Length3 533 /Length 3352 >> stream xgXSa HU)H IE@BrH 14)�J&H.RTFiR*"R.:3>}o{?ko1!k[i44$Ir2rBu!bbzDIH ȩ�Chq**B 1@O\$z?Tʀ$bPH<`$y# P/�:X,`~ Z pbX&x{g$q?I%#N4РD֒p<?/\57b-?: }I  A"Rw8]omLHH,)! 1$'? Whkgc,DZ^FbK!;>C.C+w$<z\E@cW[FJJW@)-d$ S<grJ ҭc&" UV3%A<M8h@ HQ [)+EC)!vXѻkSouhUyA9o?|hzQ:$u\-݉aXgֶaW(IS{lS_ou ɀY*)5Vڂu(xphwKu>nX!%̒ls1 !k|~1׀/^g-]mɆMn̊2z֠5Mdj+H甃t/]ec)S&:?IpEvl|} s L*Nn/hp ں7ۣtT5{`gu͑vhι5wr9b݈SI[bXm\n5"k2ĿG^R{oKR6A ^AY 4tkR+WGR[LtWNo{BødWv A1V Ȭ`sك#D/p,=}@GUVyi j2zUέ:<9 ߋ"7Mӑ257 R{'y..I1~)&!'s;Bm>f}l48)s kjkmmgAԷ0,$QU. v\Iش~VAYevQ a4ޜ4yI|w+sU2\wX(;L9l3FmKDwZpN,~<SYwlI2|m|ޛdX< hxX'7D<UFah|B{e"3CH®bVmۂ3|Z{:9S &Y3•;_O&ȳ8j6&x&2<(C3S\Hr :tHu $#e<{}]56̏J'n>*ʷ%WKfйKJ+lDCN/ jyx9-GbJ3jz½ ¸Zwy`se4H X/kf|Qϥ4}Wmu6rfGF-_DS W(SSn.J>fSNg/H)\y_<03x]œsIKʓ:W#aE6ܝdԀ0z; L1oT ©rӋBct_>M6Nq/vgJ#䩌Xd 6 i;5ewjCGEFᔅT/AX#ĊԋMXY>+u͛ WyβN5H_mH ~ k!|]7cuWk6f.M ʸ$LntM!ojH&ѳei33 ڞe4eBͱRpǹJsٯ0=c_8l<7Zʹu%g<-h^wC5.8RHiO0/0A^Y&\$v= /*)rd{q&H -GEc>6gvIܪ9sdt^#oX\4\fk-:B)evSE-DwP:y"UaP{R烙K~S3[bwЎXTڳŎiUo<>sJ�d4]Jvvp7']B5/^0mX YAui3ڵoj,Tp/'{KlFq%4'N%(kf~[P3qL}k1_JPma)>gŨTJ;5W<&?tNMq cE0fUMfI+RU^ yꄣ3Rakcn$lEǐTjȁIW_@F;V5X a#=5lMMM|A;VrlBݧA$Q CI o5` Sxd̀g_b!N|AȥZnm1*Li#*76ve7Tߟ+Ӗ[q40eւrP15lA!ײxi}(uo<(#NdHzX;luOY69wSǐ�~Z"ugkvGOa׏ wso/F}"ݏp0G-`q W4C"IAea$Jk݀ ֥jR- Jxd2nEh.w#E JΧRɋBQ)~]b ?d)OjU9Oy&-^~=;[ث+o1J! (w+ek2c?Ff ڂFTD9w{+׮enqK,JEyԄ|1%%u*'t4 s}R*ކ>1q֊ȩ+#R>2^S$Tv+[;zrD7!plX#nFrdI7 3Oښ}}>&أA``&?v`=밊ΔͷbzLjsUe4ҥ0yXv72>VNfg0uZ ڶ|@lVb'L<Q.{{6e*+_hZPs,yh-Z'_zu:&5@(,$8$ 'FV endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/TNADRM+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2297 /Length3 533 /Length 2838 >> stream xy8TǭLT ɱu̐uPL5L3g1Pd+d_dKq-,%/]ze, s=9sN(2h5P>`fkkp( dl*&A}�@'G@�33Ebf*_]�dQID:`Kd{>!$" pb ; �( pz� @pL%S' Sw��mN`̠ӂ�2Hh1,1ֿ1ŸF#|>TZӟ �[dL4* E�Dd,M(DM @ h+t ?rڿaQ< Wn?L3d*pbd"T:ڀõ,_'T_t`0Q7bt`)` HdfIPeV<[] c!tVs>XI㇎. acSהeѕm [V AARR'Wf5j\y4zw|ZYȹlf69ڍMOɷ]՚:G.O7p铆X'eV]Uh\Ԏ:dq"tlHJsϲ3GsqI"բFޝ#_dz̭K2g8dgg* K\R:)_JrKO/Κ+<l W{%;-JbP_S:˦/LK<t5T=`V'>vxu;Whh0vO{Bgm _B:*O_4[y]x2m~&Vr&NE?姧"خz<q-�ueQփ(8B%Hׅ=v ]˔o.O @xNICcңm"Id;ڍQFkS3^_(6s](KFޱx;;S p}sW/)B:^7zs}FZ<4IB܊t3Hp)Λgذu-RM*]ǵUVn֨MM !n(ү ^^ORhzte>o8}ZPfIJ喧Ê} lSآ{L&' ..i hԊa|ޟ`4PҞNj*F+T`gNNh0CfaЍ(ns_r3ee/M$j(#_R >Yux10F OYuSxdKP-2uq$Fךl6 ??߫*PhboG ۜs) z}V<#34{Īשl:0Ͳh-'\=/%q9Q7ZРR.ህ!`3כyxM[ )+<Åp~vˆC.ˁ!`L/TW;X~j <pNs~żY D"k9.nW]!DnV9V;s빻SzCyǦ:"/L>Agq,=!.Pa͔2l6& ^AϾ: h̉,XESH[7{gR{/j1mh{|8Q,v0{ 8 A ėJxͻαöw#K*,4Uӊ^iݪF2'pª! 24OY^"'R ZUITJ_9- ~^ 7_ Z lqBcX#2~Ku>}^ӭR*'2qH|ne7^d}tVHO3iS{ܝ]'n{پjQk~貂ϝj|Sd"n85oTd^H|ͺoRGxtwd?eLL_;k.P|:%ŶuMn_~�N#cL ^zsqK5zqV$q<);gNe\*4LƼn uJXdeڹfR]>~~ m?RhOhc.{N˷{qcPN)v=O[ O͊ mtnM%ug`uc~"Dji3)&_$rZ.jdAa+D늣bz 'ckk©mzCig=%Y#'#so?~ܨGM>x}ᓲܢ>|^˯f>}NPF݆#wՔ7*ޟەrXȯ6m{>}7<tPſ1ěǽ<rVom) ӵ ZS"iY`˖Ԡ\+W905V;\<M4"wdGzkҁJRb̫[&9qkٶuWۿGP!wPJۥ]eUhU ioaʌV�4$r_@8UFMIY|T~msnه0/QւrG'wxDy~S"89!7ƴ Oт.)CG +Kg> Uc,x_jQKz"Y~!_Oh fYVV endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/GUFCLH+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3993 >> stream xy<ǭAvH샱2dɞ}L c, }I2*YCdɾfɾ" Y%~9w^?\Z6 bk DD 4D  %5%5y0� =I(˥ @0Hh =C,Ġ$ PzhF|(��0H"&b\@?e_-_4 (~yxL$ 5OC`_6%CD&x'.)P"A\hܟ�F1DF8@Pg$rAY/Ɂ_OCQ+МԿB*@iy`ja|P= XNNNYI!8Cp.h$ 1IJPryqQ8.g% CXg2ʼc[Ǥu4D=qDZD/+]k7VKzmK'۰v+&7Pg6!AB[α5䈾QdN \/euT"vh-m<TnNn(pX:ص,nSdƑZy;񰎞=ф` ~t333GɗF'B_g-O H<ryc?rՋ <=l^.se .rOf5'h n{ڜxz^QvKs ׍-Y7axN'H$NOgjU˶Zhגh5Z#? ob[FyF}yiaRn{ﯭFg/ҥ9i@o^1b% 8XnTΏ} "RnJk`Ɇ<\6g6ښ=i/\BYKï3*d?ڛn(;Dv]qk.Կ"EvYOqI]TIRL óuP/|sOuL{2;ذԗw<2 ]Y F Q 09z"f ,$=]'?la�Cͻfi9.)czkdoq硒х Q*(rC)kZ*%K`"ثrz"A\Үw4lJsǚ> z K.y-Bx83|t\^J XC۝7.xgHLO7b%_Ek呈"Wl5Us6ڙXn[۠6Ktxi)iMȢDek͈VTߥeǮ&b^&=l #E߽NuA"Xa>%=OҔY]L hir0B3_ٺJ9}xD̈|*_XS'NOZM.,JI^ LJw<޽-mofi>^~2~ĺ٦Ϛ\eb-lM�R/0NM ٴa/LiT⇵DKrDR|e攌9]Q3G5GH'(6CÀeXs69Ѓ -0͕?Ţ)~H@t)sߍO:>H<g*դb6 M�,#K[ S:2㴬DOU-ch 22̳?/^=$a"!TqKÐ` [z Go $o$paEFǷ[5cLr/ ~<iJ_ Uw]/? fi6rJeo@{%3vRo;6hF[?WJмGXyhP6˶ &LLՉ}羀(%<Ւf*8>:?n. {Wk>ޡMh-i-cyYЬ'D:|9SJv#T#2~ޅX|0Z}Zno<y⽦@[2xǔ5Ϫs\ mG: ■qU1%_:!Mם<R?H{Etn]O2wUg4a^Ff$ 9A.gBmNVEvEMi䈩aVgS!J!@xы:}OMC=C0(a>hԴMO 91/pcX_ja<BHxo9F!&%('1 !4+.a&z /~FMփ4eK\?B & qP<yCmyኙ-[WM7j:,-z>&r^e%~D^Eu*JJvy%MLu619;) m#0 /zVK^O|&is9r?ҥ2Ů!qjsŃQP G8Yl;)_SavGym>32ru04ob;ifXKt(dq<=<"U|Qz<N)9H6KEuBn@~2 c[5\cY|{b'd׾YzCK.~iUhn0rQQK&W0ϩa$qbs; >͝ ]݉O]*FPGbd:k.4^cxG )**J#y(i- M"Kf6jME=ˬB1DyEe{y3_y%BۤwROxe!+Ahu@3\ 8U9cꃓ BN\40rYZб9룦 Nm+X@fZEHNڞtApCRKT.X!wǹ:\ /Q1+]aSʹ"R TO@/vhHp&!]m& ʐ#�'L{z^T.xWC5K5ёN@J3X&t0#ٗ UΜ`YyW.7֭lŭ{�kzȺ S(B0.+I*P y̚|?)3*T1ɽ5he;]ūݔ5+o042DzIY=җ7vqK1ު4g+2B7"ݹX].H3H)w G[|IKF;^ye1\aA0F4O$upnA`A9)vVJb^W>/AW4_Q}ȐCо=3R@}=Hy3|Dep^ȾXjM?八>zϛxpbQ(ꉜ=;yX1E |Cg6+*XuUDuڥi:+xÓ- ۝ۤ.)/8wX*{ B`ݢmp?$ēͦFKqH,"&օ_'G߬-Ve*F"xZ@s@obvT0@%%/f~OC2 D+a$[B#<g sTm oWUu⁖C_A\NIeyS+j\`oz>־cccJyBEHfS Y 0O)e9 ١^HZ<E{xP[='޶+zvMKr 'X4@{ ��$ endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1439) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019143933+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000030282 00000 n 0000030872 00000 n 0000030547 00000 n 0000030725 00000 n 0000030446 00000 n 0000006451 00000 n 0000000009 00000 n 0000006698 00000 n 0000006512 00000 n 0000000913 00000 n 0000019380 00000 n 0000019190 00000 n 0000001829 00000 n 0000023035 00000 n 0000022846 00000 n 0000002765 00000 n 0000026175 00000 n 0000025987 00000 n 0000003711 00000 n 0000030625 00000 n 0000004710 00000 n 0000030675 00000 n 0000006385 00000 n 0000030807 00000 n 0000030829 00000 n 0000030850 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 30967 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/PaxHeaders/nomeaning1.pdf������������������������������������������������0000644�0000000�0000000�00000000074�15104461330�017152� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1762812828.046759292 30 ctime=1762812827.258765505 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/testPDFImport/nomeaning1.pdf�����������������������������������������������������������0000644�0001750�0000144�00000075763�15104461330�021160� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/SRPUXN+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/XHPQKW+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/CYZVRG+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/NWSIIM+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1647 >> stream x}WYs6~[ș& &n:qqv:m n_=@Q/XU&iZnǫY$M<nNR~#vC !;ǟB&" Rb$.,?}b\~w]5MA&2*ijޚp"zMD>G" E!2M\$MFTwQ\) 2g2RA7%Qeu~tww5U* .ER'Fʢ y-CşU~cVLGq^gl {72AUj_gl4 1#'d@s XExDJh;r Cue.Ư^LI=Svb>VX- #WX cSb�'W'Ke>E <'X$,3d<_*LE8O2_<go>\2ʊ9_԰¥pɠXZ156z;tϼ,#Y!40BDžBQqM*p(R.7U+g?:p5>TubF;ݨTQGTI8_ESW<ƃYJQ<MJ, 1kA¥a_?;s{̸Wn4WzG[![_ zN*C{v vK:/ 2 _ƪU�L̗ϓhEYL0ind׭u0H4lDz z&F)&(p$I#8ujnd_-h9z}ýQg嘝H'/A@;&`_;CIH@ zOy(pO)+FZ5^%õ=I2`<ƐXg`ͯ>Ljxg*֖ {gڙ;>^CԱ`R M]Q!f:AedR < nϓ)2Ol$N#7 /;*$_P*$O- Mi< !ʬJaA>z@̶ww뙨.v8m,#jb3JOڹ %_",Xc5-%tQuvPefMp ONVֿ8JDH\hW:sa4ij*5*]06e>Hs?>)&@08(ywх~Aӆ!S-̠Pf#.Eo[8?a!7/v:-;y!(e (gw�yozpOew"{AU]`+ɡ݂|M@nqBw3Iۖ?k̿8@nA\LSXn1 M)9DŇN9y 8!R 5;mPb mYS-Kniu$,�<3 Τ"4*֊#ś�C.J"aOh~7*OX&)􈏏:>/쎍:]O׸j~cTһ*7eZ endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/SRPUXN+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11638 /Length3 533 /Length 12196 >> stream xct&c۶ƶmolul۶t:ݱts;kΝ/۬U{jJRe5FsGS#  /* �sY;:yIXxxXI$/^v^V88J1G'/kK+71HD.f&$ &nV@&f&v$jf@7/&;;<J tx�͙XXH̭HLpqp$W?K@׿\$4$%i`EbcVt;/1%Ma^8;]H́..MhnnU7;k3K; _)kWIkO+yC?T5YUT6vpSr/o{\=I�WϑM&`hn`If`nb_%*Bw�<$<<~R(#N��x5swq:s%}-(Мl`jh+"5>63}Ƅ6[l|)9Zվ}Mr3gM',lL&z_k +>7ޭg+v̶k %2"=kkE*7D)Q`* u$.U4dLߜZ U}_G uu7Xa;y3cֻsMU5:ȦOE؉_Ǹy!P#?΄|4w, Γˢ۹-/{3W"6@!ѳWRo8T?G||aEz^0xNn№YZIvU#NV)Tc!^+]F`| 5wK5WwZ;gzXGkwR+6^A-d>L1>{$02E0a.!E $ǵrcNze̢S1Vrʲ"-h ۶ՕӒI,:˟\k6mDtoOpO]Zgff�4x W’K!?f0h ZMcVKK JOEQGR}J^a…ͥ=�LERM?lsv H뱐9|">dzôT2erF]%q0?}&TXn}I(o$Z>Dl?[ )q3^"uטS2=.@K T12Kxut ݞGj4PJL\Lxg"g_V^&5*6)<sf:ҥiҢOCL,:+$ľͤ<c@i-o~~ L6wxgz<7'T HN<wt v"Qv@ ͥ_ɯE/4.63:ܺ`y"rTac|c4FEj+Y"9)a6Z's,ηY1u>6!/vE)C;wN[k�U_1|@,8z S5qte~QgoFMnMjJ+z(̍ɃdI8fC0siD[ 95 Nk?Uv}Ukr8?[t(UՉ cz 2RS  Y0\ 7a \<ŁҘI UA.녔8$KE7yKZՖTl ,%1|:eSbP(' C׳x]':ѳOgLl)hEb;O\\ԘV܁m0ߴ+J8^+̻8 xߓJ T[4o&"MJ1&])Α*F Y%Lu_ -膀s|ͤt=!@en"75U$3:r2w{h^P5kf/2~Us%}cc4]faFmr^%n4s13M5i!*͚k e~(lwsifQęQNX8A[ПIUb;f 8]̨yC,#%D!}\`/W b9j']rD„R]hy.'FLhJ:8| o="BD5Ǽ3Jpv|}NWnH�\,w’6PcU40ZXa;?=|=~ EN,J'I 3)cth&>PWP^s~& ܘ0z?jǦ=t3P([G=0ןVGqlR^R[IZ)d%Cxw%Om[cp*cQ?!}T¸H <�w˰" 7z/:>v* -nnt٠.1l<=[Kդ~.9|4,'Q ZeEIuTO1cG4mV2lH23rN)g1NL*N5[hd+U_Ɛy3AzQ88+R$dJfj_'7y b? Ӹ(Yմ%9rѷ~*dٙSs3H7yaB*Nv=XvD=ď@vK.dǫ>un9>GhK Ϸh?G~Yez&>'!wmhxax~b>4Tä[^+*3nhOK%EКsrDv�?8+.7db1F5xrOxNY~H]ȏajMT.} 1 z5Xwy)9̚3Pl?#ȉmzKg>$7T2f<xrPKɞ%S:3XWM&I3kU0p%V/_59Y! aE ]0 s[吗ƱicKe -5iġ,]O^R8D\Vv5@xΤE\k>Ep[;Gv6}d9Fc7n!f{yyUHɇ2`D8k<C8SPB AȂvxAӕ瀃N.!>}2[ Q@O+ g7jI<ۢ_^? =xW4vB7b"1e>){9Nf徥j2VP㟍Z?biuYVQװk$AǾWrb{Yw=ZN՛k/HΤGt;ө\_jq3vpb#Tn6͉9L(9pDŽ +)z1cAy<A6?8೮kd OB \+6dg#+^ OX65A \;F*=ggμ1-K[cwqÚ"Kב5MN?TrZaX6 c?l!* -O%rZ D#(;ޏ0mR33+//&\(@$* !rڞK` A؈:j 8AU:-97gx8w!ބ>T,3?6I՞]MuPw妾ueoDYEٗBt9K=`ʠ]pѠ@4m.u+i _'_WI6ʛ:#z_2XbA5fjOt-ToMO^ ^P;73ZkhpZ;37Bhg1i)+(wӽMgjݶ^X*鲜aÒgަ(ZG>Ju^2n`ZӲ`. X=s_~<3aЅC>wiu5ٺ a˒L`"]x߻(ǥIQ`ClY{xqQ 9'c=;s[3nH#MGFQZm}}IϦWyl@&0\0zNĭQ=0|ϪVs5I&&hr"hl \w"lǨՑɉ*mrZι:"8*zF4#]8LBgž%ƿ~4 p|6t}ϯ6fIpXhҎZ $ƛN (_2xέ vOʷB%4Nj[6f~`P uptd&5O�Ԧ=V5PIHErcBp`, .eݭtM!bnE -:mHtI'ָ~gn^=60 @ےn}'{ڜZMQ|PfoF\`"a8[G^O<Y@߰#%A99;̑>D 70\ ީı8>Vqٷkg7lք [} #\w U[Iܢ,yFs.X+c\v86Izp)b|jW< %td j8]U "E []&A|%8f-'[X_"ncʉX{̱kht'O\kf7#n0c1vF_bfd5a4%sP qwnf:,F�pfH<xI GU/A'{VI@ T1&zQkx'UKh;ӟ["gj4Qu9.!((lJWA"/MD7&tw YF t}j0DU(^*Ixpa#3 ѐ_"1vQ=8roWI`Tj3+iWK+ |JՀc\.V~\>//O=MVĈX+.D1lX'%k<d IؾEUM8rP\zr>_>SY8&ֆS$tzDPMME.#GQ3>U5Smk\V*S8E~@4lGc'ק5vQsl̷$oܡ/H`}$>�JsMOJY]@}M^kW`ewסGP4GK5se*)brT >ڱ,;]h7Ql4VQjp|ymIyN%J4e( ӜZ+ =27~e& bx* x#Wz]NޗS]Shdt=挴̫"4oKI*~!F˯ǡΖADl?P9;Y%[k8;u&/^4]N]ӪdP[ P />:TcAJ!3ƏyynFklޔs(0Yw^?yaXYT^*LHE{ c' n&K'҇k+\ȫI^#*TY$!*s }Acjn$H8,zQ8MxkX#.RDVW K@u3,e)gt$e"+7;$D/`ků EyX)o^=B�WzkaOIp03e5$*.ӺiJ9Y'1J,4tOa&Cm ^jrN H H8Rڧ'\-?UX~Wϰ}!&M Y}ZF ڂom٧Y# yo22up v,k o'$A'_mLDOt7sda IK,u ĻbQ㍥7L߿ǏvwTX?Dt17�εÈ&&3]=tNl$(_ko4^7N9*VR?pxP~>{-Pb_)9pqQ(?\ ޼e ,?ňK(nγ3NnO}f`[P.[E zZMk{aLJl{ aBPrMo^,}/˩搗b"K$('2o-WMb}hYˌdRTsP2dg[+e0abHw6(5)D]CZ~3T[ pmB~X6/p6 m4Wkz#zR] ZHe͐KͻPz<3Qhy'0qJN*+ CQkRx0N6~gF?HjC`{"J{Pys@N(E'(F*[ ՜v0)-X>me@XKŚzZXԣuAW�;j 1)"dW^]Cj�]/#ਣK[ 6+t _nu0 *X-)|t�`gL~' NI :]Y6x!JRuڮz'vT+eu �beQ+y15b'Yqf$~2L8+s_0n;O\Sߒ~�$0<_lY`cfA?\vU̲CǫR֍I.jiK RΊ-fWsqZ~dP3ʢ $P-&E\#Λ$FwI񲡺z be!C sM! YF5W./$zr50L/$p۲�GRŽ!MG#hR\[vԮd\W'iK^b8ʬT_w.}a Rb7EOTE"u8\om,n\8"iP 9izPIriM@fa`[Grs'KY֟&;aaP Zf_$ct2[67RSގ2Q~riO.-A$vX hӺ C~9A l٭i69oV3HyYұZ!}ӱ�q3.uDʸ''Uf<zmu�eR\ `F!)߼(P&PRU{W/ 1m̠hW%NwjOc>W#ON>^VaJ6Y&[gcRJiՊ U$²$T:jBdزL,k�D3;HGoNH'BTeozVg'kiĦG8:oP6B ۲A ˽lZS :~AP/T1kY!z6lT?؉ˤcԘ%$\ӱ�jnɮ/SJc"C5ߴO~lG`]PyEkW+~ vtN 7գ V$"UCl^.u#!8ZN_t�߱^;vwCe|-1,= ƚ(\h#Fڒ 59['neg}|ޒOIw|9~t9C"aHw tW1nŖ(AYb=vDQ9S;0 vLkOT"2ڭѹ::jZãG9d٨IDee&YQI<1&k7_z `6Μk[kٌ0T&hM"=X)TmZTC1nv1Β1Vݛ:nfmy yN�6]U=~n$˧9;q|$Lqa{S\%*(2raXHl;4oXknĥ|sǙDFXTnuX7,ٱθǦ.g 8 ʧ{LbL)\b!.i7绗�B̙У[b\sUs$Ggou}K}L׺7)]nH qO1s"?Mp>,vuDul.7Dz xuFDvrbSl>䷑An_Nx/'pW?G,1vDT"P<OtK$(^Dv*$4H(.Z,c,5>?l.RJ!LI?ɠ(]J�5f? N?F|roWvJ.KZRڃcZʻs?`oomBtk8#RbPEǩoy&ErT._uBk1F,c2"" onJѪPȿ�h8B?c:>6GPR6+'QHǜ`;Ev)o@ NȴL<*ʙOZFȸ /}^E-/ClOd}nլpRH1gA3&F7ƕg;HeEFn%.u3%*cqicy,D{Da@"0z%@cY3oGYU%0>'YZHUn˕,2 uK"91`~8*إ8|e֌Lu2. "oQ~q-"`b|Ƀohq\zlo͆FⶥfV;V<C]DjݧȼW'.4q1or۞%}zBeꬱI$"B:^xh~fOWCЕax&[26ݟ]VQ _ԮfzKO,$SJ+Bӱ0*Awe5,x6mA"6{o4q.,\6 ~L} k/İ3cX'L%CW =<=:; seJ[CPH2^V P(nu0wU$R- 0J襡Q wBfCŐl]IM: >Cl[DJ,::@bl;3j|%8V0&B8\Cw:n`@,{QIeb[ڱss<6a Q hD.2kI!z7ɑw3k\m}OǹsBI\Y% @OΏe뜕+-` l0׹i\4DV:ێ3|P0WiJAI\~yWl}Zk4џ6*7р儃}OggfL؎7Uc# %} 5 Q䏌7ICsg^q; oc70 D6雧xY*{֛Z�R^Z͜ pe y(%#ѮPPhv渻S ^TQdz~,TNyF!y1қP}ajbQm"іG]k+e2OKKf6KKv(PO?]]fuEh6n{LqY5L"ʽ ؗ2%@tƖɡ(8tYQ~@-6RD &Nf6+\1}jEzgH3>;uzq5gx){s[} ^l)Cp8u>]:Bx[7!,Ib!r!j]G<n3,Y.\!�-zL833X}: XaAHYk__ԟa,v O‎f%Mq &gb! \1 .Qew] s]wOny 0D|B3Li^P $(�=;Dec�cܵD�)"iH!)Ւ�G17$~MV"|Qz+)bHTn6lٍkC<RüuCipY%+dS@1R_#Fe,q,pbp=~poiŕ+ͩQy7AB"+*B+JiDG9|q1e+ўJi6ff#uG-x%)Ý#2Y5Yr2@ӭ B'�d=7R, Zʗ3b)L=[v r׈ks0v9d>jni;N0MboEp#@53ٕ{i$z&x? 3cv6 F�^[Iح^A& <xk焜gx o;h!S_c9Y6j%%+7ѐK~qVa< 8$Ћ~szHSzRH{+@&($1ccDp9nsd0޺J܅v.ɜ a3wGi \RqU}/m ~eC@wTnb)/*x^#> @mKSjs.v!Z/ Ғ tqPcsO*϶-vG#UٸW]^%k:9b` u\P{ǞhH=6 Ի10<W*G=1KiÎ2?fr H ~ 8^b^L6L xT_fCvQ$5;h@(t'Vul =,>�W F=+;=o&X)o/{QM ;yD]ց>Fc7ؽxtXNy{rŘHڹo(~0 Ny ΝH +lU>vt'ɥg�w]>u嚔>(=i;$3=J7j,qPTPh|cBЉdĬg}fU<+Qă/nM'5HzYދ SSYuՍi 3YoW tri,0 |Mhh=T[hceỏ<^ґƇDZ?t Q/ cE %lmЕ\ތC>,*m� ~+ͦ:jl 6,AC_v C BI&Ly^1'0OƢq?�{t;S¿Z]!I#޿;H]uKFҞldf/я<ԭ'R]ha!vfqd轐o )TFl#8 ! ^^L28 b٨`7\Þ3}³$P$|7�Y­hJi g@K<3J1SR;l)@ g6I0c;[|PI<"F252M~P`<J޽C#8QDFX[,T%J)vAHz=\ _oP}a& \q12,&1Š p CCAH9MT +5B\ 2T>Qd#$gӇAAHA~ YtZlv2eO)L ?vAxD='õpM<2XŢw>ƫtb*MC6q3Sm(x9|[1t{kJ>d_~U7S_p 3;-�:I/ endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/XHPQKW+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2808 /Length3 533 /Length 3353 >> stream xgXSa H"x(Q*EABrH 1HT4A ERiR*"R.:3>}o{?ko.$i995@BQ`z(T"I�I�9UUyt;Z}jJj0e O /C@"H';2A!-I2�6?~l@e 99�A�72�h_?K~ I*q x?!~/k9Ց8 K :kcBBb1(]`0>2ƐP;̃x_@n DZ^FbK!;>C.Î+w$<z\9E<=�[FJJO@)pd$-ttUE[Si\M �% |gK$xϛp?cwр@ Ap %Q³!{y ;轏Sڴ* =%ʫEM/HvX0}ՙ5{fv͑TŽ̖�{Mo=U;)V![ҝtyK^8JzXG&n`3O lzm{3=vH ${\H9>rc>Jk—]顼KgV䧉V7gŋ?Kj>n{%Udj#HԇAюұHΜWz&ڕ*Í?IpEm|}-jT kN&ݨ]:Su>oGif*SIn{;_Dw9gr9b݈SIGbX}\^/%"tQwߘj ߭ Q3ѻ%~)Q[Ly,L5+)Nõ<&#;؉/W׭fhalqCf *`ك"Ķ/p,=}@{SW xjf ;/j2zM9 ߫W<SiH[Rz&y/,J0}/}'K;*m>3f~x?h(sR6voeaO/6w2D5 &D|J3*봋\oͯqN{o%vO_ʿÚfVJ&o`S1Rk\,츆sb vffK_tYD敲|cZdcr5a/kJG'8!<ᇡ2F ŗ %Ƿ# J)OQ. o qph勹fOy+ fΈT(Ul|y0yc<dDl LݢbDPl~ȭѦgDb,$؈e 0g|4\ulFIBB;_Rm9Dųn:7Iji4`%y}M^rHSr$v+`4ϭƋ[ J!`-:3`n.-S~o~@zYs6B}.5[ȵ7빶|mϐx@HsȕO/vvVY6zt[>\2FJQZA\oDݽ/HmRY* S,*w$1k9Nxnڈ9|y\n|oսѹ *;Y˪7h /8F5nس$dk^|qjBz4B(UM2`, 8iڼQU _yN+tp_4`NY8pLNp|5ZQdbϪXlMlt~KuIu`*ܲ�眰ַB/j3Xw;ecpO+-|1AHbA^܉*`~lID/Y6#}FttZ۳ƶLb6[:n8W=i.桇ܣv gG 6Vޤ% K I470tфkZ?}R-aCE"iJY^% >2T4_M`0v}]ϱMn)q`(p`X­(1ON~OFWMM9@ӁetEw[@;W2}n(`efJ#Od5+.?jO_r0c/x|*}fKd:}gE5 zL٬4miA[y':T׵{i<.>Pf!5jץ͸׾U4SWcýI}xqix?gJOJUalJnbڿ:vG^U+ۋQ)9w.ƹeL~b' a\<.AgWLfJ((QkWzg<s2t0דpcH*fk+Ȁh[ ﻖr.cZHwR1[SlC==f5U+1Pki!Q<#hRQU0E]"ئ|?8kp<"z)IV2f@D3jkNmmIW6To妴~;qj-x8Yns &&bD8_Ǝse LԮ{ޖzE'3d_4;Ք.nFs+eEԜڼtX͹M>x键_fu d|zFm8{[{!{?|A#a</|l4{cK3$T&(QT!(h PQ)ټTQ =D1~6M2mw&0DƭO#CU@0yQ8*yo^C ڜ>@k [* W>פɫo?Qےw{evvW9EJڝ뷠wJeYZ*Oꨙ8:Ŗ oU1er}As7;\l6KhFU!_ wIkdGj*Cx =x͋"9?)moFK\юȩ'#Z>"N]4Tv+S'zrD7!plX3vFrx7 3Oܚk)/ԭAp`*?v)=㰊ΐ˳bzLJcee4ҹ qXv72>FNfk?uJ ڶx:+^SSH&(�W=]ŲxJŕ[\7}i^/Z-2iWopne].{ΰ "$I@ klK endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/CYZVRG+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2582 /Length3 533 /Length 3117 >> stream xy<C%Cvc+kp,e<c&3sN"KeCCD([(ZSBٗ,%Hs_s}~~ϣm6T C7,=�\QUJAa�74�@! UJcӉfՅ, P� �BBA[�,H$` ,�e�`�~�ch@zũlQxԑ5 b Տ6LCmQcDwLc2@:@ŁtʏVw;%1v @�]"C@%�x )܏[k�:{ C0i~C'�^0 eܺxa5K) Ca?RYZRCNi#�m]}8�# >]) &ha07ˤA ox~@0B8RD_-9%Ozu^_yAC Nvsg.)Eq0Nx͖fkxɨ҄vD'/n׫L)"q7=Mgj_xj>+f\f.ѕ8M>hu6p"AcO3=J?uG |-1T&mgޣYY^GUz\U4.޸hW-;Az^qO6 T]nn6HUBGijskѨ[tP.M7%@n%|Cu� ƨ7|SM=:pL}nP nHzձVlBt-3SΣ73$n[##=3nA#G򴀰B0 tbScA,Czl1%i1{:*Hd\}[DMѦqjAեx:kJoS0Voܓfm=NTYmocgԌ=;e$ËTAo>f2:m\pl5G ,ϏjJ9ufIT&w!X62"*i&8868'AI{ ZVtJl</A2& �\&(QfĽ=Vp KZbA7GRRc>'ϖU7e!ɵa( Ϛt6W݀dAnZ[>x~]PP8?M¿\LIB3$gJWzI@rѣr{̊6;%tVK1@iGtk25}sQ w̵83ԜTb lWrƳ6~$pwn)+5bD 3ȟx>hlzN `[؋vTդ'14Ji4ՖP)6WKxe`P,T}Yq<~w{є#zPv\!,=YhL]-+ҲP5S}.8e9?onXˁ7ϠTpb@.)/E9؜{i)>#&ÃץYE G.%Ȗi*JG8=_̋MA[_DFi#[7?&e*jZlordMHs)n!LSD}'mg'fـI"gע)ؖYFt!9[ i蜌ݫU;\OUpbɝ=I!]NL{~LWRP=ǬuaJoJfLFY pX&x>.^)=Xss߈{=,;{cKk{+I$^3ԵD_tר0ÅVtr<#^4]tdg_K{&/Oph~|7eTVABHWr K<^~y@镤D%T:p>~{ZHL(W>mē竏NTtsEmhbv{KE;YB[atØ Q}3c ~W˄u%JI'j_cG :_/(2nmK[RѾ0˟+Ҵtccwb_v,~$zJO* {”Wp-/ vU`WsȘfiFC)[2<S߳׈%~XC 5tZP8fZ8r5TgJ L'u.p"k$d:nI~Qb?~VYj|3_ul}Ry)㶉Ugk{Js]TNTME?SMeg޸>,axަ2PSȪ rjb桐hasK"#/¡(%iI)şxC‰$|zjB%M<YY"t7ϵl:PN\ I]~+0{o$@0|z O/oE5WgLM$m}箴=^MNŊ, 4DFJ/H,Ks)x/,}r햓/{Aظo$KLjY_dߕǬmO6K&n|h(7g%=s;T�+qY̑dn|fJT7EQ/8/ǰc%CVv k+�ɣ#񡡎e̝yY^ 2xm^-%jkqgx2#'. 2{hѱ:[W5F#,yp=oX$Dm\ \<4% ,Ϟ<s(U?"qCJrB=gY;-7P1AQ91-n{ok頗b_Ylc  <9.Ҽ1}/n[Z{f5a('M4 _\$ÏqUvI//'$CgPz SJ_ endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/NWSIIM+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3993 >> stream xgTS{Ʃ*h)$DJ"]zLĄB(�Ҕ^D$H H^H/  4)‹޹יּw̚o/g?9}p ( !OɂԁS=[5 HV * !$  Ձ 55PARVWTVW��@LĸK\*h"M$wQZ4, ^^D_4J��( vrxWPOWM>Jq^QxBGG,c>8W=a xxD)&nAɦGc an84PO mGyh<G[ gfcJCl<ɒ_5?1@{yYyyБo H wZxO(== X(�>:@ 50P,_Vx˫(V>D"O}>s4d<;K Iml4\y3 ,|}k8fw7#°1%xL:JL5Zd|ݵE4Wv r +jg2)*8wYMboMP8Nss\ :r8A*y>C.QU ;Zו *786_ϯ9v-ۖ&sqk>cd};v8!c`|@,õ QF'оW,Å)aI/ClkQ)Hj[T/!. X;ba;qшg29yYoUgh'͉l+k׾D�ع`ݸuFg)ZqJn$~Lզla5[x;{ã~2S}MVې"t;]u #G!!͙#xHzC,4bdP:76(a0@kJ+ꁕ�'AV7Ds+BHNuXW}'Oz4OZ ~u!%T7tC1$K[Խ%} E 榩aw;x22A- \>ֱ nªS_ao{d@*Y;rT6gͺcLb|a~!Jd,zwdHx S`Lutoe>sK[ 0i\aԇ^h}39qί),7FvO__VU,YY^iB=vaOTc>dib/$+.F杳8,ӝJZ!G*-cowNF\۹"yΝv$⃗Bz_<YߍMb|۫vcA?WlsW2;XV{s=Lī~m'ӱȝ7AmVȹqҸ2֑E3OI~K61ZM=,Ճed7ǴW0/[g0owܵ܏vvR>L٣=I2q]HtMhK7Z2)1'ϛL̷3MPц%JӽVZ?_kzu܌^@LC[FQV&yCM6~m 'ulm/I{<¬;73e;�>7KJR֙/ōMl"ꆚ)8>D?E,7Z" ߍQ+.aǚx"쇱q$8~rjڤqtI7X HP#oisA85ӻUˇ0:RJFݛƶWIKUyԒ1`D sj=b3:Rpӛ΍1 y jrߗĝ ~y@0uw/? g6rIg~3Jc2rjՊNyuƹY68bʟmIy+jCN坘4sYJ0}#sή*dx˺Üj)6,C14$;j\ƳY$˄$Q Ƈ<5멦hgMDub`|{"[óĻM)I7Ye3k $hUk~1u&& {S2.kFxSl;7uJoܸ0a ʩcԫU,tvqZj"Ir\Oڞ̉J)˓RìOYBםBu'z6aQ\U-MѨiۈsbbq#s"Ő,r3BLKP↚;iB.M)Wj5轌bi*V:ǹϽ/@LY(y㠚9sFb簃3R6ص;r\Zl]k&dU)#J,]*u+li [km4 n~c:"u}0}CdX)Ix58vݧ{c|ke}BY{ZG{}!~pyFgw&RF.E,m 0cyVdz٥k`tYĢwܨ̗Q:yez0dYDĂx ,9-Z1Sr@.mԐp_&^h86:fjif(h1v FFO[ͳQj >>[XҠ\tuVoD_7ݒ=.McW.42_՝fqyRTo~ M~(?+$NыO{J5wJs+ْ4<W L-VT;J *Sdy1rݻw\mb^zIP݆4^oX y:Ќ*WCU.,b=>RWc}pLAcrL+ܖ+tl:k΅iدmZ,kSizn1W7ycI~EUN7N8w[ttEo95<:,%xZS$C@FTx1bA#| I{"`DUqEo㕽8ʅhei"91H Ut ߠ3ݚ.y fL^e:P,i^!(&Nnύu乧1[{a.&(&f3ȒzʀR!%,qJeRqd7O*#MVjf'VzvW'wAMJܛC [q^2kxO׽eLl\fSA7k,Nk!&#gwn_. F/ <R{bʱ!hmTKdTKnu^6,Y2[sXk~+Ljcɩvg[VІ[YP>�]bqnЬG~E!C0?CvmNGK� o}p7~ Y! !]6>ez"f` Hi?_�Nûx'rzA< }N 8r5}^Pc Oc.;.t*nvhɮ2`ɇgTQ3'4 ͂uu|l@jH6-?~އE>pKy5{XͪyvE6餠֨]moRvT0`Ee/;~OA#2 -ӍDk$$(g \Iǃp>[- 5^?U|}iø@rkVԀ t:-4f\C}bnjǔ/ֆË͝Ƨ"f6@a5ٔff`irs;Te9#%o v/vvڴO qhD@��B endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1439) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019143951+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000030427 00000 n 0000031017 00000 n 0000030692 00000 n 0000030870 00000 n 0000030591 00000 n 0000006497 00000 n 0000000009 00000 n 0000006744 00000 n 0000006558 00000 n 0000000913 00000 n 0000019245 00000 n 0000019055 00000 n 0000001829 00000 n 0000022901 00000 n 0000022712 00000 n 0000002765 00000 n 0000026320 00000 n 0000026132 00000 n 0000003711 00000 n 0000030770 00000 n 0000004710 00000 n 0000030820 00000 n 0000006431 00000 n 0000030952 00000 n 0000030974 00000 n 0000030995 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 31112 %%EOF �������������cb2bib-2.0.3/PaxHeaders/doc�������������������������������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�012407� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.278765348 29 atime=1762812827.99875967 30 ctime=1762812827.278765348 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/doc/�����������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104461633�014456� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/doc/PaxHeaders/cb2bib_user_manual.md���������������������������������������������������0000644�0000000�0000000�00000000131�15104461633�016524� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1762812827.278765348 29 atime=1762812827.99875967 30 ctime=1762812827.278765348 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-2.0.3/doc/cb2bib_user_manual.md��������������������������������������������������������������0000644�0001750�0000144�00000432754�15104461633�020535� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- author: Pere Constans description: "cb2Bib: Bibliographic Reference Extracting and Managing Tool" keywords: cb2bib, clipboard, bibtex, reference manager, bibliography, latex, PDF indexing, PDF searching lang: en-us title: cb2Bib User Manual --- <div> # cb2Bib User Manual {#cb2bib-user-manual .title} </div> Bibliographic Reference Extracting and Managing Tool \ \ © *2004-2025 Pere Constans. Last updated on 2025-11-10.*\ \ ## Contents \ - [Overview](#overview) - [cb2Bib Description](#descrip) - [Using cb2Bib](#usage) - [Procedure](#procedure) - [Buttons Functionality](#c2bbuttons) - [Additional Keyboard Functionality](#keyboard) - [Advanced Features](#detail) - [Requirements](#requirements) - [Compilation](#requirements_comp) - [Deployment](#requirements_run) - [Credits and License](#credits) - [Installation](#installation) - [Installing on Unix systems (tarball)](#linux-tar) - [Installing on Unix systems (RPM)](#linux-rpm) - [Installing on Debian systems (deb)](#linux-deb) - [Installing on Windows systems](#windows) - [Installing on Mac OS X](#mac) - [Configuration](#configuration) - [Configuring Annote](#c2bconf_annote) - [Configuring BibTeX](#c2bconf_bibtex) - [Configuring Clipboard](#c2bconf_clipboard) - [Configuring Documents](#c2bconf_documents) - [Configuring Files](#c2bconf_files) - [Configuring Fonts](#c2bconf_fonts) - [Configuring Network](#c2bconf_network) - [Configuring Shortcuts](#c2bconf_shortcuts) - [Configuring Utilities](#c2bconf_utilities) - [Search BibTeX and PDF Document Files](#bibsearch) - [Search Functionality](#searchfunct) - [Contextual Search](#contextsearch) - [Notes](#notes) - [cb2Bib Command Line](#commandline) - [cb2Bib Annote](#c2bannote) - [Annote Syntax](#c2bannote_syntax) - [cb2Bib Citer](#c2bciter) - [Examples](#examples) - [Predefined Formats](#example_patterns) - [BibTeX](#ex_bibtex) - [ISI Reference Format](#ex_isi_format) - [RIS Reference Format](#ex_ris) - [Additional Features](#toc-additional-features) - [Embedded File Editor](#bibeditor) - [Bookmarks](#bookmarks) - [Update Documents Metadata](#update_metadata) - [Export Selected Entries](#export_entries) - [Right-Click Menu Functionality](#c2beditor_menu) - [Reference List Right-Click Menu Functionality](#references_menu) - [BibTeX Browser Right-Click Menu Functionality](#browser_menu) - [Additional Functionality](#c2beditor_qt) - [Predefined Placeholders](#predefinedplaceholders) - [Cite and Document ID Placeholders](#idplaceholders) - [Cite Command Placeholders](#citeplaceholders) - [BiBTeX Entry Types Available as cb2Bib Fields](#entrytype) - [Main Fields](#main-fields) - [Other Fields](#other-fields) - [Reading and Writing Bibliographic Metadata](#metadata) - [Reading Metadata](#metadata_read) - [Writing Metadata](#metadata_write) - [PDF Reference Import](#pdfimport) - [Introduction](#intro_automatic_extraction) - [Automatic Extraction: Questions and Answers](#faq_automatic_extraction) - [Extracting Data from the Clipboard](#clipboard) - [Processing of Author Names](#authorproc) - [Processing of Journal Names](#journalproc) - [Field Recognition Rules](#heuristics) - [Regular Expression Editor](#regexpeditor) - [Supplementary Notes](#toc-supplementary-notes) \ ## []{#overview}Overview ::: contents ::: textblock cb2Bib is a free, open source, and multiplatform application for rapidly extracting unformatted, or unstandardized bibliographic references from email alerts, journal Web pages, and PDF files. cb2Bib facilitates the capture of single references from unformatted and non standard sources. Output references are written in BibTeX. Article files can be easily linked and renamed by dragging them onto the cb2Bib window. Additionally, it permits editing and browsing BibTeX files, citing references, searching references and the full contents of the referenced documents, inserting bibliographic metadata to documents, and writing short notes that interrelate several references. **Current version: cb2Bib 2.0.3**. See [Change Log File](https://www.molspaces.com/cb2bib/doc/changelog/) for a detailed list of changes and acknowledgments, and [Release Notes](#relnotes) for additional notes and information. See also [Release Note cb2Bib 2.0.3](#relnotes203).     ### []{#descrip} cb2Bib Description cb2Bib reads the clipboard text contents and process it against a set of predefined patterns. If this automatic detection is successful, cb2Bib formats the clipboard data according to the structured BibTeX reference syntax. Otherwise, if no predefined format pattern is found or if detection proves to be difficult, manual data extraction is greatly simplified by cb2Bib. In most cases, such manual data extraction will provide with a new, personalized pattern to be included within the predefined pattern set for future automatic extractions. Once the bibliographic reference is correctly extracted, it is added to a specified BibTeX database file. Optionally, document files are renamed to a DocumentID filename and moved to a desired directory as a personal article library, and their metadata is updated with the bibliographic reference. See [Reading and Writing Bibliographic Metadata](#metadata) section. cb2Bib facilitates writing short notes related to bibliographic collections. Notes are written using a minimalist markup on a plain text editor, and can latter be converted to HTML. Related references and links become easily accessible on any browser or by the embedded cb2Bib viewer. See [Release Note cb2Bib 1.1.0](#relnotes110).   ### []{#usage} Using cb2Bib #### []{#procedure} Procedure - **Select the reference to import from the email or web browser**\ On Unix machines, cb2Bib automatically detects mouse selections and clipboard changes. On Windows machines, copy or Ctrl-C is necessary to activate cb2Bib automatic processing. - **cb2Bib automatic processing**\ Once text is selected cb2Bib initiates the automatic reference extraction. It uses the predefined patterns from file `regexp.txt` to attempt automatic extraction. See [Configuring Files](#c2bconf_files) section for setting the user predefined pattern matching expression file. After a successful detection bibliographic fields appear on the cb2Bib item line edits. Manual editing is possible at this stage. - **cb2Bib manual processing**\ If no predefined format pattern is found or if detection proves to be difficult, a manual data extraction must be performed. Select, either using mouse or Shift+arrow keys, the reference fields from the cb2Bib clipboard area. A popup menu will appear after selection is made. Choose the corresponding bibliographic field. See [BiBTeX Entry Types Available as cb2Bib Fields](#entrytype). If operating with the keyboard, first letter of the field is set as a menu shortcut. Then, typing \'A\' sets selection to \'author\', or \'+A\' to \'add authors\'. Selection is postprocessed and added to the cb2Bib item line edit. cb2Bib field tags will show on the cb2Bib clipboard area. Once the manual processing is done, cb2Bib clipboard area will contain the matching pattern. The pattern can be further edited and stored to the `regexp.txt` file using **Insert Regular Expression**, Alt+I. See the [Extracting Data from the Clipboard](#clipboard) and [Regular Expression Editor](#regexpeditor) sections. - **Download reference to cb2Bib**\ cb2Bib has the built-in functionality to interact with publishers \"Download reference to Citation Manager\" service. Choose BibTeX format, or any other format that you can translate using **External Clipboard Preparsing Command**. See [Additional Keyboard Functionality](#keyboard), **Alt C**. Click \"Download\" from your browser. When asked \"Open with\...\" select cb2Bib. cb2Bib will be launched if no running instance is found. If already running, it will place the downloaded reference to the clipboard, and it will start processing. Make sure your running instance is aware of clipboard changes. See [Buttons Functionality](#c2bbuttons). For convenience, the shell script `c2bimport`, and the desktop config file `c2bimport.desktop` are also provided. - **Adding documents**\ PDF and other documents can be added to the BibTeX reference by dragging the file icon and dropping it into the cb2Bib\'s panel. Optionally, document files, are renamed to a DocumentID filename and moved to a desired directory as a personal article library (See [Configuring Documents](#c2bconf_documents) section). Linked to a reference documents correspond to the BibTeX tag `file`. Usual reference manager software will permit to retrieve and visualize these files. Download, copy and/or moving is scheduled and performed once the reference is accepted, e.g., once it is saved by pressing **Save Reference** button. - **Multiple retrieving from PDF files**\ Multiple PDF or convertible to text files can be sequentially processed by dragging a set of files into cb2Bib\'s PDFImport dialog. By starting the processing button, files are sequentially converted to text and send to cb2Bib clipboard panel for reference extraction. See [PDF Reference Import](#pdfimport) for details. - **Journal-Volume-Page Queries**\ Takes input Journal, Volume, and first page from the corresponding edit lines and attempts to complete the reference. Additionally, queries consider `title`, `DOI`, and an `excerpt`, which is a simplified clipboard panel contents. See [Configuring Network](#c2bconf_network) section, the distribution file `netqinf.txt`, and [Release Note cb2Bib 0.3.5](#relnotes035) for customization and details. - **BibTeX Editor**\ cb2Bib includes a practical text editor suitable for corrections and additions. cb2Bib capabilities are readily available within the editor. E.g., the reference is first sent to cb2Bib by selecting it, and later retrieved from cb2Bib to the editor using \'right click\' + \'Paste Current BibTeX\'. Interconversions Unicode \<-\> LaTeX, long \<-\> abbreviated journal name, and adding/renaming PDF files are easily available. BibTeX Editor is also accessible through a shell command line. See [cb2Bib Command Line](#commandline) and [Embedded File Editor](#bibeditor). #### []{#c2bbuttons} Buttons Functionality - **About**\ About cb2Bib, bookmarks, and online help. - **Configure**\ Configure cb2Bib. See [Configuration](#configuration) section. - **Search references**\ Opens the cb2Bib\'s search dialog. The search is performed either on the current BibTeX file, or for all BibTeX files on the current directory. Optionally, the search is extended to reference\'s files. Hits are displayed on an editor window. See [Search BibTeX and PDF Document Files](#bibsearch). See also [Configuring Utilities](#c2bconf_utilities) section to configure the external to text converter. - **PDFImport**\ Launches cb2Bib\'s PDFImport window. Files dragged into PDFImport window are sequentially translated to text and sent to cb2Bib clipboard panel. cb2Bib automatic and manual capabilities are then easily available to extract and supervise reference extractions. See [PDF Reference Import](#pdfimport). - **Exit**\ Exits cb2Bib. - **Dis/Connect Clipboard**\ Toggles automatic cb2Bib and desktop clipboard connection. While the automatic cb2Bib-clipboard connection permits reducing keystrokes, the disconnected mode is needed in cases where multiple mouse selections or copies are required to complete a reference extraction. See also [Release Note cb2Bib 0.4.1](#relnotes041) and [Release Note cb2Bib 0.2.1](#relnotes021) if you experience problems with this feature. - **Network Reference Query**\ Starts Network Query. It usually takes input Journal, Volume, and first page from the corresponding edit lines and attempts to complete the reference. See [Configuring Network](#c2bconf_network) network section to customize querying. See the distribution file `netqinf.txt` and also [Release Note cb2Bib 0.3.5](#relnotes035) for the details. - **View BibTeX Reference**\ View current reference as will be output to the BibTeX file. Eventual manual changes should be done on the item line edit. - **Save Reference**\ Inserts the current bibliographic reference to the output BibTeX file. This action decides whether or not a reference is accepted. Scheduled actions such as PDF downloading, copying or renaming will be performed at this time. - **Open BibTeX File**\ Opens the current BibTeX output file. Right click within the BibTeX Editor window for its particular functionality. See also [Embedded File Editor](#bibeditor). #### []{#keyboard} Additional Keyboard Functionality Most keyboard shortcuts are customizable. See [Configuring Shortcuts](#c2bconf_shortcuts). In the following, default shortcuts are used to describe functionality. - **Alt A**\ Starts [cb2Bib Annote](#c2bannote). Specify the note\'s filename in the dialog. A new note is created if the file name does not exist. The cb2Bib Annote is opened as a separate program. Exiting cb2Bib will not exit the note\'s viewer. On the viewer, pressing key E launches the default text editor. The viewer will track the editor, and will update the note\'s display each time the editor saves it. The viewer\'s functionality is disabled if cb2Bib was not compiled and linked against QtWebKit or QtWebEngine library. See [cb2Bib Command Line](#commandline) to use Annote in command line mode. - **Alt B**\ Edits the Bookmarks and Network Query Info file `netqinf.txt`. - **Alt C**\ Preparses cb2Bib\'s clipboard through a user specified external script or tool. Preparsing is necessary to catch formatted references that can not be easily extracted using recognition patterns, or that are written in ambiguous formats. Many available scripts or specific user-written tools can be incorporated to cb2Bib through this external preparsing capability. In addition, simple, one-line scripts can be used within PDFImport to provide, for instance, the journal name when missing from the PDF first page. The cb2Bib distribution contains the sample scripts `isi2bib` and `ris2bib` that convert ISI and RIS formatted strings to BibTeX. See [Configuring Clipboard](#c2bconf_clipboard) for details. - **Alt D**\ Deletes temporary BibTeX output file. This permits using cb2Bib output files as temporary media to transfer references to a preferred reference manager and preferred format. **Caution**: This feature is not intended for the users who actually store their references in one or several BibTeX files. Remember to import references prior to delete cb2Bib output file. - **Alt E**\ Edits the regular expression file. It permits an easy access and modification of stored extraction patterns. New patterns are conveniently added to to the regular expression file by using the **RegExp Editor** button functionality. - **Alt F**\ Launches a file dialog for selecting the source file name for the BibTeX entry `file`. Selected files are displayed either, as the actual source filename, or, as the target filename, depending on the file copy/rename/move settings. See [Configuring Documents](#c2bconf_documents). Alternatively to **Alt F**, documents can be easily linked to a reference by dragging the document file and dropping it to the cb2Bib panel. - **Alt I**\ Edits and optionally inserts the current regular expression pattern. See the [Extracting Data from the Clipboard](#clipboard) and [Regular Expression Editor](#regexpeditor) sections. - **Alt J**\ Edits the Journal Abbreviations file. - **Alt O**\ Opens the currently linked document for browsing. Documents can be easily linked to a reference by dragging the document file and dropping it to the cb2Bib panel, or with **Alt F**. Linked documents correspond to the BibTeX tag `file`. - **Alt P**\ Postprocess BibTeX output file. It launches a user specified script or program to postprocess the current BibTeX file. The cb2Bib distribution contains two sample scripts. One, `bib2pdf` is a shell script for running `latex` and `bibtex`; this permits to check the BibTeX file for possible errors, and to easily produce a suitable output for printing. The other one, `bib2end.bat` is a batch script for running `bib2xml` and `xml2end`, which converts references into Endnote format. See [Configuring BibTeX](#c2bconf_bibtex) for details. - **Alt R**\ Restarts cb2Bib automatic engine. Takes input data not from the system clipboard but from the cb2Bib clipboard panel. This permits editting the input stream from poorly translated PDF captions, correcting for author superscripts, or helps in debugging regular expressions. - **Alt W**\ Writes current reference to the source document file. This option is intended for writing and updating bibliographic metadata to document files without needing to use BibTeX files. Only local and writable files are considered. - **Alt X**\ Check Repeated looks for existing references in the BibTeX directory similar to the current one. The search is done for exact cite ID, and for title and author field values, or, if empty, for booktitle and editor,using the [approximate string](https://arxiv.org/abs/0705.0751){target="_blank"} search pattern. See also [Configuring BibTeX](#c2bconf_bibtex). - **F4**\ Toggles between Main and Other Fields reference edit tabs. - **Esc**\ Quits cb2Bib popup menu. The cb2Bib menu pops up each time a selection in made in the clipboard panel. This saves keystrokes in a normal bibliographic extraction. Press **Esc** or **Right Click** mouse button if you need to gain access to the editor cut/copy/paste functionality instead.   ### []{#detail} Advanced Features Advanced features, and processing and extraction details are described in the following sections: - [Automatic Extraction: Questions and Answers](#faq_automatic_extraction) - [Extracting Data from the Clipboard](#clipboard) - [Processing of Author Names](#authorproc) - [Processing of Journal Names](#journalproc) - [Field Recognition Rules](#heuristics) - [Regular Expression Editor](#regexpeditor) Configuration information is described in the following sections: - [Configuration](#configuration) - [Predefined Placeholders](#predefinedplaceholders) Utilities and modules are described in the following sections: - [Search BibTeX and PDF Document Files](#bibsearch) - [Embedded File Editor](#bibeditor) - [PDF Reference Import](#pdfimport) - [Reading and Writing Bibliographic Metadata](#metadata) - [cb2Bib Command Line](#commandline) - [cb2Bib Annote](#c2bannote) - [cb2Bib Citer](#c2bciter)   ### []{#requirements} Requirements #### []{#requirements_comp} Compilation To compile cb2Bib, the following libraries must be present and accessible: - Qt 5.7.0 or later from [Qt Project](https://www.qt.io/download-dev){target="_blank"}. On a Linux platform with Qt preinstalled, make sure that the `devel` packages and Qt tools are also present. - QtWebKit or QtWebEngine library (optional) to compile cb2Bib Annote viewer. No special action or flag is needed during compilation. - Compression libraries [LZ4](https://lz4.org/){target="_blank"} or [LZO](https://www.oberhumer.com/opensource/lzo/){target="_blank"} (optional). To chose a particular one, type `configure –enable-lz4` or `configure –enable-lzo`. On machines with SSE4 instruction set, the [LZSSE](https://github.com/ConorStokes/LZSSE/){target="_blank"} compressor can be used in place of LZ4 and LZO, by typing `configure –enable-lzsse`. If none of the above compressors were appropiate on a particular platform, type `configure –enable-qt-zlib` before compiling. - On machines with AVX2 instruction set, consider using `configure –enable-avx2` as this will improve cb2Bib search performance. - X11 header files if compiling on Unix platforms. Concretely, headers `X11/Xlib.h` and `X11/Xatom.h` are needed. - The header files `fcntl.h` and `unistd.h` from `glibc-devel` package are also required. Otherwise compilation will fail with `‘::close’ undeclared`. #### []{#requirements_run} Deployment Although not needed for running cb2Bib, the following tools extend cb2Bib applicability: - `MathJax`, available at [https://www.mathjax.org](https://www.mathjax.org/){target="_blank"}, for displaying mathematical notation. Simply, download and unzip it in a desired directory. See [Configuring Annote](#c2bconf_annote). - `ExifTool`, version 7.31 or later, available at [https://exiftool.org](https://exiftool.org/){target="_blank"}, for metadata insertion. - `pdftotext`, found packaged as `xpdf`, and downloadable from [https://www.xpdfreader.com/download.html](https://www.xpdfreader.com/download.html){target="_blank"}. - The `bib2xml` and `xml2end` [BibUtils](http://bibutils.refbase.org/){target="_blank"}, for the postprocessing script `bib2end.bat` on Windows platforms. - LaTeX packages, for checking BibTeX files correctness and for references printing through the shell script `bib2pdf`.   ### []{#credits} Credits and License The cb2Bib icons are taken from the *Oxygen*, *Crystal SVG*, and *Noia* icon sets, to be found at the [KDE Desktop Environment](https://kde.org/){target="_blank"}. Several people has contributed with suggestions, bug reports or patches. For a detailed list of acknowledgments see the [Change Log File](https://www.molspaces.com/cb2bib/doc/changelog/). The cb2Bib program is licensed under the terms of the [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.html){target="_blank"} version 3.   > ***Last updated on 2025-11-10.***\ > *First released version 0.1.0 on 2004-06-29.*\ > © *2004-2025 Pere Constans*\ ::: ::: ## []{#installation}Installation ::: contents ::: textblock   ### []{#linux-tar} Installing on Unix systems (tarball) The following is the general, platform independent install procedure. - Unpack the distribution file:\ \ `tar -xzvf cb2bib-2.0.3.tar.gz`\ \ - Move to cb2Bib directory:\ \ `cd cb2bib-2.0.3`\ \ - Type the following commands:\ \ `./configure --prefix /usr/local`\ `make`\ `make install`\ \ Installation is now complete. To uninstall type `make uninstall` from within the cb2Bib compilation directory. **Note:** If the `./configure` step would fail while having the appropriate Qt libraries and utilities installed, try `qmake` instead of `./configure`, and configure manually the required file directories once cb2Bib first starts. **Note:** Use the `./configure --help` command for a detailed list of configuration options. Among them, choosing an appropriate compression library, LZ4, LZO, or SSE4 based LZSSE, and setting instruction set to AVX2 on capable CPUs, will improve cb2Bib search performance.   ### []{#linux-rpm} Installing on Unix systems (RPM) To build an appropriate RPM for your platform, type, e. g., `rpm –rebuild –target=i686 cb2bib-2.0.3-0.src.rpm` or a distro-dependend, equivalent command (perhaps `rpmbuild`). This will compile cb2Bib and build the required binary RPM (often placed at the `/usr/src/packages/RPMS/i686` directory). See also [Release Note cb2Bib 0.6.90](#relnotes0690) regarding `QTDIR` environment if having compilation problems. Once the binary RPM is build, installation is as follows. To install your RPM binary, simply type `rpm -Uhv cb2bib-2.0.3-0.i686.rpm` To uninstall, type `rpm -e cb2bib-2.0.3`   ### []{#linux-deb} Installing on Debian systems (deb) To install cb2Bib, first make sure that you are actually using the packages for the proper Debian suite, as configured in the `/etc/apt/sources.list` file. Next, issue the following commands as root, `apt-get update` `apt-get install cb2bib` to resolve all required dependencies and install the program.   ### []{#windows} Installing on Windows systems On Windows platforms installation is simple. Just launch the Windows Installer `cb2bib-2.0.3-install.exe` and follow the installation wizard indications. To uninstall, click the \'Unistall\' icon.   ### []{#mac} Installing on Mac OS X To install cb2Bib from its sources, make sure you have the following build tools on your system: - Qt toolkit version 5.7.0 or later (qt-mac-\*.dmg):\ \ [https://www.qt.io/download-dev](https://www.qt.io/download-dev){target="_blank"}\ \ - XCode from Apple:\ \ [https://developer.apple.com/xcode/](https://developer.apple.com/xcode/){target="_blank"}\ \ - bin-utils via darwinports\ \ \ - **Buiding with make/Makefile:**\ \ Type on a shell window:\ \ `tar -xzvf cb2bib-2.0.3.tar.gz`\ `cd cb2bib-2.0.3`\ `./configure --prefix /Applications/cb2Bib --qmakepath /Developer/Tools/Qt/qmake`\ `make`\ `make install`\ \ - **Buiding with make/Makefile (no configure and no external compression):**\ \ Type on a shell window if `configure` fails:\ \ `tar -xzvf cb2bib-2.0.3.tar.gz`\ `cd cb2bib-2.0.3`\ `/Developer/Tools/Qt/qmake -config use_qt_zlib`\ `make`\ \ - **Buiding with XCode:**\ \ Type on a shell window:\ \ `tar -xzvf cb2bib-2.0.3.tar.gz`\ `cd cb2bib-2.0.3`\ `/Developer/Tools/Qt/qmake cb2bib.pro -spec macx-xcode`\ \ Open `cb2bib.xcodeproj` with XCode and build from there.\ \ **Note:** It has been reported that qmake does not make usable XCode projects from subdir qmake projects. It is possible to produce one-single `.pro` file for the whole project, by typing `qmake -project -r` to create a base `.pro` file. An example and detailed instructions can be found at `./qmake/cb2bib-osx.pro`. See also [Configuration](#configuration). ::: ::: ## []{#configuration}Configuration ::: contents ::: textblock     ### []{#c2bconf_annote} Configuring Annote - **Annote Cascading Style Sheet (CSS)**\ This file contains the style sheet to personalize the appearance of the HTML notes generated by the cb2Bib. The cb2Bib distribution includes the `tex2html.css` file as a CSS template. - **MathJax Header File**\ The mathematical notation in the text notes is displayed by [MathJax](https://www.mathjax.org/){target="_blank"}, the successor of the [jsMath](https://www.math.union.edu/~dpvc/jsMath/){target="_blank"} Java Script library. Its location and configuration must be specified inside the HTML files in order to be known by the browser. Check and eventually edit the distribution file `tex2html_local_mathjax_header.html`. Should web script be preferred set script source to [`https://cdn.mathjax.org/mathjax/latest/MathJax.js`](https://cdn.mathjax.org/mathjax/latest/MathJax.js). - **Include CSS in HTML**\ Styles for the notes will be included, if checked, into the HTML file. In this way, all the information, text and layout, is contained in one single file. - **Use relative links**\ If checked, linked local files will be set relative to the current HTML document. - **Annote Viewer Fonts**\ Selects default and monospaced fonts for the Annote viewer. Changes in the fonts might need restarting the viewer unless using some of the latest QtWebKit libraries. The viewer is disabled if cb2Bib was not compiled and linked against QtWebKit or QtWebEngine. Note also that fonts specified in the CSS prevail over this selection. ### []{#c2bconf_bibtex} Configuring BibTeX - **Cite ID Pattern**\ Specifies the pattern for formatting cite\'s ID. Predefined placeholders are available as a context menu, by right-clicking this edit line. Placeholders will be substituted by the actual reference field values. See [Cite and Document ID Placeholders](#idplaceholders) for descriptions. - **Author and Editor Name Format**\ Sets Authors and Editor names in abbreviated or full form, if the latter is available. - **Journal Name Format**\ Sets output journal names in abbreviated or full form. Note that this feature only works if journal names are found in the `Journal Abbreviation List file`. See [Processing of Journal Names](#journalproc). - **Number Separator**\ Sets number separator, e.g., \' - \' or \' -- \'. Spaces count. It applies to `pages`, multiple `volume`, `number`, and `year` cases. - **Cite Command Pattern**\ Specifies the pattern for formatting cite command. Predefined command patterns for LaTeX and Markdown (see [Pandoc User\'s Guide](https://pandoc.org/MANUAL.html#citations){target="_blank"}) are available in the line context menu. Other, customized command patterns are also available, see [Cite Command Placeholders](#citeplaceholders) for descriptions. - **Convert entry strings to LaTeX**\ If checked, cb2Bib converts special characters to LaTeX commands. Most BibTeX import filters do not process LaTeX escaped characters. Therefore, keeping this box unchecked can be appropriate when using cb2Bib as a temporary media to transfer references to non BibTeX reference managers. - **Set \'title\' in double braces**\ If checked, it writes extra braces in title. This will keep capitalization as is, when processed by BibTeX. - **Postprocess \'month\'**\ If checked, cb2Bib elaborates the \'month\' string on a BibTeX fashion. E.g., \'April 1\' becomes \'\"1\~\" \# apr\'. No processing is done if the input string is not written in English. - **Try Heuristic Guess if recognition fails**\ If checked, when automatic recognition fails, cb2Bib tries to catch some of the fields of the reference through an heuristic set of rules. See [Field Recognition Rules](#heuristics). - **Check Repeated On Save**\ If checked, cb2Bib looks for existing references in the BibTeX directory similar to the one being saved. The search is based on exact cite ID match, or on reference contents, by considering title and author field values, or, if empty, booktitle and editor, and using the [approximate string](https://arxiv.org/abs/0705.0751){target="_blank"} search pattern. If similar references are found, the current reference is not saved, and the similar ones are displayed. Pressing the **save button one second time will proceed to actually saving the current reference**. Note that this feature is not applied in command line mode, when using `cb2bib –txt2bib` or `cb2bib –doc2bib`. See also [Additional Keyboard Functionality](#keyboard). - **External BibTeX Postprocessing**\ Use this box to select a BibTeX postprocessing external tool. The name of the executable, the command arguments and the output file extension are required fields. Arguments, any number, are passed to the executable. For the sake of generality, it is required to specify the `%finput` and `%foutput` placeholders. The first one is later substituted by the current BibTeX filename. The second one is substituted by the current filename with the specified output extension. **Caution:** Be careful if using the same file extension for input and output, e.g., using `bib` because you want to use a beautifier or a sorting script. cb2Bib has no control on external disk modifications. Therefore, if the script failed, the input data would possibly be lost. See also [Additional Keyboard Functionality](#keyboard). ### []{#c2bconf_clipboard} Configuring Clipboard - **Replace/Remove from Input Stream**\ If checked, input stream is preprocessed by performing a customizable set of string substitutions/removals. This option is mainly intended to remove image HTML `alt` tags. Although not visible, `alt` tags reach the clipboard when selecting and copying text. Author lists with email icons may contain `alt` strings that would interfere with the author names processing. In addition, this option is also appropriate to help translating special characters to Unicode and LaTeX. Use it carefully, as to avoid unwanted or unsuspected substitutions. See also [Extracting Data from the Clipboard](#clipboard). - **External Clipboard Preparsing Command**\ Preparses input stream through an external, user-defined tool. Use the box bellow to specify its name and path. cb2Bib executes the command `tool_name tmp_inputfile tmp_outputfile`. You might consider a wrapper shell script to fullfill this particular syntax requirement. Two examples, `isi2bib` and `ris2bib` are provided. To test them, make sure the [BibUtils Package](http://bibutils.refbase.org/){target="_blank"} is available on your machine. Otherwise, modify these scripts according to your needs. See also [Additional Keyboard Functionality](#keyboard), [Extracting Data from the Clipboard](#clipboard), and the examples [ISI Reference Format](#ex_isi_format) and [RIS Reference Format](#ex_ris). - **Perform always, as part of an automatic extraction**\ Performs preparsing each time the recognition engine is invoked. **Caution:** cb2Bib, when not in disconnected mode, starts the recognition engine each time the clipboard changes. Therefore, it might send arbitrary data to the external parsing tool. The tool might not be prepared to handle **\'any data\'** and might fall into a sort of **\'infinite loop\'**. cb2Bib kills the external tool after a reasonable waiting. But, if the tool is called through a wrapper script, killing the script will not end the tool itself. Therefore, **check this box only when needed**. If you write your own preparser, design it as to write no data to output file whenever it can not process an input properly. When the preparser produces no data, cb2Bib sends instead the input stream to the recognition engine. In this way, preparsing and normal cb2Bib functioning will work harmoniously. - **Do not show log**\ If unchecked, the external process messages, and the input and output streams are shown in a log window. Showing output logs is useful for debugging purposes. - **Add document metadata to Input Stream**\ When checked, if the document linked to a reference contains relevant metadata, then metadata will be added to the current clipboard contents. The metadata is included at the time of adding the document to the current reference, e. g., when dropping a file into the cb2Bib panel. If the document has BibTeX information, cb2Bib will automatically set the corresponding fields. If it has not, but relevant bibliographic information is found, this data is only added to the clipboard panel. To insert it in the edit lines, activate the Heuristic Guess (Alt+G). The option **Prepend** or **Append** to the clipboard contents is provided for conveniently writing regular expressions considering metadata contents. File documents are linked to the references by the BibTeX tag \'file\'. See also [Reading and Writing Bibliographic Metadata](#metadata). ### []{#c2bconf_documents} Configuring Documents - **Rename and Copy/Move document files to Directory**\ If selected, each file \'drag and dropped\' onto the cb2Bib main window is renamed to `DocumentID.pdf` (or DocumentID.ps, DocumentID.dvi, etc.) and moved to the storage directory. If unselected, the file URL is written to the `file` BibTeX keyword, without any renaming or moving of the file. The actual copy/move action is scheduled and performed once the reference is accepted, e.g., once it is saved. - **Copy or Move document files**\ Choose whether copy or move Network Files dropped onto the cb2Bib main window. See also **Use External Network Client**. - **Set directory relative to the BibTeX File Directory**\ If checked, the document file is copied/moved to the current BibTeX file directory. If the Documents Directory box contains a **relative directory** it will be added to the file name. For example, if it contains `articles`, files will be copied to `/current_bibtex_path/articles/`. An absolute path in the Documents Directory box will be ignored in this context. Note that the file dialog returns here relative file addresses. Consequently, only the necessary portion of the full name, instead of the fullpath filename, is written to the BibTeX entry. File retrieving from within the cb2Bib browser will be relative to the BibTeX file absolute location.\ Use this option if you plan to store in a same or a related directory the BibTeX and document files. This option is appropriate for storing bibliographic collections in removal devices. Likewise, when cb2Bib is launched in USB mode, by means of the command line switch `–conf`, the alternate option is not available. See [Release Note cb2Bib 0.8.4](#relnotes084) and [Export Selected Entries](#export_entries). - **Insert BibTeX metadata to document files**\ If checked, cb2Bib will write bibliographic metadata to the linked document, once the current reference is accepted and saved. See also [Reading and Writing Bibliographic Metadata](#metadata). - **Document ID Pattern**\ Specifies the pattern for formatting the document\'s filenames. Predefined placeholders are available as a context menu, by right-clicking this edit line. Placeholders will be substituted by the actual reference field values. See [Cite and Document ID Placeholders](#idplaceholders) for descriptions. - **ExifTool Metadata writer**\ cb2Bib uses [ExifTool](https://exiftool.org/){target="_blank"} for writing bibliographic metadata to the attached documents. Select here the ExifTool path name. On Windows, remember renaming `exiftool(-k).exe` to `exiftool.exe` for command line use. See also [Writing Metadata](#metadata_write). ### []{#c2bconf_files} Configuring Files - **Journal Abbreviation List File**\ This file contains a list of journal names equivalences: a capital-letter acronym, standard abbreviated form, and full name of the journal. If an input journal name is recognized, cb2Bib will use the standard abbreviated form for the `journal` bibkey. If your usual journal were not within the distributed, default `abbreviations.txt`, you could edit this file, or point to a personalized abbreviation file. **Note:** Changes in the abbreviation file only take place after reestarting cb2Bib. See [Processing of Journal Names](#journalproc). - **Regular Expression List File**\ The cb2Bib distribution includes the file `regexps.txt` with a few set of rules for reference extraction. This includes most of the scientific literature. Extracting from email alerts or publisher abstract pages is a *volatile* task. Information does not follow a standardized structure. Extraction pattern may then change as often as the web design needs to. Besides, such extraction from the clipboard is system dependent, in a way that produces different formatting of the text copies on different systems. You can use your personalized `regexps.txt` file, for testing, debugging -regular expressions are reloaded each time the automatic recognition engine executes-, and fullfiling your particular extraction needs. - **Bookmarks and Network Query Info File**\ The cb2Bib distribution includes the file `netqinf.txt` that contains bookmarks data, and server related information for bibliographic querying. Note that cb2Bib treats bibliographic queries as generalized net bookmarks. This allows accessing almost any online bibliographic resource. Check this file for implementations details and customization. - **Browser Cascading Style Sheet (CSS)**\ This file contains the style sheet to configure the appearance of the bibliographic references when viewed in browser mode. The cb2Bib distribution includes the `references.css` and `references-dark.css` file as a CSS examples. - **Part Of Speech (POS) Lexicon**\ This box must contain the address to the cb2Bib distribution file `lexicon.pos`. This file contains a set of patterns and related POS information required for indexing documents, i. e., to extract keywords from documents for the c2bCiter module. - **Search In Files Cache Directory**\ Directory containing internal data for Search In Files functionality. If an existing directory is selected cb2Bib will write all internal data on it. If otherwise, cache data will be written on the same directory from where BibTeX are searched. It might be, therefore, convenient to group all this files in a separate directory that does not need to be backup, and that can easily be deleted whenever desired. ### []{#c2bconf_fonts} Configuring Fonts - **Font Selector**\ Selects the main window and editor font family and size. - **Context Colors**\ Doubleclick on context color items to select syntax highlighter font color. Besides syntax highlighting, and to ease manual bibliographic extractions, cb2Bib has the following coloring convention. \'cb2Bib unrelevant text\' colors non-word, non-digit, and cb2Bib\'s internal tags. \'cb2Bib relevant text\' refers to the reference\'s year. \'cb2Bib highly relevant\' attempts to guess text sectioning, highlighting \'abstract\', \'introduction\', and \'keywords\'. ### []{#c2bconf_network} Configuring Network - **Use External Network Client**\ cb2Bib manages local and network files in an equivalent manner. Network file retrieving, however, requires sometimes password and/or cookies administration. The KDE desktop incorporates `kfmclient` utility. A command `kfmclient (copy|move|exec) source [destination]` permits copying or moving files, with `kfmclient` taking care of advanced browsing preferences. By checking this box, cb2Bib will use the specified file manger client. - **Use Proxy**\ If checked, cb2Bib will access the network through a proxy host. Set the Host name, the Port, and the proxy Type. A login dialog will appear if the proxy requires authentication. Login data is not stored, it must be entered at each session. - **Perform Network Queries after automatic reference extractions**\ Network queries can be used to complete a partial reference extraction. For instance, provided a reference \'J. Name, 25, 103\' and an appropriate pattern to extract it, cb2Bib will attempt to complete the reference automatically. No query is performed if automatic reference extraction was tagged as BibTeX. - **Download document if available**\ If checked, cb2Bib downloads document files to the directory specified in **Rename and Copy/Move document files to Directory**. See also the file `netqinf.txt` for details. Download is scheduled and performed once the reference is accepted, e.g., once it is saved. Note that when document file is local, e.g., when PDFImport or switch `–doc2bib` is used, no document is downloaded. - **Keep Query temporary files (Debug Only)**\ cb2Bib may use up to three temporary files to perform a network query. If this box is checked, the temporary files are not deleted. This facilitates the testing and customization of the information file `netqinf.txt`. ### []{#c2bconf_shortcuts} Configuring Shortcuts - Customizes most key sequences for actions shortcuts. Concretely, cb2Bib specific actions are configurable, but not standard actions such as \'Open\', \'Exit\', \'Copy\', or \'Paste\', which are already predefined to the standard, specific key sequences for each platform. Shortcuts are customizable for the cb2Bib main panel, editor, and reference list actions. Single-key shortcuts, i.e., for manual reference extraction and shortcuts in c2bCiter, are non-configurable, since they they closely map non-translatable BibTeX keywords. ### []{#c2bconf_utilities} Configuring Utilities - **To plain text converter**\ Selects the external `some_format_to_text` tool that cb2Bib uses to convert document files prior to reference extraction and searching. cb2Bib executes the line command `converter [options] inputfile tmp_output.txt`, where `[options]` are user defined arguments. As a default, cb2Bib launches `pdf2cb`, a modified PDF to text utility found in the XPDF package. Modifications are available at xpdf/ directory in the cb2Bib sources. Default arguments are `-q -f 1 -l 1` to extract only the first, title page when used within PDFImport, and `-q`, to convert the complete document when used within Search in Files. Appropriate for PDFImport could also be a document metadata extractor. Often metadata contains structured information regarding document authors, title, and source. A simple shell script wrapper could be the following `any2text_search`: ``` fragment #!/bin/csh # Convert documents to text according to filename extension # any2text_search input_fn.ext output_fn.txt set ext = $1:e if ( $ext == 'djvu' ) then /usr/bin/djvutxt "$1" "$2" if ($status) exit 1 else if ( $ext == 'chm' ) then (/usr/local/bin/archmage -c text "$1" "$2") >& /dev/null if ($status) exit 1 else # If using pdf2cb /path/to/pdf2cb -q "$1" "$2" # If using pdftotex # /usr/bin/pdftotext -enc UTF-8 "$1" "$2" if ($status) exit 1 endif ```   ::: ::: ## []{#bibsearch}Search BibTeX and PDF Document Files ::: contents ::: textblock ### []{#searchfunct} Search Functionality - **Search pattern**\ Patterns and composite patterns can be either [approximate strings](https://arxiv.org/abs/0705.0751){target="_blank"}, strings, contexts, regular expressions, or wildcard filters. Patterns admit Unicode characters. The scope of each pattern can be the reference as a whole or be focused on a particular reference field. The fields `year`, `file`, and `journal` are treated specifically. The field `year` has the qualifiers `Exact`, `Newer`, and `Older`. The field `file` can optionally refer to either the filename or the contents of such a file. Finally, for `journal`, the input pattern is duplicated to the, if available, journal fullname, and they two are checked against the `journal` actual field contents and, if available, its expanded contents. For example, typing \'ijqc\' retrieves all references with `journal` being \'Int. J. Quantum Chem.\'. Or, typing \'chemistry\' retrieves any of \'J. Math. Chem.\', \'J. Phys. Chem.\', etc. This expansion is not performed when the pattern scope is set to `all`. - **Search scope**\ By default, searches are performed on the current BibTeX output file. If **Scan all BibTeX files** is checked the search will extend to all BibTeX files, extension .bib, present in the current directory. It might be therefore convenient to group all reference files in one common directory, or have them linked to that directory. When **Scan linked documents** is checked, and one or more pattern scope is `all` or `file`, the contents of the file in `file` is converted to text and scanned for that given pattern. See [Configuring Utilities](#c2bconf_utilities) section to configure the external to text converter. - **Search modifier**\ cb2Bib converts TeX encoded characters to Unicode when parsing the references. This permits, for instance, for the pattern \'Møller\' to retrieve either \'Møller\' or \'M{\\o}ller\', without regard to how the BibTeX reference is written. By checking **Simplify source**, the reference and the converted PDF files are simplified to plain ASCII. In this way, the pattern \'\\bMoller\\b\' will hit any of \'Møller\', \'M{\\o}ller\', or \'Moller\'. Additionally, all non-word characters are removed, preserving only the ASCII, word structure of the source. Note that source simplification is only performed for the patterns whose scope is `all` or `file` contents, and that and so far, cb2Bib has only a subset of such conversions. Implemented TeX to Unicode conversions can be easily checked by entering a reference. The Unicode to ASCII letter-only conversion, on the other hand, is the one that cb2Bib also uses to write the reference IDs and, hence, the renaming of dropped files. cb2Bib can understand minor sub and superscript formatting. For instance, the pattern \'H2O\' will retrieve \'H~2~O\' from a BibTeX string `H$_{2}$O`. ### []{#contextsearch} Contextual Search A convenient way to retrieve documents is by matching a set of keywords appearing in a close proximity context, while disregarding the order in which the words might had been written. cb2Bib considers two types of contextual searches. One flexibilizes phrase matching only at the level of the constituting words. It is accessed by selecting `Fixed string: Context` in the pattern type box. The other one, in addition, stems the supplied keywords. It is accessed by selecting `Context`. By way of stemming, the keyword *analyze*, for example, will also match *analyse*, and *aluminum* will match *aluminium* too. The syntax for `Context` type patterns is summarized in the following table: ``` fragment Operator Example Expansion space contextual search contextual AND search | contextual search|matching contextual AND (search|match) + contextual search|+matching contextual AND (search|\bmatching\b) _ contextual_search contextual.{0,25}search - non-parametric non.{0,1}parametr . non.parametric non.{0,1}parametr Diacritics and Greek letters: naïve search (naïve|naive) AND search kendall tau kendall AND (tau|τ) ``` In the above examples, operator space `AND` means match words in any order. Operator `_` preserves word order, and operator `+` prevents stemming and forces exact word match. Operator `-` considers cases of words that might had been written either united, hyphenated, or space separated. Diacritics are expanded if the diacritic mark is specified. This is, *naive* will not match *naïve*. On the other hand, Greek letters are expanded only when typed by name. ### []{#notes} Notes - cb2Bib uses an internal cache to speed up the search of linked files. By default data is stored as `current_file.bib.c2b`. It might be more convenient, however, to setup a temporary directory out of the user data backup directories. See **Search In Files Cache Directory** in [Configuring Files](#c2bconf_files). When a linked file is processed for the first time, cb2Bib does several string manipulations, such as removing end of line hyphenations. This process is time consuming for very large files. - The **approximate string** search is described in reference [https://arxiv.org/abs/0705.0751](https://arxiv.org/abs/0705.0751){target="_blank"}. It reduces the chance of missing a hit due to transcription and decoding errors in the document files. Approximate string is also a form of serendipitous information retrieval. ::: ::: ## []{#commandline}cb2Bib Command Line ::: contents ::: textblock The complete listing of command line uses follows. ``` {style="font-size: xx-small;"} Usage: cb2bib cb2bib [action] [filename1 [filename2 ... ]] [--conf [filename.conf]] Actions: --configure [filename.conf] Edit configuration --bibedit [filename1.bib [filename2.bib ... ]] Edit/browse BibTeX files --citer [filename1.bib [filename2.bib ... ]] Start cb2Bib citer --import tmp_reference_filename Import reference, usually from ad hoc websites --doc2bib fn1.doc [fn2.doc ... ] reference.bib Extract reference from document file --txt2bib fn1.txt [fn2.txt ... ] reference.bib Extract reference from text file --index [bibdirname] Extract keywords from document files --html-annote filename.tex Convert annote file to HTML --view-annote filename.tex Convert and visualize annote file --view-annote filename.tex.html Visualize annote file Switches: --conf [filename.conf] Use configuration file --sloppy Accept guesses in automatic reference extraction Examples: cb2bib Start cb2Bib extraction panel cb2bib --import tmp_reference_filename Import reference cb2bib --bibedit filename.bib Edit BibTeX filename.bib cb2bib --conf Start cb2Bib in USB mode cb2bib --doc2bib *.pdf references.bib Extract references from PDF title pages Notes: -Use switch --conf to particularize specific settings for specific actions. -The file cb2bib.conf must be readable and writable. If it does not exist, cb2Bib will create one based on predefined defaults. -If starting cb2Bib from a removable media, use the command 'cb2bib --conf' without configuration filename. Settings will be read from and written to /cb2bib/full/path/cb2bib.conf, being therefore independent of the mounting address that the host computer will provide. -To import references from a browser select when asked c2bimport, which expands to 'cb2bib --import %f'. The browser will provide the temporary reference filename. -A number of factors influence the reliability of automatic extractions. Consider writing customized regular expressions and network queries, and use metadata when available. Important: -The commands --doc2bib and --txt2bib do not append the references to the references.bib. They create a new file, or silently overwrite it if already exists. ``` - **Note:** On Windows use `c2bconsole` instead of `cb2bib`. See [Release Note cb2Bib 1.3.0](#relnotes130). - **Note:** If using reference extraction command, see [Automatic Extraction: Questions and Answers](#faq_automatic_extraction). ::: ::: ## []{#c2bannote}cb2Bib Annote ::: contents ::: textblock The cb2Bib Annote module is named after the BibTeX key `annote`. Annote is not for a \'one reference annotation\' though. Instead, Annote is for short notes that interrelate several references. Annote takes a plain text note, with minimal or no markup, inserts the bibliographic citations, and converts it to a HTML page with links to the referenced documents. From within cb2Bib, to write a note, type `Alt+A`, enter a filename, either new or existing, and once in Annote, type `E` to start the editor. Each time you save the document the viewer will be updated. For help on Annote\'s syntax type `F1`. If cb2Bib was compiled without Annote\'s Viewer, typing `Alt+A` will start the editor and HTML viewing will be committed to the default web browser. From the command line, typing ``` fragment cb2bib --html-annote annote.tex ``` will produce the HTML file `annote.tex.html`. See also [Configuring Annote](#c2bconf_annote) and [cb2Bib Command Line](#commandline). ### []{#c2bannote_syntax} Annote Syntax The resulting HTML file `annote.tex.html` can be seen at [cb2Bib Annote](https://www.molspaces.com/cb2bib/doc/c2bannote/annote.tex.html){target="_blank"}. ``` {style="font-size: xx-small;"} % annote.tex %\c2b_bibtex_directory{/home/constans/Documents/BibReferences} %\c2b_makeindex \newcommand{\RR}{\mathbb{R}} \newcommand{\mnial}[3]{(#1 - #2)^#3} \title{cb2Bib Annote} \begin{abstract} This documents describes cb2Bib Annote. It succinctly lists Annote's minimalists syntax. \end{abstract} \section{cb2Bib Directives} \subsection{Make Index} \begin{verbatim} %\c2b_makeindex \end{verbatim} \subsection{BibTeX Directory} \begin{verbatim} %\c2b_bibtex_directory{/home/constans/Documents/BibReferences} \end{verbatim} \section{Simple Markup} \subsection{Uniform Resource Locator} \begin{verbatim} - URL: https://www.molspaces.com/cb2bib/doc/c2bannote/ - Named URL: https://www.molspaces.com/cb2bib/doc/c2bannote/[cb2Bib Annote] - On a blank window: _https://www.molspaces.com/cb2bib/doc/c2bannote/[cb2Bib Annote] \end{verbatim} \subsubsection{Example} - URL: https://www.molspaces.com/cb2bib/doc/c2bannote/ - Named URL: https://www.molspaces.com/cb2bib/doc/c2bannote/[cb2Bib Annote] - On a blank window: _https://www.molspaces.com/cb2bib/doc/c2bannote/[cb2Bib Annote] \subsection{Bibliographic Citations} \begin{verbatim} \cite {key} \end{verbatim} \subsubsection{Example} Citing cb2Bib \cite{cb2bib_key}. \section{LaTeX Markup} \subsection{Document Sections} \begin{verbatim} \title{Title string} \end{verbatim} \begin{verbatim} \section{Section string} \end{verbatim} \begin{verbatim} \subsection{Section string} \end{verbatim} \begin{verbatim} \subsubsection{Section string} \end{verbatim} \subsection{Document Environments} \begin{verbatim} % env = abstract, equation, itemize, and verbatim \begin{env} \end{env} \end{verbatim} - Note. equation rendering requires MathJax \cite{jsmath_key, mathjax_key} \subsubsection{Examples} \begin{verbatim} \begin{itemize} \item Description 1 \item Description 2 \end{itemize} \end{verbatim} \begin{itemize} \item Description 1 \item Description 2 \end{itemize} \begin{verbatim} \begin{equation} \int_D ({\nabla\cdot} F)dV=\int_{\partial D} F\cdot ndS \end{equation} \end{verbatim} \begin{equation} \int_D ({\nabla\cdot} F)dV=\int_{\partial D} F\cdot ndS \end{equation} \subsection{Mathematical Macros} \begin{verbatim} \newcommand{name}[number of arguments]{definition} \end{verbatim} \subsubsection{Example} \begin{verbatim} \newcommand{\RR}{\mathbb{R}} \newcommand{\mnial}[3]{(#1 - #2)^#3} ... a subset of $\RR$ values ... ... the monomial is $\mnial{a}{x}{2} > 0$ for $x \ne 0$, and $\mnial{a}{x}{3} \mnial{c}{x}{3}$ for $x < a \land x < c$ or $x > a \land x > c$ ... \end{verbatim} ... a subset of $\RR$ values ... ... the monomial is $\mnial{a}{x}{2} > 0$ for $x \ne 0$, and $\mnial{a}{x}{3} \mnial{c}{x}{3}$ for $x < a \land x < c$ or $x > a \land x > c$ ... \section{MathJax Example} \begin{verbatim} % Example from https://www.mathjax.org/#demo When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$ \end{verbatim} When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$ ``` ::: ::: ## []{#c2bciter}cb2Bib Citer ::: contents ::: textblock The cb2Bib Citer is a keyboard based module for inserting citation IDs into a working document. Conveniently, the command `c2bciter`, or its expansion `cb2bib –citer`, can be assigned to a global, desktop wide shortcut key. This will provide an easy access to the citer from within any text editor. Pressing the shortcut turns on and off the citer panel. Once appropriate references are selected, pressing key C sets the citations either to the clipboard or to a LyX pipe, closes the citer panel, and returns keyboard focus to the editor. By default, `c2bciter` loads all references from the current directory, specified in the cb2Bib main panel. On the desktop tray, the cb2Bib icon indicates that the citer is running. Its context menu offers the possibility to load other files or directories, or to toggle full screen mode. Search, filtering, navigation, and citation are keyword based. Pressing keys A, I, J, T, and Y sorts the references by author, included date, journal, title, and year, respectively. Key F initiates filtering, and Esc leaves filtering mode. References are selected when pressing enter. Key S toggles the current selection display, and Del clears the selection. The combination Shift + letter navigates through the rows starting by the letter. Advanced filtering capabilities are available after indexing the documents. Document indexing, or term or key sentence extraction, is performed by clicking the tray icon menu action Index Documents. Once indexing is done and after clicking Refresh, pressing K displays the document extracted keywords, and pressing G, the collection glossary of terms. On a keyword, pressing R display all documents indexed by the keyword. On a document, pressing R display related documents. Relatedness is set from keyword based similarity measures. Key sequence Alt+C toggles clipboard connection on and off. When connection is on, the clipboard contents is set, each time it changes, as the filter string. This provides a fast way to retrieve a given reference while browsing elsewhere. ``` fragment Usage: cb2bib --citer [dirname1 [dirname2 ... ]] cb2bib --citer [filename1.bib [filename2.bib ... ]] ``` ``` fragment Display Keys A author - journal - year - title I included date - title J journal - year - author T title Y year - author - journal - title ``` ``` fragment Filter Keys D Delete last filter F Enter pattern filter mode G Toggle glossary of terms view K Toggle document keywords view R Display related documents Left Move to previous filtered view Right Move to next filtered view ``` ``` fragment Action Keys C Cite selected citations and close citer window Del Unselect all citations E Edit current citation's source Enter Select current citation Esc Exit filter mode or close citer window O Open current citation's file S Display the set of selected citations V Display document excerpts in keywords view Shift+ Keyboard search naviagation U Open current citation's URL W Write notes using Annote ``` ``` fragment Tray Icon Actions F1 Citer help Ctrl+O Open BibTeX directory Alt+O Open BibTeX files F5 Refresh Ctrl+F Search in files Alt+L Set Lyx pipe F2 Toggle cb2Bib Alt+C Toggle clipboard Alt+F Toggle full screen Index documents ``` See also [Release Note cb2Bib 1.3.0](#relnotes130), [Release Note cb2Bib 1.4.0](#relnotes140), [Release Note cb2Bib 1.4.7](#relnotes147), [cb2Bib Command Line](#commandline) and [cb2Bib Annote](#c2bannote). ::: ::: ## []{#examples}Examples ::: contents ::: textblock This set of examples considers only simple cases of predifined bibliographic formats, which at present are most frequent on the Web. For complex cases that would require *ad hoc* regular expressions, see the cb2Bib\'s [Advanced Features](#detail). To test the examples, launch cb2Bib, and select the text within the boxes (type also Ctrl-C if running cb2Bib on a Windows machine). cb2Bib will extract the selected reference.   ### []{#example_patterns} Predefined Formats - [BibTeX](#ex_bibtex) - [ISI Reference Format](#ex_isi_format) - [RIS Reference Format](#ex_ris)   #### []{#ex_bibtex} BibTeX ``` fragment @article{Efron, title = {{The Estimation of Prediction Error}}, author = {Bradley Efron}, journal = {Journal of the American Statistical Association}, pages = {619 - 632}, volume = {99}, number = {467}, year = {2004}, } ``` Nowadays most authors and publishers websites export references to BibTeX format. This is the safest way to retrieve a reference with cb2Bib. Select from `@article` to the last `}`. cb2Bib imports the reference. Once imported, cb2Bib permits adding the abstract, keywords or renaming and relocating the document file.   #### []{#ex_isi_format} ISI Reference Format ``` fragment PT Journal AU Kohn, W AU Becke, AD AU Parr, RG TI Density functional theory of electronic structure SO JOURNAL OF PHYSICAL CHEMISTRY BP 12974 EP 12980 PG 7 JI J. Phys. Chem. PY 1996 PD AUG 1 VL 100 IS 31 J9 J PHYS CHEM ER ``` Example provided for testing `isi2bib` external preparsing script. See [Configuring Clipboard](#c2bconf_clipboard) for the setup details.   #### []{#ex_ris} RIS Reference Format ``` fragment TY - JOUR AU - A. J. Coleman PY - 1963 TI - Structure of fermion density matrices JO - Rev. Mod. Phys. SP - 668 VL - 35 ER - ``` Example provided for testing `ris2bib` external preparsing script. See [Configuring Clipboard](#c2bconf_clipboard) for the setup details.   ::: ::: ## []{#toc-additional-features}Additional Features ### []{#bibeditor}Embedded File Editor ::: contents ::: textblock cb2Bib contains a practical editor suitable to manipulate the files related to a cb2Bib session. Abbreviations, bookmarks, regular expressions, and BibTeX are readily available. On BibTeX mode, the editor contains a Reference List to ease file navigation, and to extend the editor functionality. The BibTeX editor can optionally be turned to a reference browser. #### []{#bookmarks} Bookmarks Bookmarks pointing to local or network files are available at the editor menu bar. They provide a fast access to external resources. Concretely, they are suitable for retrieving working documents, writing notes, or for accessing internet databases. The editor bookmark functionality had been introduced in the cb2Bib version 0.9.3. Currently, bookmarks are set manually in the `netqinf.txt` file, see [Configuring Files](#c2bconf_files). Each bookmark is an entry line with the form ``` fragment editorbookmark=Description|Target file name|Shortcut|Icon file name ``` having four fields, description, target file name, shortcut, and icon file name, separated with three (required) vertical bars \|. ``` fragment # Bookmark Examples: # - A URL: editorbookmark=URL Description|https://www.molspaces.com/cb2bib/doc/bibeditor/|| # - A separator, which is a blank line: editorbookmark= # - A TeX document, which will be opened with its default application: editorbookmark=Document Description|/home/doc/chapter1.tex|| ``` #### []{#update_metadata} Update Documents Metadata The Update Documents Metadata functionality is available at the Edit and context menus on the BibTeX editor mode. Documents referred in the BibTeX file tags are scanned for metadata. If the BibTeX reference does not coincide with the bibliographic metadata, the document metadata is updated. In this way, metadata is synchronized with the BibTeX file contents. A log window appears, and possible errors are reported. Reported errors are, non-existence of a document file, read-only files, mismatches between BibTeX references and the actual metadata (often due to HTML tags or other illegal characters in BibTeX), or that the writing to the document format is not implemented. Note that this process will update all documents referenced in the BibTeX file. **While this process is safe, it implies writing into the documents.** Therefore take the usual measures and backup your data. See also [Writing Metadata](#metadata_write). #### []{#export_entries} Export Selected Entries Selected entries can be exported to a separate BibTeX document. Click on `File->Export Entries` menu option, and provide an export filename at the Export Dialog. Optionally, export will copy the document files attached to the citation. The copy of documents is similar to the cb2Bib \'rename/copy/move\' general procedure. See [Configuring Documents](#c2bconf_documents), on **Set directory relative to the BibTeX File Directory**, for copying options. Documents will not be overwritten: copying of existing documents is skipped. Possible issues are reported in the new document, as LaTeX comments. #### []{#c2beditor_menu} Right-Click Menu Functionality Default Key Action ------------- ---------------------------------------- Ctrl+F Find in text Toggle word wrapping Selection to LaTeX Selection to Unicode Journals to full name Journals to alternate full name Journals to abbreviated name Journals to alternate abbreviated name Update documents metadata Shift+Ins Paste current BibTeX Alt+P Save and postprocess BibTeX file #### []{#references_menu} Reference List Right-Click Menu Functionality Default Key Action ------------- -------------------------- Alt+C Cite selected entries Open document file Browse by DOI Web search by Author Web search by Title Web search settings Clear entry selection Refresh list and browser #### []{#browser_menu} BibTeX Browser Right-Click Menu Functionality Default Key Action ------------- -------------------------------- Alt+C Cite selected entries Local search for selected text Web search for selected text Web search settings Clear entry selection Refresh list and browser #### []{#c2beditor_qt} Additional Functionality ----------------- ---------------------------------------------------------- Backspace Deletes the character to the left of the cursor Delete Deletes the character to the right of the cursor Ctrl+A Selects all text Ctrl+C Copy the selected text to the clipboard Ctrl+Insert Copy the selected text to the clipboard Ctrl+K Deletes to the end of the line Ctrl+V Pastes the clipboard text into text edit Shift+Insert Pastes the clipboard text into text edit Ctrl+X Deletes the selected text and copies it to the clipboard Shift+Delete Deletes the selected text and copies it to the clipboard Ctrl+Z Undoes the last operation Ctrl+Y Redoes the last operation LeftArrow Moves the cursor one character to the left Ctrl+LeftArrow Moves the cursor one word to the left RightArrow Moves the cursor one character to the right Ctrl+RightArrow Moves the cursor one word to the right UpArrow Moves the cursor one line up Ctrl+UpArrow Moves the cursor one word up DownArrow Moves the cursor one line down Ctrl+Down Arrow Moves the cursor one word down PageUp Moves the cursor one page up PageDown Moves the cursor one page down Home Moves the cursor to the beginning of the line Ctrl+Home Moves the cursor to the beginning of the text End Moves the cursor to the end of the line Ctrl+End Moves the cursor to the end of the text Alt+Wheel Scrolls the page horizontally Ctrl+Wheel Zooms the text ----------------- ---------------------------------------------------------- ::: ::: ### []{#predefinedplaceholders}Predefined Placeholders ::: contents ::: textblock #### []{#idplaceholders} Cite and Document ID Placeholders - `<<author_all_abbreviated>>` Takes first three letters of the last word of all authors\'s last name in cite, and converts to lowercase. - `<<author_all_initials>>` Takes capitalized initials of all authors in cite. - `<<author_first>>` Takes first author last name. - `<<author_first_lowercase>>` Takes first author last name in lowercase. - `<<citeid>>` This placeholder is meant to be used **alone, and only for document IDs**. It takes the pattern defined for the cite ID. If the cite ID is modified manually, the document ID is synchronized automatically. - `<<journal_initials>>` Takes capitalized initials of journal name. - `<<pages_first>>` First page. - `<<ppages_first>>` First page, written as, e. g., \'p125\'. - `<<title>>` Title. To truncate titles exceeding a maximum length `l` use `<<title_l>>`, where `l` stands for an integer value. - `<<title_underscored>>` Title with blanks set to underscores. To truncate title to `l` characters use `<<title_underscored_l>>`. - `<<title_first_word>>` First word in title, in lowercase. - `<<volume>>` Volume number. - `<<year_abbreviated>>` Last two digits from year. - `<<year_full>>` All digits from year. **Note:** If `author` is empty, `editor` will be considered instead. On conference proceedings or monographs this situation is usual. Similarly, if `title` is empty, `booktitle` is considered. **Note:** Only one placeholder of a given field, e. g. `<<author_first>>` or `<<author_all_initials>>`, should be used to compose the ID patterns. cb2Bib only performs one substitution per field placeholder. **Note:** cb2Bib performs a series of string manipulations, such as stripping diacritics and ligatures, aimed to provide ID values suitable for BibTeX keys and platform independent filenames. Currently only ASCII characters are considered. #### []{#citeplaceholders} Cite Command Placeholders - `<<citeid>>` The `citeid` placeholder replicates the pattern for each citation in the selected citation list. For example, the pattern `\citenum{<<citeid>>}` expands to `\citenum{cid1} \citenum{cid2} ... ` - `<<prefix|citeids|separator>>` The `citeids` placeholder replaces the selected citation list by prepending `prefix` and appending `separator` within the pattern. For example, the markdown pattern `[<<@|citeids|;>>]` expands to `[@cid1; @cid2; ...]`, and the LaTeX pattern `\citeauthor{<<|citeids|,>>}` expands to `\citeauthor{cid1, cid2, ...}`. **Note:** For additional information on cite commands see [LaTeX Bibliography Management](https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management){target="_blank"} and [Pandoc User\'s Guide](https://pandoc.org/MANUAL.html#citations){target="_blank"}. ::: ::: ### []{#entrytype}BiBTeX Entry Types Available as cb2Bib Fields ::: contents ::: textblock cb2Bib includes nearly all standard and extended BibTeX fields. The complete list is as follows. The field descriptions are taken from [The BibTeX Format](http://www.fb10.uni-bremen.de/anglistik/langpro/bibliographies/jacobsen-bibtex.html){target="_blank"} written by Dana Jacobsen. #### []{#main-fields}Main Fields ------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `abstract` An abstract of the work. `author` The name(s) of the author(s), in the format described in the LaTeX book. `file` Usually, the PDF filename of the work. `journal` A journal name. Abbreviations are provided for many journals. `keywords` Key words used for searching or possibly for annotation. `pages` One or more page numbers or range of numbers, such as `42--111` or `7,41,73--97` or `43+` (the \``+`\' in this last example indicates pages following that don\'t form a simple range). To make it easier to maintain Scribe-compatible databases, the standard styles convert a single dash (as in `7-33`) to the double dash used in TeX to denote number ranges (as in `7--33`). `title` The work\'s title, typed as explained in the LaTeX book. `volume` The volume of a journal or multi-volume book. `number` The number of a journal, magazine, technical report, or of a work in a series. An issue of a journal or magazine is usually identified by its volume and number; the organization that issues a technical report usually gives it a number; and sometimes books are given numbers in a named series. `year` The year of publication or, for an unpublished work, the year it was written. Generally it should consist of four numerals, such as `1984`, although the standard styles can handle any `year` whose last four non punctuation characters are numerals, such as `\hbox{(about 1984)}`. ------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- #### []{#other-fields}Other Fields ---------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `address` Usually the address of the `publisher` or other type of institution. For major publishing houses, van Leunen recommends omitting the information entirely. For small publishers, on the other hand, you can help the reader by giving the complete address. `annote` An annotation. It is not used by the standard bibliography styles, but may be used by others that produce an annotated bibliography. `booktitle` Title of a book, part of which is being cited. See the LaTeX book for how to type titles. For book entries, use the `title` field instead. `chapter` A chapter (or section or whatever) number. `doi` The Digital Object Identifier is a unique string created to identify a piece of intellectual property in an online environment. `edition` The edition of a book\-\--for example, \`\`Second\'\'. This should be an ordinal, and should have the first letter capitalized, as shown here; the standard styles convert to lower case when necessary. `editor` Name(s) of editor(s), typed as indicated in the LaTeX book. If there is also an `author` field, then the `editor` field gives the editor of the book or collection in which the reference appears. `eprint` Electronic document file. `institution` The sponsoring institution of a technical report. `ISBN` The International Standard Book Number. `ISSN` The International Standard Serial Number. Used to identify a journal. `month` The month in which the work was published or, for an unpublished work, in which it was written. You should use the standard three-letter abbreviation, as described in Appendix B.1.3 of the LaTeX book. `note` Any additional information that can help the reader. The first word should be capitalized. `organization` The organization that sponsors a conference or that publishes a `manual`. `publisher` The publisher\'s name. `school` The name of the school where a thesis was written. `series` The name of a series or set of books. When citing an entire book, the the `title` field gives its title and an optional `series` field gives the name of a series or multi-volume set in which the book is published. `URL` The WWW Universal Resource Locator that points to the item being referenced. This often is used for technical reports to point to the ftp site where the postscript source of the report is located. ---------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ::: ::: ### []{#metadata}Reading and Writing Bibliographic Metadata ::: contents ::: textblock #### []{#metadata_read} Reading Metadata Metadata in scientific documents had been rarely appreciated and used for decades. For bibliographic metadata, no format specification had been widely accepted. cb2Bib adapted back in 2008 the PDF predefined metadata capabilities to set BibTeX bibliographic keys in document files. cb2Bib reads all XMP (a specific XML standard devised for metadata storage) packets found in the document. It then parses the XML strings looking for nodes and attributes with key names meaningful to bibliographic references. If a given bibliographic field is found in multiple packets, cb2Bib will take the last one, which most often, and according to the PDF specs, is the most updated one. The fields `file`, which would be the document itself, and `pages`, which is usually the actual number of pages, are skipped. The metadata is then summarized in cb2Bib clipboard panel as, for instance ``` fragment [Bibliographic Metadata <title>arXiv:0705.0751v1 [cs.IR] 5 May 2007 /Bibliographic Metadata] ``` This data, whenever the user considers it to be correct, can be easily imported by the build-in \'Heuristic Guess\' capability. On the other hand, if keys are found with the prefix `bibtex`, cb2Bib will assume the document does contain bibliographic metadata, and it will only consider the keys having this prefix. Assuming therefore that metadata is bibliographic, cb2Bib will automatically import the reference. This way, if using PDFImport, BibTeX-aware documents will be processed as successfully recognized, without requiring any user supplied regular expression. See also [Release Note cb2Bib 1.0.0](#relnotes100), [Configuring Clipboard](#c2bconf_clipboard), and [PDF Reference Import](#pdfimport).   #### []{#metadata_write} Writing Metadata Once an extracted reference is saved and there is a document attached to it, cb2Bib will optionally insert the bibliographic metadata into the document itself. cb2Bib writes an XMP packet as, for instance ``` fragment P. Constans arXiv 0705.0751 Approximate textual retrieval article 2007 ``` The BibTeX fields `file` and `id` are skip from writing. The former for the reason mentioned above, and the latter because it is easily generated by specialized BibTeX software according to each user preferences. LaTeX escaped characters for non ASCII letters are converted to UTF-8, as XMP already specifies this codec. The actual writing of the packet into the document is performed by ExifTool, an excellent Perl program written by Phil Harvey. See [https://exiftool.org](https://exiftool.org/){target="_blank"}. ExifTool supports several document formats for writing. The most relevant here are Postscript and PDF. For PDF documents, metadata is written as an incremental update of the document. This exactly preserves the binary structure of the document, and changes can be easily reversed or modified if so desired. Whenever ExifTool is unable to insert metadata, e.g., because the document format is not supported or it has structural errors, cb2Bib will issue an information message, and the document will remain untouched. See also [Configuring Documents](#c2bconf_documents) and [Update Documents Metadata](#update_metadata). ::: ::: ### []{#pdfimport}PDF Reference Import ::: contents ::: textblock #### []{#intro_automatic_extraction} Introduction Articles in PDF or other formats that can be converted to plain text can be processed and indexed by cb2Bib. Files can be selected using the Select Files button, or dragging them from the desktop or the file manager to the PDFImport dialog panel. Files are converted to plain text by using any external translation tool or script. This tool, and optionally its parameters, are set in the cb2Bib configure dialog. See the [Configuring Utilities](#c2bconf_utilities) section for details. Once the file is converted, the text, and optionally, the preparsed metadata, is sent to cb2Bib for reference recognition. This is the usual, two step process. First, text is optionally preprocessed, using a simple set of rules and/or any external script.or tool. See [Configuring Clipboard](#c2bconf_clipboard). Second, text is processed for reference extraction. cb2Bib so far uses two methods. One considers the text as a full pattern, which is checked against the user\'s set of regular expressions. The better designed are these rules, the best and most reliable will be the extraction. The second method, used when no regular expression matches the text, considers instead a set of predefined subpatterns. See [Field Recognition Rules](#heuristics). At this point users can interact and supervise their references, right before saving them. Allowing user intervention is and has been a design goal in cb2Bib. Therefore, at this point, cb2Bib helps users to check their references. Poorly translated characters, accented letters, \'forgotten\' words, or some minor formatting in the titles might be worth considering. See [Glyph & Cog\'s Text Extraction](https://www.glyphandcog.com/textext.html){target="_blank"} for a description on the intricacies of PDF to text conversions. In addition, if too few fields were extracted, one might perform a network query. Say, only the DOI was catch, then there are chances that such a query will fill the remaining fields. The references are saved from the cb2Bib main panel. Once Save is pressed, and depending on the configuration, see [Configuring Documents](#c2bconf_documents), the document file will be either renamed, copied, moved or simply linked onto the `file` field of the reference. If **Insert BibTeX metadata to document files** is checked, the current reference will also be inserted into the document itself. When several files are going to be indexed, the sequence can be as follows: - **Process next after saving**\ Once files are load and Process is pressed, the PDFImport dialog can be minimized (but not closed) for convenience. All required operations to completely fill the desired fields (e.g. dynamic bookmarks, open DOI, etc, which might be required if the data in document is not complete) are at this point accessible from the main panel. The link in the `file` field **will be permanent**, without regard to which operations (e.g. clipboard copying) are needed, until the reference is saved. The source file can be open at any time by right clicking the `file` line edit. Once the reference is saved, the next file will be automatically processed. To skip a given document file from saving its reference, press the Process button. - **Unsupervised processing**\ In this operation mode, all files will be sequentially processed, following the chosen steps and rules. **If the processes is successful**, the reference is automatically saved, and the next file is processed. **If it is not**, the file is skipped and no reference is saved. While processing, the clipboard is disabled for safety. Once finished, this box is unchecked, to avoid a possible accidental saving of a void reference. Network queries that require intervention, i.e., whose result is launching a given page, are skipped. The processes follows until all files are processed. However, it will stop to avoid a file being overwritten, as a result of a repeated key. In this case, it will resume after manual renaming and saving. See also [cb2Bib Command Line](#commandline), commands `–txt2bib` and `–doc2bib`.   #### []{#faq_automatic_extraction} Automatic Extraction: Questions and Answers - **When does cb2Bib do automatic extractions?**\ cb2Bib is conceived as a lightweight tool to extract references and manage bibliographies in a simple, fast, and accurate way. Accuracy is better achieved in semi-automatic extractions. Such extractions are handy, and allow user intervention and verification. However, in cases where one has accumulated a large number of unindexed documents, automatic processing can be convenient. cb2Bib does automatic extraction when, in PDFImport mode, \'Unsupervised processing\' is checked, or, in command line mode, when typing `cb2bib –doc2bib *.pdf tmp_references.bib`, or, on Windows, `c2bconsole.exe` instead of `cb2bib`. - **Are PDFImport and command line modes equivalent?**\ Yes. There are, however, two minor differences. First, PDFImport adds each reference to the current BibTeX file, as this behavior is the normal one in cb2Bib. On the other hand, command line mode will, instead, overwrite `tmp_references.bib` if it exists, as this is the expected behavior for almost all command line tools. Second, as for now, command line mode does not follow the configuration option \'Check Repeated On Save\'. - **How do I do automatic extraction?**\ To test and learn about automatic extractions, the cb2Bib distribution includes a set of four PDF files that mimic a paper title page. For these files, distribution also includes a regular expression, in file `regexps.txt`, capable of extracting the reference fields, provided the `pdftotex` flags are set to their default values. Processing these files, should, therefore, be automatic, and four messages stating `Processed as 'PDF Import Example'` should be seen in the logs. Note that extractions are configurable. A reading of [Configuration](#configuration) will provide additional, useful information. - **Why some entries are not saved and files not renamed?**\ Once you move from the fabricated examples to real cases, you will realize that some of the files, while being processed, are not renamed and their corresponding BibTeX data is not written. For each document file, cb2Bib converts its first page to text, and from this text it attempts to extract the bibliographic reference. By design, when extraction fails, cb2Bib does nothing: no file is moved, no BibTeX is written. This way, you know that the remaining files in the origin directory need special, manual attention. **Extractions are seen as failed, unless reliable data is found in the text**. - **What is *reliable data*?**\ Note that computer processing of natural texts, as extracting the bibliographic data from a title page, is nowadays an approximated procedure. cb2Bib tries several strategies: **1)** allow for including user regular expressions very specific to the extraction at hand, **2)** use metadata if available, **3)** guess what is reasonable, and, based on this, make customized queries. Then, cb2Bib considers extracted **data is reliable if i)** data comes from a match to an user supplied regular expression **ii)** document contains BibTeX metadata, or **iii)** a guess is transformed through a query to formatted bibliographic data. As formatted bibliographic data, cb2Bib understands BibTeX, PubMed XML, arXiv XML, and CR JSON data. In addition, it allows external processing if needed. Other data, metadata, guesses, and guesses on query results are considered unreliable data. - **Is metadata reliable data?**\ No. Only author, title, and keywords in standard PDF metadata can be mapped to their corresponding bibliographic fields. Furthermore, publishers most often misuse these three keys, placing, for instance, DOI in title, or setting author to, perhaps, the document typesetter. Only BibTeX XMP metadata is considered reliable. If you consider that a set of PDF files does contain reliable data, you may force to accept it using the command line switch `–sloppy` together with `–doc2bib`. - **How successful is automatic extraction?**\ As it follows from the given definition of reliable data, running automatic extractions without adhoc `regexps.txt` and `netqinf.txt` files will certainly give a zero success ratio. In practice, scenario 3) often applies: cb2Bib guesses several fields, and, based on the out-of-the-box `netqinf.txt` file, it obtains from the web either BibTeX, PubMed XML, arXiv XML, or CR JSON data. - **What can I do to increase success ratio?**\ First, set your favorite journals in file `abbreviations.txt`. Besides increasing the chances of journal name recognition, it will provide consistency across your BibTeX database. In general, do not write regular expressions to extract directly from the PDF text. Conversion is often poor. Special characters often break lines, thus breaking your regular expressions too. Write customized queries instead. For instance, if your PDFs have DOI in title page, set the simple query ``` fragment journal=The Journal of Everything| query=https://dx.doi.org/<> capture_from_query= referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=htm2txt_query ``` then, if it is feasible to extract the reference from the document\'s web page using a regular expression, include it in file `regexps.txt`. Note that querying in cb2Bib had been designed having in mind minority fields of research, for which, established databases might not be available. If cb2Bib failed to make reasonable guesses, then, you might consider writing very simple regular expressions to extract directly from the PDF text. For instance, obtain title only. Then, the posterior query step can provide the remaining information. Note also, especially for old documents, journal name is often missing from the paper title page. If in need of processing a series of those papers, consider using a simple script, that, in the cb2Bib preprocessing step, adds this missing information. - **Does successful extraction mean accurate extraction?**\ No. An extraction is successful if reliable data, as defined above, is found in the text, in the metadata, or in the text returned by a query. Reference accuracy relies on whether or not user regular expressions are robust, BibTeX metadata is correct, a guess is appropriate, a set of queries can correct a partially incorrect guess, and the text returned by a query is accurate. In general, well designed sets of regular expressions are accurate. Publisher\'s abstract pages and PubMed are accurate. But, some publishers are still using images for non-ASCII characters, and PubMed algorithms may drop author middle names if a given author has \'too many names\'. Expect convenience over accuracy on other sources. - **Can I use cb2Bib to extract comma separated value CSV references?**\ Yes. To automatically import multiple CSV references you will need one regular expression. If you can control CSV export, choose \| as separator, since comma might be used, for instance, in titles. The regular expression for ``` fragment AuthName1, AuthName2 | Title | 2010 ``` will simply be ``` fragment author title year ^([^|]*)\|([^|]*)\|([^|]*)$ ``` The reference file `references.csv` can then be split to single-line files typing ``` fragment split -l 1 references.csv slineref ``` and the command ``` fragment cb2bib --txt2bib slineref* references.bib rm -f slineref* ``` will convert `references.csv` to BibTeX file `references.bib` ::: ::: ### []{#clipboard}Extracting Data from the Clipboard ::: contents ::: textblock Clipboard contents is processed according to the following rules: - Perform external, user-defined preparsing on input stream. See [Configuring Clipboard](#c2bconf_clipboard). - Perform user-defined substitutions on input stream. See [Configuring Clipboard](#c2bconf_clipboard). - Check if input stream is already a BibTeX entry. If so, process entry. - Check if input stream is, in this order of preference, a PubMed XML, arXiv XML, CR JSON, or Medline entry. If so, process entry. - Preprocess author names: PI JOAN III -\> Pi III, J. (care of name prefixes, suffixes, and removal of ambiguities). If otherwise, - Extract DOI\ (DOI, URL and FILE/PDF are preprocessed, performed before the automatic recognition takes place.) - Extract URL - Remove leading and trailing white spaces, TABs and CRs. - \"\\r\\n\", \"\\n\" and/or \"\\r\" replaced by the line indicator tag ``. - Replace \"\\t\" and ten or more consecutive \"\\s\" by the tabular tag ``. - Simplify white spaces - Start the automatic recognition engine. If the automatic recognition engine fails, optionally, a heuristic guessing will be performed. See also [Field Recognition Rules](#heuristics) and [Reading and Writing Bibliographic Metadata](#metadata). ::: ::: ### []{#authorproc}Processing of Author Names ::: contents ::: textblock cb2Bib automatically processes the author names string. It uses a set of heuristic rules. First, the authors separator is identified. And second, it is decided whether or not author names are in natural or reverse order, or in the \'Abcd, E., F. Ghij, \...\' mixed order. Cleanup author string: - Escape BibTeX to Unicode - Remove digits from authors string - Remove any character except `-',;&\.\s\w` - Simplify white spaces - Consider composing prefixes `(da|de|dal|del|der|di|do|du|dos|el|la|le|lo|van|vande|von|zur)` - Consider composing suffixes `(II|III|IV|Jr)` - Some publishers use superscripts to refer to multiple author affiliations. Text clipboard copying loses superscript formatting. Author strings are clean from \'orphan\' lowcase, single letters in a preprocessing step. Everything following the pattern **\[a-z\]** is removed. Fortunately, abbreviated initials are most normally input as uppercase letters, thus permitting a correct superscript clean up.\ *Caution:* Lowcase, single, a to z letters are removed from author\'s string.\ *Caution:* Supperscripts **will be added to author Last Name** if no separation is provided. Users should care about it and correct these cases. Rules to identify separators: - Contains comma and semicolon -\> \';\' - Contains pattern `'^Abcd, E.-F.,'` -\> \',\' - Contains pattern `'^Abcd,'` -\> \'and\' - Contains comma -\> \',\' - Contains semicolon -\> \';\' - Any other -\> \'and\' Rules to identify ordering: - Contains comma and semicolon -\> Reverse - Pattern `'^Abcd,'` -\> Reverse - Pattern `'^Abcd EF Ghi'` -\> Natural - Pattern `'^Abcd EF'` -\> Reverse - Pattern `'^Abcd E.F.'` -\> Reverse - Any other pattern -\> Natural ::: ::: ### []{#journalproc}Processing of Journal Names ::: contents ::: textblock cb2Bib processes journal names according to its editable database, stored at `abbreviations.txt`. This file contains a list of journal names equivalences: a capital-letter acronym, the abbreviated form, and the title of the journal, all three on one single line. The `abbreviations.txt` file has the following structure: ``` fragment JA|J. Abbrev.|Journal of Abbreviations AN|Am. Nat.=Amer. Naturalist|American Naturalist=The American Naturalist ``` The first field, the capital-letter acronym, is a user-defined shorthand to access a journal title by typing it at the extraction panel. The second field is the abbreviated form of the journal. To adapt to multiple abbreviations in use, cb2Bib allows one alternate version of the abbreviation, indicated with an equal sign `=`. In the above example, the ISO 4 abbreviation \'Am. Nat.\' is the primary one and \'Amer. Naturalist\' is the alternate one. Finally, the third field is the full title of the journal. As for the abbreviations, the full title also admits one alternate form. Abbreviated and full title alternates serve two purposes: journal recognition and citation styling. The former is performed internally by cb2Bib as part of a bibliographic reference extraction, and the latter is accomplished in the embedded BibTeX editor by replacing back and forth abbreviated-full forms, in order to set journals in accordance to the guidelines of a particular publication.   Journal names processing is performed whenever a string is recognized as \'journal\', and, additionally, when pressing `Intro Key` at the journal edit line.   - Retrieves Journal name in **abbreviated form** if found. - If Journal name is not found in the database, returns input Journal name. - Search is case insensitive. - **Warning:** Journal codes can be duplicated. If duplicated, returns input Journal name.   - Retrieves Journal name in **full form** if found. - If Journal name is not found in the database, returns input Journal name. - Search is case insensitive. - **Warning:** Journal codes can be duplicated. If duplicated, returns input Journal name.   See [Configuring Files](#c2bconf_files), [Configuring BibTeX](#c2bconf_bibtex), and [Right-Click Menu Functionality](#c2beditor_menu). ::: ::: ### []{#heuristics}Field Recognition Rules ::: contents ::: textblock - **Abstract** - If `Abstract`` ` is found. - If `Summary`` ` is found. - **Author** - Check capitalization patterns. See [A Simple Extraction Procedure for Bibliographical Author Field](https://arxiv.org/abs/0902.0755){target="_blank"}. - **Keywords** - If `Key\s{0,1}words`` ` is found. - **Volume** - If `Volume:{0,1}` is found. - If `Vol.{0,1}` is found. - If `\b(\d+)[,:]\s*\d+\W+\d+` is found. - If `\b(\d+)\s*\(\d+\)` is found. - If `\b(\d+)[,:]\s*\d+\b` is found. - **Number** - If `Numbers{0,1}:{0,1}\s*([\d-]+)` is found. - If `No\.{0,1}\s*(\d+)` is found. - If `Issue\:{0,1}\s*(\d+)` is found. - If `\d\s*\((\d+)\)[^\.]` is found. - **Pages** - If `\bPages{0,1}[:\.]{0,1}([\d\s-]+)` is found. - If `\bp{1,2}\.{0,1}\s+(\d+)` is found. - If `\b(\d+)\s*-{1,2}\s*(\d+pp)\b` is found. - If `\b(\d+)\s*-{1,2}\s*(\d+)\b` is found. - **Year** - If `\b(19|20)(\d\d)\b` is found. - **Title** - If `\bTitle:{0,1}` is found. - **ISBN** - If `\bISBN\b(?:-\d+){0,1}:{0,1}(?:-\d+){0,1}\s*(\d+-[\d-]+-\d+)` is found. - If `\bISBN\b(?:-\d+){0,1}:{0,1}(?:-\d+){0,1}\s*(\d+)` is found. - **Journal** - Check cb2Bib internal database. ::: ::: ### []{#regexpeditor}Regular Expression Editor ::: contents ::: textblock Once a manual processing is done, cb2Bib clipboard area contains the extraction tags, plus, possibly, some other cb2Bib tags introduced during the preprocessing (see [Extracting Data from the Clipboard](#clipboard)). The **RegExp Editor** will generate a guess regular expression or matching pattern usable for automated extractions. The cb2Bib matching patterns consist of four lines: a brief description, the reference type, an ordered list of captured fields, and the regular expression itself. # cb2Bib 2.0.3 Pattern: American Chemical Society Publications article journal volume pages year title author abstract ^(.+), (\d+) \(.+\), ([\d|\-|\s]+),(\d\d\d\d)\..+(.+) (.+).+Abstract:(.+)$ The Regular Expression Editor provides the basic skeleton and a set of predefined suggestions. The regular expressions follow a Perl-like sintax. There are, however, some slight differences and minor limitations. Information about the basics on the editing and working with Regular Expressions as used by cb2Bib can be found at the Qt document file [Qt Documentation\'s QRegExp Class](https://doc.qt.io/archives/qt-5.6/QRegExp.html#introduction){target="_blank"}. **Remember when creating and editing regular expressions:** - Switch the clipboard mode to \'Tagged Clipboard Data\', using the clipboard panel context menu. - Extract the bibliographic reference manually. On the clipboard panel will appear some cb2Bib tags that indicate which fields are being extracted. Once done, type Alt+I to enter to the regular expression editor. In the editor, there are the four line edits that define a cb2Bib pattern, one copy of the clipboard panel, and an information panel. The information panel displays possible issues, and, once everything is correct, the actual extracted fields. The clipboard panel highlights the captures for the current regular expression and current input text. - Patterns can be modified at any time by typing Alt+E to edit the regular expression file. Patterns are reloaded each time the automatic pattern recognition is started. This permits editing and testing. - cb2Bib processes sequentially the list of regular expressions as found in the regular expression file. It stops and picks the first match for the current input. **Therefore, the order of the regular expressions is important**. Consequently, to avoid possible clashing among similar patterns, consider sorting them from the most restrictive pattern to the less one. As a rule of thumb, the more captions it has the most restrictive a pattern is. - **The cb2Bib proposed patterns are general, and not necessarily the most appropriate for a particular capture**. E.g. tag `pages` becomes `([\d|\-|\s]+)`, which considers digits, hyphens, and spaces. It must be modified accordingly for reference sources with, e.g., `pages` written as Roman ordinals. - **Avoid whenever possible general patterns `(.+)`**. There is a risk that such a caption could include text intended for a posterior caption. This is why, sometimes, the cb2Bib proposed pattern is not hit by the input stream that originated it. **Use, whenever possible, cb2Bib anchors like `` instead of ``. They prevent `(.+)` captions to overextend**. - To debug a large regular expression it might be useful to break it to the first capturing parenthesis. For instance, the above pattern will be ``` fragment # cb2Bib 2.0.3 Pattern: American Chemical Society Publications article journal ^(.+), ``` - Then, check if anything is captured and if this corresponds to `journal`. - Add on successive steps your set of captions and BibTeX fields. ::: ::: ## []{#toc-supplementary-notes}Supplementary Notes ### []{#relnotes}Release Notes ::: contents ::: textblock #### []{#relnotes203} Release Note cb2Bib 2.0.3 cb2Bib has been ported to Qt6. The minimum Qt version requirement, Qt 5.7.0 or later, is maintained in this release. The cb2Bib\'s **Annote viewer** uses either QtWebKit or QtWebEngine libraries for the rendering of mathematical expressions. QtWebKit was deprecated when Qt6 was released. QtWebEngine is now the only up-to-date web rendering library in Qt. The port to Qt6 is therefore of interest to the users of the **Annote viewer**. Note also that these large web rendering libraries are optional and that no special action or flag is needed during compilation. They are linked to cb2Bib if present at compilation time. Alternatively, if none is present, **Annote viewer** will fallback at run time to the user\'s default web browser. The Qt5 release introduced the PCRE based regular expressions on `QRegularExpression`. This addition enhanced string matching with respect Qt\'s internal `QRegExp`. Throughout the 1.9.x series, cb2Bib moved from `QRegExp` to `QRegularExpression`, and to its own and specialized `txtmatcher`. This move brought a remarkable speedup for in-document searches and full search indexing. The `QRegExp` matcher was kept in places where very short strings are checked against very many different patterns, as in author name recognition and heuristic reference extraction. In this context, `QRegExp` is still preferable to `QRegularExpression` due to the lower footprint and faster initialization of the former. In Qt6, `QRegExp` has been moved to the compatibility module Qt6Core5Compat. This module must be included when compiling cb2Bib against Qt6.   #### []{#relnotes201} Release Note cb2Bib 2.0.1 To optimize search on PDF\'s contents, cb2Bib keeps a cache with the extracted text streams, that are compressed to reduce disk space and reading overhead. Nowadays, compressors with extremely high decompression speed are available. Two of them are LZSSE, for SSE4 capable architectures, and LZ4, for a broader range of CPUs. These two compressors can now be used by cb2Bib, with the latter set as the default compression library in cb2Bib builds. When upgrading to version 2.0.1, the **first search** on the document collection will recreate the cache, and this step **will be noticeably slow**. Additionally, cb2Bib 2.0.1 includes original, optimized text matching code for AVX2 capable architectures that is used for search matching and BibTeX parsing. This code is **not set** in default builds and needs to be explicitly enabled at compilation time. Finally, it is important mentioning the inclusion in version 2.0.1 of stemmed context search, see [Contextual Search](#contextsearch) for details, and contributed feedback in handling citations and extending cite commands to markdown syntax, see [Predefined Placeholders](#predefinedplaceholders).   #### []{#relnotes200} Release Note cb2Bib 2.0.0 Throughout the 1.9.x series, the cb2Bib sources were updated to the improved string processing capabilities of Qt5 and PCRE libraries. This update has brought a remarkable speedup for in-document searches and full search indexing. Alternate normalization of journal titles and abbreviations, upgrading jsMath to MathJax, extending network queries syntax, and a PDF user manual are the additional enhancements in cb2Bib 2.0.0. Back in version 0.3.3, cb2Bib introduced network queries to obtain the data for a citation. While convenient, queries to publishers\' websites were difficult to setup and fragile. Nowadays, fortunately, arXiv, PubMed and Crossref offer structured APIs. These interfaces provide to the end user an easy setup for completing bibliographic citations.   #### []{#relnotes190} Release Note cb2Bib 1.9.0 The cb2Bib sources have been ported to Qt5. To highlight this major update in library requirements the version number is set to 1.9.0. Later, once stabilized and new functionality related to Qt5 enhancements are applied, version number will be set to 2. At this point cb2Bib has exactly the same functionality as its preceding version 1.5.0. To build the program, however, only qmake and its related config procedure are available. The cmake scripts have not yet been ported. Qt5 brings important enhancements related to regular expressions and string processing. Some careful updates to the cb2Bib sources are needed to fully benefit from them. They will implemented through the 1.9.x series. We expect by then a performance boost on full text, regular expression based searches.   #### []{#relnotes150} Release Note cb2Bib 1.5.0 Included in version 1.5.0 sources there is a patch for XPDF 3.0.4, the default tool to convert PDF documents to plain text. The modified code separates superscripts to avoid words being joined to reference numbers and author names joined to affiliations\' glyphs. Interested users will need to download the package, apply the patch, and compile it. Additionally, this version improves converted text postprocessing. This step normalizes character codes, reverts ligatures, restores when possible orphan diacritics and broken words, and undoes text hyphenation. Conversion to text and postprocessing is important for reference extraction, and document indexing and searching. It is therefore recommended to delete cached document-to-text data to benefit from the present improvements. cb2Bib stores cached texts in \*c2b files in an user specified directory. After that, by performing a search or initiating indexing an updated cache will be created.   #### []{#relnotes147} Release Note cb2Bib 1.4.7 Approximate and context searches effectively locate our references of interest. As collections grow in size, and low performance devices, netbooks and tablets, start being used, complete document searches become demanding. Besides, it is often not clear what to query for, and then a glossary of terms provides guidance. Often too, interest lies on subsetting documents by being similar to a given one. Version 1.4.7 adds a pragmatic term or keyword extraction from the document contents. Accepted keywords are set as the substrings appearing at least twice in one document, appearing at least in three documents, and conforming to predefined part-of-speech (POS) sequences. Keyword extraction is performed by either clicking on `Index Documents` at the `c2bciter` desktop tray menu, or, by typing `cb2bib –index [bibdirname]` on a shell. During extraction, the `Part Of Speech (POS) Lexicon` distribution file must be available and readable. On termination, indexing files are saved on the `Search In Files Cache Directory`. Simply copying this directory will synchronize keyword indexing to a second computer. After refreshing `c2bciter` module, pressing key G displays the glossary of terms. On a reference, pressing K displays its list of keywords. Pressing R on a keyword lists the references related to that keyword. Pressing R on a reference lists similarly related references. Similarity is assessed based on keyword occurrences. Left and Right keys provide previous and next navigation. Pressing V on either a reference keyword, or a keyword reference, visualizes the keyword excerpts from the reference\'s document. To close excerpt dialog press Esc or Left keys. See also [cb2Bib Citer](#c2bciter), [Configuring Files](#c2bconf_files), and [cb2Bib Command Line](#commandline).   #### []{#relnotes140} Release Note cb2Bib 1.4.0 The `c2bciter` module was introduced in version 1.3.0. Its name, as it was described, states its purpose of being \"aimed to ease inserting citation IDs into documents\". In fact, it does have such functionality. And, it has also another, equally important one: it provides a very fast way to retrieve a given work from our personal collections. Retrieving is accomplished through pre-sorted views of the references and filtering. Both, views and filtering, scale on the (tens of) thousands references. Usually, we recall a work from its publication year, a few words from its title, or (some of the letters of) one of its authors names. Often, what we remember is when a reference was included into our collection. Therefore, having such a chronological view was desirable. The implementation of this sorted-by-inclusion-date view was not done during the 1.3.x series, but postponed to version 1.4.0; somehow, to indicate that some sort of \'proprietary\' BibTeX tag might be required to specify inclusion timestamps. I have been reluctant through the cb2Bib\'s life span to introduce \'cb2Bib-only\' tags in the BibTeX outputs. I believe that there is little gain, and it costs, possibly, breaking interoperability. In the end, the choice was to not write any \'timestamp\' tag in references. Instead, `c2bciter` checks for the last modified date of the linked documents to build an approximated chronological view. The advantage is that all, not just \'version 1.4.0 or later\', references are sorted. Furthermore, if a reference is later corrected, and the document metadata is updated too, the modification date is reflected in the view. The obvious inconvenience is that no such sorting can be done for references without an attached document. See also [cb2Bib Citer](#c2bciter).   #### []{#relnotes130} Release Note cb2Bib 1.3.0 When version 0.2.7 came up, it was mentioned in [Release Note cb2Bib 0.2.7](#relnotes027) that cb2Bib \'doesn\'t have the means to automatically discern an author name from a department or street name\'. I forgot mentioning, that I did not expect cb2Bib would have had such a feature. Since the last [Release Note cb2Bib 1.1.0](#relnotes110), the cb2Bib internals had changed significantly. Some changes, such heuristic recognition for interlaced authors and affiliations, get easily noticed. Other changes, however, do not, and need additional explanation. From version 1.2.3, the switches `–txt2bib` and `–doc2bib` set cb2Bib to work on console mode. The non-exact nature of the involved extractions makes logging necessary. On Windows, graphic or console modes must be decided not at run time, but when the application is built. So far, logging and globing were missing. This release adds the convenience wrapper `c2bconsole`. Typing `c2bconsole –txt2bib i*.txt out.bib`, for instance, will work as it does in the other platforms. Lists of references are now sorted case and diacritic insensitive. For some languages such a choice is not the expected one, and some operating systems offer local-aware collation. Due to usual inconsistencies and inaccuracies in references, this decision was taken to group together \'Density Matrix\' with \'Density-matrix\', and Møller with Moller, which, in a personal collection, most probably, refer to the same concept and to the same person. Additionally, document to text converted strings are now clean from extraneous, non-textual symbols. Therefore, recreating cache files is recommended. Finally, this release introduces a new module, named `c2bciter`, and aimed to ease inserting citation IDs into documents. The module should ideally stay idle at the system tray, and be recalled as needed by pressing a global, desktop shortcut. This functionality, while desirable, and usual in dictionaries, is platform and desktop dependent. On KDE there are currently known issues when switching among virtual desktops. See also [cb2Bib Citer](#c2bciter), and [cb2Bib Command Line](#commandline).   #### []{#relnotes110} Release Note cb2Bib 1.1.0 A frequent request from cb2Bib users has been to expand the command line functionality. So far few progress has been seen in this regard. First, the addition of in-document searches and reading/inserting metadata were priorities. Second, cb2Bib is not the tool to interconvert among bibliographic formats. And third, cb2Bib is designed to involve the user in the search process, in the archiving and validation of the discovered works and references. For the latter reason, and for not knowing a priori how would such a tool be designed, the cb2Bib internals had been interlaced to its graphical interface. At the time of version 0.7.0, when the graphical libraries changed, and a major refactoring was required, the code started moving toward a better modularization and structure. The current release pushes code organization further. As a result, it adds two new command line switches: `–html-annote` and `–view-annote`. The new cb2Bib module is named after the BibTeX key \'annote\'. Annote is not for a \'one reference annotation\' though. Instead, Annote is for short notes that interrelate several references. Annote takes a plain text note, with minimal or no markup, inserts the bibliographic citations, and converts it to a HTML page with links to the referenced documents. From within cb2Bib, to write your notes, type Alt+A, enter a filename, either new or existing, and once in Annote, type E to launch your default text editor. For help, type F1. Each time you save the document the viewer will be updated. To display mathematical notations, install [jsMath](https://www.math.union.edu/~dpvc/jsMath/){target="_blank"} locally. And, remember, code refactoring introduces bugs. See also [cb2Bib Annote](#c2bannote) and [cb2Bib Command Line](#commandline).   #### []{#relnotes100} Release Note cb2Bib 1.0.0 Approximately four years ago the first cb2Bib was released. It included the possibility of easily linking a document to its bibliographic reference, in a handy way, by dragging the file to the main (at that time, single) panel. Now, in version 1.0.0, when a file is dropped, cb2Bib scans the document for metadata packets, and checks, in a rather experimental way, whether or not they contain relevant bibliographic information. Publishers metadata might or might not be accurate. Some, for instance, assign the DOI to the key Title. cb2Bib extracts possibly relevant key-value pairs and adds them to clipboard panel. Whenever key-value pairs are found accurate, just pressing Alt+G imports them to the line edits. If keys with the prefix `bibtex` are found, their values are automatically imported. The preparsed metadata that is added to the clipboard panel begins with `[Bibliographic Metadata` and ends with `/Bibliographic Metadata]`. Therefore, if you are using PDFImport together with a set of regular expressions, such that they contain the begin (\^) or end (\$) anchors, you can safely replace them by the above tags. In this manner, existing regular expressions remain useful with this minor change. And, with the advantage that, if recognition fails for a given document, metadata might give the hardest fields to extract from a PDF article, which are author and title. See also [Reading and Writing Bibliographic Metadata](#metadata).   #### []{#relnotes084} Release Note cb2Bib 0.8.4 The previous cb2Bib release added the command line option `–conf [full_path]cb2bib.conf` to specify the settings location. This feature was intended, mainly, as a clean way to run the program on a host computer from a removable drive. The work done focused on arranging the command line and settings related code. It was left for a later release to solve some requirements regarding the managing of file pathnames and temporary files. This release addresses these two points. Now, when cb2Bib is launched as `cb2bib –conf` --without a configuration filename-- it treats filenames as being relative to the cb2Bib actual location. Temporary files, if needed, will be placed at this location as well. Therefore, no data is being written on the host, and cb2Bib works independently of the actual address that the host assigns to the removable drive. The Windows\' un/installer cleans/sets configuration data on the registry. Being aware of this particular, it might be better not to install the program directly to the USB drive. Just copy the cb2Bib base directory from a home/own computer to the removable drive, and then run it on the host computer as `cb2bib –conf`.   #### []{#relnotes083} Release Note cb2Bib 0.8.3 cb2Bib accepts several arguments on its command line to access specific functionality. So far, the command `cb2bib tmp_ref` permits importing references from the browser, whenever a *download to reference manager* choice is available. In addition, the command `cb2bib –bibedit ref.bib` directly launches the BibTeX editor for file browsing and editing. This release adds the command line option `–conf [full_path]cb2bib.conf` to specifically set a file where all internal settings are being retrieved and stored. This has two interesting applications. On one hand, it easily permits switching from several sets of extraction rules, since the files `abbreviations.txt`, `regexps.txt`, and `netqinf.txt` are all stored in the cb2Bib\'s settings. And, on the other hand, it allows installing the program on a USB flash drive, and cleanly running it on any (e. g., library) computer. Settings can be stored and kept on the external device, and therefore, no data will be written on the registry or settings directory of the host computer. So far, however, this feature should be regarded as experimental. The Qt library to which cb2Bib is linked does read/write access to system settings in a few places (concretely, in file and color dialogs). On Unix and Mac OS systems this access can be modified by setting the environment variable DAG_CONFIG_HOME. No such workaround is presently available in Windows. See [cb2Bib Command Line](#commandline) for a detailed syntax description.   #### []{#relnotes081} Release Note cb2Bib 0.8.1 Several changes in this release affect installation and deployment. First, the cb2Bib internals for settings management has been reorganized. Version 0.8.1 will not read previous settings, as user colors, file locations, etc. On Unix, settings are stored at `~/.config/MOLspaces/cb2Bib.conf`. This file can be removed, or renamed. On Windows, it is recommended to uninstall previous versions before upgrading. Second, cb2Bib tags are not shown by default. Instead, it is shown plain, raw clipboard data, as it is easier to identify with the original source. To write a regular expression, right click, on the menu, check \'View Tagged Clipboard Data\', and perform the extraction from this view. And finally, cb2Bib adds the tag \<\\> for network queries. It takes a simplified version of the clipboard contents and sends it to, e.g. Google Scholar. From there, one can easily import BibTeX references related to that contents. Therefore one should unchecked in most cases the \'Perform Network Queries after automatic reference extractions\' box.   #### []{#relnotes072} Release Note cb2Bib 0.7.2 cb2Bib reads the clipboard contents, processes it, and places it to the main cb2Bib\'s panel. If clipboard contents can be recognized as a reference, it writes the corresponding BibTeX entry. If not, the user can interact from the cb2Bib panel and complete or correct the reference. Additionally, this process permits to write down a regular expression matching the reference\'s pattern. To ease pattern writing, cb2Bib preprocesses the raw input data. This can consider format conversion by external tools and general substitutions, in addition to including some special tags. The resulting preprocessed data is usually less readable. A particularly illustrating case is when input data comes from a PDF article. cb2Bib now optionally presents input data, as raw, unprocessed data. This preserves the block text format of the source, and thus identifying the relevant bibliographic fields by visual inspection is more straightforward. In this raw mode view panel, interaction works in a similar manner. Except that, no conversions or substitutions are seen there, and that no regular expression tags are written.   #### []{#relnotes070} Release Note cb2Bib 0.7.0 This release moves forward cb2Bib base requirement to Qt 4.2.0. Compilation errors related to rehighlight() library calls, kindly reported by Bongard, Seemann, and Luisser, should not appear anymore. File/URL opening is carried now by this library, in a desktop integrated manner. Additionally, Gnome users will enjoy better integration, as Cleanlooks widget style is available. All known regressions in 0.6.9x series have been fixed. Also, a few minor improvements have been included. In particular, file selection dialogs display navigation history, and BibTeX output file can be conveniently selected from the list of \'\*.bib\' files at the current directory. Such a feature will be specially useful to users that sort references in thematic files located at a given directory.   #### []{#relnotes0691} Release Note cb2Bib 0.6.91 This release fixes a regression in the cb2Bib network capabilities. Network, and hence querying was erratic, both for the internal HTTP routines and for external clients. In addition to this fix, the `netqinf.txt` has been updated. PubMed is working again. Queries are also extended to include DOI\'s. A possible applicability will be for indexing a set of PDF articles with PDFImport. If the article contains its DOI number, and \'Perform Network Queries after automatic reference extractions\' is checked, chances are that automatic extractions will work smooth.   #### []{#relnotes0690} Release Note cb2Bib 0.6.90 cb2Bib has been ported from Qt3 to Qt4, a migration in its underlying system library. Qt experienced many changes and improvements in this major release upgrade. Relevant to cb2Bib, these changes will provide a better file management, word completion, faster searches, and better desktop integration. Upgrading to Qt4 it is not a \"plug and recompile\" game. Thorough refactoring and rewriting was required. The resulting cb2Bib code is cleaner and more suitable to further development. As one might expect, major upgrades introduce new bugs that must be fixed. The cb2Bib 0.6.90 is actually a preview version. It has approximately the same functionality than its predecessor. So, no additions were considered at this point. Its use, bug reporting, and feedback are encouraged. This will help to get sooner a stable cb2Bib 0.7. To compile it, type `./configure` as usual. The `configure` script calls the `qmake` tool to generate an appropriate `Makefile`. To make sure the right, Qt4 `qmake` is invocated, you can setup `QTDIR` environment variable prior to `./configure`. The `configure`\'s call statement will then be `'$QTDIR/bin/qmake'`. E. g., type `'setenv QTDIR /usr'` if `qmake` happens to be at the directory`/usr/bin`.   #### []{#relnotes060} Release Note cb2Bib 0.6.0 cb2Bib uses the internal tags `<>` and `<>` to ease the creation of regular expressions for reference extraction. New line and tabular codes from the input stream are substituted by these numbered tags. Numbering new lines and tabulars gives an extra safety when writing down a regular expression. E. g., suppose field title is \'anything\' between \'`<>` and `<>`\'. We can then easily write \'anything\' as \'.+\' without the risk of overextending the caption to several \'\\n\' codes. On the other hand, one still can use `<>` if not interested in a specific numbering. All these internal tags are later removed, once cb2Bib postprocesses the entry fields. The cb2Bib identified so far new lines by checking for \'\\n\' codes. I was unaware that this was a platform dependent, as well as a not completely accurate way of detecting new lines. McKay Euan reported that `<>` tags were not appearing as expected in the MacOSX version. I later learn that MacOSX uses \'\\r\' codes, and that Windows uses \'\\r\\n\', instead of \'\\n\' for new line encoding. This release addresses this issue. It is supposed now that the cb2Bib regular expressions will be more transferable among the different platforms. Extraction from plain text sources is expected to be completely platform independent. Extraction from web pages will still remain browser dependent. In fact, each browser adds its peculiar interpretation of a given HTML source. For example, in Wiley webpages we see the sectioning header \'Abstract\' in its source and in several browsers, but we see, and get, \'ABSTRACT\' if using Konqueror. What we pay for this more uniform approach is, however, a **break in compatibility** with previous versions of cb2Bib. Unix/Linux users should not expect many differences, though. Only one from the nine regular expressions in the examples needed to be modified, and the two contributed regular expressions work perfectly without any change. Windows users will not see a duplication of `<>` tags. To update previous expressions it should be enough just shifting the `<>` numbering. And, of course, any working regular expression that does not uses `<>` tags will still be working in this new version. Finally, just to mention that I do not have a MacOSX to test any of the cb2Bib releases in this particular platform. I am therefore assuming that these changes will fix the problem at hand. If otherwise, please, let me know. Also, let me know if release 0.6.0 \'break\' your own expressions. I consider this release a sort of experimental or beta version, and the previous version 0.5.3, will still be available during this testing period.   #### []{#relnotes050} Release Note cb2Bib 0.5.0 Two issues had appeared regarding cb2Bib installation and deployment on MacOSX platforms. First, if you encounter a \'nothing to install\'-error during installation on MacOSX 10.4.x using the cb2Bib binary installer available at naranja.umh.es/\~atg/, please delete the cb2bib-receipts from `/Library/Receipts` and then rerun the installer. See also M. Bongard\'s clarifying note \'MACOSX 10.4.X \"NOTHING TO INSTALL\"-ERROR\' for details. Second, and also extensible to other cb2Bib platform versions, if PDFImport issues the error message \'Failed to call *some_format_to_text*\' tool, make sure such a tool is installed and available. Go to Configure-\>PDFImport, click at the \'Select External Convert Tool\' button, and navigate to set its full path. Since version 0.5.0 the default full path for the MacOSX is already set, and pointing to `/usr/local/bin/pdftotext`.   #### []{#relnotes041} Release Note cb2Bib 0.4.1 Qt/KDE applications emit notifications whenever they change the clipboard contents. cb2Bib uses these notifications to automatically start its \'clipboard to BibTeX\' processing. Other applications, however, does not notify about them. Since version 0.2.1, see [Release Note cb2Bib 0.2.1](#relnotes021), cb2Bib started checking the clipboard periodically. This checking was later disabled as a default, needing a few lines of code to be uncomented to activate it. Without such a checking, cb2Bib appears unresponsive when selecting/copying from e.g., acroread or Mozilla. This release includes the class `clipboardpoll` written by L. Lunak for the KDE\'s Klipper. Checking is performed in a very optimized way. This checking is enabled by default. If you experience problems with this feature, or if the required X11 headers aren\'t available, consider disabling it by typing `./configure –disable-cbpoll` prior to compilation. This will disable checking completely. If the naive, old checking is preferred, uncomment the four usual lines, `./configure –disable-cbpoll`, and compile.   #### []{#relnotes035} Release Note cb2Bib 0.3.5 Releases 0.3.3 and 0.3.4 brought querying functionality to cb2Bib. In essence, cb2Bib was rearranged to accommodate copying and opening of network files. Queries were then implemented as user customizable HTML posts to journal databases. In addition, these arrangements permitted defining convenience, dynamic bookmarks that were placed at the cb2Bib\'s \'About\' panel. cb2Bib contains three viewing panels: \'About\', \'Clipboard\' and \'View BibTeX\', being the \'Clipboard\' panel the main working area. To keep cb2Bib simple, only two buttons, \'About\' and \'View BibTeX\', are set to navigate through the panels. The \'About\' and \'View BibTeX\' buttons are toggle buttons for momentarily displaying their corresponding panels. Guidance was so far provided by enabling/disabling the buttons. After the bookmark introduction, the \'About\' panel has greatly increased its usefullness. Button functionality has been slightly redesigned now to avoid as many keystrokes and mouse clicks as possible. The buttons remain switchable, but they no longer disable the other buttons. User is guided by icon changes instead. Hopefully these changes will not be confusing or counterintuitive. Bookmarks and querying functionality are customizable through the `netqinf.txt` file, which is editable by pressing the `Alt+B` keys. Supported queries are of the form \'Journal-Volume-First Page\'. cb2Bib parses `netqinf.txt` each time a query is performed. It looks for `journal=`*`Full_Name|[code]`* to obtain the required information for a specific journal. Empty, \'`journal=`\' entries have a meaning of \'any journal\'. New in this release, cb2Bib will test all possible queries for a given journal instead of giving up at the first *`No article found`* message. The query process stops at the first successfull hit or, otherwise, once `netqinf.txt` is parsed completely (in an equivalent way as the automatic pattern recognition works). This permits querying multiple -and incomplete- journal databases. Users should order the `netqinf.txt` file in a way it is more convenient. E.g., put PubMed in front of JACS if desired an automatic extraction. Or JACS in front of PubMed and extract from the journal web page, if author accented characters are wanted. So far, this querying functionality is still tagged as *experimental*. Either the querying itself or its syntax seem quite successful. However, downloading of PDF files, on windows OS + T1 network, **was found to freeze** once progress reaches the 30-50%. Any feedback on this issue will be greatly appreciated. Also, information on `kfmclient` equivalent tools for non KDE desktops would be worth to be included in the cb2Bib documentation.   #### []{#relnotes030} Release Note cb2Bib 0.3.0 cb2Bib considers the whole set of authors as an author-string pattern. This string is later postprocessed, without requirements on the actual number of authors it may contain, or on how the names are written. Once considered author-string patterns, the extraction of bibliographic references by means of regular expressions becomes relatively simple. There are situations, however, where several author-strings are required. The following box shows one of these cases. Authors are grouped according to their affiliations. Selecting from \'F. N. First\' to \'F. N. Fifth\' would include \'First Affiliation\' within the author string. Cleaning up whatever wording \'First Affiliation\' may contain is a rather ill-posed problem. Instead, cb2Bib includes an `Add Authors` option. The way of operation is then to select \'F. N. First, F. N. Second, F. N. Third\' and chose `Authors` and right after, select \'F. N. Fourth and F. N. Fifth\' and chose `Add Authors`. ``` fragment Journal Name, 10, 1100-1105, 2004 AN EXAMPLE WITH MULTIPLE AUTHOR SETS F. N. First, F. N. Second, F. N. Third First Affiliation F. N. Fourth and F. N. Fifth Second Affiliation Abstract: Select from "Journal Name ..." to "... second author set.". The 'F. N. First, F. N. Second, F. N. Third' author string is automatically processed as one author set, while 'F. N. Fourth and F. N. Fifth' is processed as another, second author set. ``` At this point in the manual extraction, the user was faced with a red `<>` tag in the cb2Bib clipboard panel. The `<>` tag was intended to warn the user about the fact that cb2Bib would not be able to consider the resulting extraction pattern as a valid, general regular expression. Usual regular expressions are built up from an a priori known level of nesting. In these cases, however, the level of nesting is variable. It depends on the number of different affiliations occurring in a particular reference. So far the `<>` tag has become a true FAQ about cb2Bib and a source of many confusions. There is no real need, however, for such an user warning. The `<>` has therefore been removed and cb2Bib has taken an step further, to its 0.3.0 version. The cb2Bib 0.3.0 manual extraction works as usual. By clicking `Authors` the Authors edit line is reseted and selection contents moved there. Alternatively, if `Add Authors` is clicked, selection contents is added to the author field. On this version, however, both operations are tagged as `<>` (singular form, as it is the BibTeX keyword for Authors). The generated extraction pattern can now contain any number of `<>` fields. In automatic mode, cb2Bib now adds all `author` captions to Authors. In this way, cb2Bib can treat interlaced author-affiliation cases. Obviously, users needing such extractions will have to write particular regular expressions for cases with one set of authors, for two sets, and so on. Eventhough it is not rare a work having a hundred of authors, it would be quite umprobable that they were working on so many different institutions. Therefore, few regular expressions should actually be required in practice. Although not elegant, this breaks what was a cb2Bib limitation and broadens its use when extracting from PDF sources. Remember here to sort these regular expressions in decreasing order, since at present, cb2Bib stops at the first hit. Also, consider `Any Pattern` to get ride of the actual affiliation contents, as you might not want to extract authors addresses.   #### []{#relnotes027} Release Note cb2Bib 0.2.7 The cb2Bib 0.2.7 release introduces multiple retrieving from PDF files. PDF documents are becoming more and more widely used, not only to transfer and printing articles, but also are substituting the personal paper files and classifiers for the electronic equivalents. cb2Bib is intended to help updating personal databases of papers. It is a tool focused on what is left behind in database retrieving. Cases such as email alerts, or inter colleague references and PDF sharing are example situations. Though in an electronic format, sources are not standardized or not globally used as to permit using habitual import filters in reference managers. cb2Bib is designed to consider a direct user intervention, either by creating its own useful filters or by a simple copy-paste assistance when handtyping. Hopefully someday cb2Bib will be able to take that old directory, with perhaps a few hundreds of papers, to automatically index the references and rename the files by author, in a consistent manner. The required mechanism is already there, in this version. But I guess that this new feature will manifest some present limitations in cb2Bib. For instance, most printed and PDF papers interlace author names and affiliations. cb2Bib doesn\'t have the means to automatically discern an author name from a department or street name. So far one needs to manually use the \'Add to Authors\' feature to deal with these situations. Also, the managing of regular expressions needs developing, specially thinking in the spread variety of design patterns in publications. In summary, this current version is already useful in classifying and extracting the reference of that couple of papers that someone send right before submitting a work. A complete unsupervised extraction is still far away, however.   #### []{#relnotes021} Release Note cb2Bib 0.2.1 The cb2Bib mechanism \'select-and-catch\' failed in some cases. Acrobat and Mozilla selections were not always notified to cb2Bib. Indeed, this \'window manager - application\' connection seems to be broken on a KDE 3.3.0 Qt 3.3.3 system. The cb2Bib 0.2.1 continues to listen to system clipboard change notifications, whenever they are received and whenever cb2Bib is on connected mode. Additionally, the cb2Bib 0.2.1 periodically checks for changes in the system clipboard. Checks are performed every second, approximately. This permits cb2Bib to work as usual, although one could experience 1-2 seconds delays in systems where the automatic notification is broken. If the \'select-and-catch\' functionality appears \'sticky\', possibly happening while using non KDE applications from where text is selected, check the source file `c2bclipboard``.cpp`, look for `'Setting timer'`, and set variable `interval` to 1000. This is the interval of time in ms that cb2Bib will use to check for clipboard changes.   ::: ::: cb2bib-2.0.3/doc/PaxHeaders/cb2bib_user_manual.pdf0000644000000000000000000000013115104461633016675 xustar0030 mtime=1762812827.278765348 29 atime=1762812827.99875967 30 ctime=1762812827.278765348 cb2bib-2.0.3/doc/cb2bib_user_manual.pdf0000644000175000001440000343303415104461633020701 0ustar00constansusers00000000000000%PDF-1.7 %äüöß 2 0 obj <> stream xRMk@̬ mBA7'qh; Pvfggy ~bvv Է:j6ZB(IGpުOU,v:-n9`UFi!%#pԅ& 8pT VL?m~ptl!yVY5 f"(HUC-ZeM=.g\ˈPGi3P99B2ϐhD+Va3jlp YcRaE{R(HкR~ BE"b2]^-%$3R)6yrrRbachۦ'f~'pܭ}M^M^fkg1ɣ$gvmFljHqI!IɺVI5S}k^w endstream endobj 3 0 obj 417 endobj 7 0 obj <> stream JFIFC     C   E:" y곬^Vi$]Qin4) *CtBn DmJ85.R%RRlL4%U1D3प2) jR`6کt5@j+TGЬ3Rz=25Ǯ&~OQ2Ε!` IM 2}%R4!0L0-.}M3C!EJ4&D蘘lEeiSSq^QJH4xN/Nz:[)I P4“ N1 a&۪ 4~v5{:zq'g>[y#'|Jݩg93YY! PIA# (%HC2 pOmʆʴ [(,r# ,HuY'DQ+kNZ8,F-utYIRws隨"UdRoDM/Mn1TL):`r+LGbwӻ,^sNhd(J?WZ@R%DIEHȒJ***J (%XAlkUC6!MJ jMMPUM*"nYk,趲)\>@Ic%|;}&e#{,ytN}Fsxrtcn((D_G+ͨ`c v 0h',:&w''Xy1y^,)#"{zlM2 4 Pks\gwp\kG#+#sC=MjchD܅Q():Q9քg1R*Mc>^@VHy + J5 ĘB>kS,zs*b0̼FSYԢ儕r^Q0†8T ` hy]}\[;W'sDןzS@:@B`!ORYՓBd-S^lFgnt=d Dƨ̵P#5ZbI6؛*QXrJ2lC/rw5Mv.t'qv/yŋlwq/ےctכXظp9"7kvŗ=U/,rKNJ^y*j&jSB 3q|=+Ӧ*`@?Ioϛl4Rs\G:2&`tj1U'wgMr\踮Uԓ;RrrOd$Ĝ˥oITM=ßVgP.fTL5lNq|ٞos6sar!zj=EJ#-+ ʝ|zEpgGk(:茍&ϭFS\=( P  :h4"Sקtr٠\` o]f砷lwh侦`ΨYL$hA*IJa UnAHSJZW5*vW.uTM'O<,ūz'jҰ-C Mz'>*VM/ ф~ݻlʭZ" D3- ֈ D͢ Q{eR\p#t)1 0p):8>n-99=LB,DD%Z$A BFF8Dk+ɪZ$HS}p6nHlrY+L C 5>ɧTgF][W6^{դU2JJ?7`~A.|Fe ae!-%) R4%HJ7jZ)6T+#5*. p h`&&2S:Ѭ3l$bU"FTB1痷>g8NȌ.dsu)-Am)&j *W%7z=Cy|_G 9{{%*+2+'Y05l hdBT ! R TR%R$ +DVTUBU#N+;z `  Wڭ/RF1djDYy \^Jˉ4$J*4Vz2dSt["-uVJ< lT@6$؆4L KPC s)z4Gd){ 8:N`|t,GIʫGj1uZ),&J=ü(` ?)E/dZ\R` gkϣLfQR4R -*JHCPIZf⣯Xsr;6#r1#TA`7nM @ 2z'<ީQ<.{(}y|׬\|>|>>p>|F|}>>x6{9v.z5̻Hҳ] "ΣJR\f讁M!C|o~:.e2j00k4S(*r҉ %HT&BB)L$J ld]VsVUmgn'HCp H`C"%猺gs¢XsW~'aIz2E:sik^:~a:>i(4}">q} |:_Q1_08 O 5==_NϪ\d?z/S2  @@Gzvu_C l81)*aĖ4IFV jTB@bJ jA5oLD&T 0bc (3z4GLroL嬸94cj8=nn6ՙ}?g>_ϟ7'*,KΗQԹTuҹrRKrrr rrs@So<ӯ{pv^A'ݹj5XoNjӇu$Zg"fh!NF9A,$ P$*fRJ@Q cL QfO6yuO!5QG>:ߓo#ŊvֹkOvpt)˲YtF*]f&.RVIM! fY.eAs-THZ"2Jڔ2iz>',GxRWzIܙ*@kN k$%yC@&B @%H% * SH+ JRD lp )4f*j nTbWiLe`2bqY,Y mHLE )+yW8=Q1ɥhsG}טk3#矿'^į^g6^><) U|ogzԙ<-;s{n>|P!$hA $sDIqCj!0 i!*$*VF(<ޕȳzrI"sY>G:<{Lgby:{6x=}e1͹fh /y׻Ǐ[={{>oo{d;VxRzI-d-<ַ]??kT5îgGb#qfBɹ70h̥6.sV:͚IMTYo>]3w{\=??휝8J^m @hA*"5(d! [#Bi hH&4}'pY`6M4@BS65]ϥ9#@JAX%A !oWhk; CK@! #` H (FRրv˷O oÀw Eӄ%P )  #0L!L $d $$$-! "1#02@3APB$C`(RJ> ]o#57I}_my/IrUIxt8j.eүFIŽGq#$4*Ƌ˓7,i(Er\\Xm%8E~iNG-bY2PY+BI:غYO[/_/|d? \kh8/+IѲR]QF#㧟Z(.4Bn*K)Gj$8N5JRy$x4S9b }QJ/rtjWV5օQ g|/ֽ?"_/ȩģ+Ro< VThʭ|IH5Yc,,}rQ27||R:>\ C$(q&e kr3a2P%%K7Flr_M W[QFt]ߏ&W/_ /n_ɒνdd̆uf_¾">`$IZ2"_eEjI뫣#FE TDgt!K2;jR*]rOUG>⩩NJ!B*R÷ņ8c.o:2_%_RrV%4ug^&D%፫NdeKYHdѓ2m\%K/|~' CpܸBXT/lHԲT^!פdt81;,lԚ,kgFWcn' lgُPRK[*_sdQ_dm̯ זdU-oJ Tdf ƳK2H˙D⏘A\11IFjTqYK5Cgy?|o/9^12^ N B sU~!Ou8sc BdWq[9[4<5|W7ϟ㜴*eC),95L\Or3'3V%>h~Z6FbıGg/]+WZFkצ|DnM'5~(|y'kʞȲm>Ա$BKh%-Qd|{2dj$Q%}c2Q gkqyGT苿ʌy5ɆV \8O;p=My;p4G/CKEt(@흔,h#hj}(+a]ҶJ1c!~eɏ-=o#rc/$.jy',\ƛWQN9u˕jSrᄶ/';Ŗv\r1}T8/qR|Xȼ>DgcXr}Y|ǖ.,G/, ,X[\tv;hZ545e>Ҋ+|vYDDܢ31Cl'uT$aIQ䯫{g _w*)cdj.*0o 5ް>1q'!+zیabe#~#^}Q{g¾,! M 5YykBQޘPeqp]Trl'U&7"PFҢi6;J"ﶔ]^J+Й&L1<90 Wտ{/䳑cLnVQvGbGNY"8]_`#-zh>|EtՉXD}ɉY.*jy\ɏI,̹-:6#% cKyY-ϑT;jxq}bוEO3^k}U^I.v5֊Q_M/CbTK՚+UrbDGYɗ"r;5+t/"vܤ U Ut?Q*>|t^liIFYU8({]71ܥ[w236pǍ9r4b/QdK.mI%LXHgzgrF6eygH.b'f}`džfH;'KiqlUc$7},U~ el^MDǖ9zr8,PQK]nnl9oeMX#d|&Lyd͛EQEjjhԎ̎Ďď;;;;2;LCSSR.HM 3P8|vZ6g.YХD,elt,QGx܈eIXlnn9f罝3`drbrʐɖEQFmqĐL$.$O؂;Q4FUuMۈA">l|i jSB8$GG,d8CGs&2c.TG&ߕ\܄bqXz/KEŃIucscc4;n-#K:Dh|QF&.$B Q^667766,, ,,͍DKKbhp#xs̵"3!73R\"6*^".EttWnnllwrڜPK<6EPG&GG,QEzlز6__8.D[eQDqII'D>QLٝF-eiLT.R>'u2ת%%"Qx"*pɫNף/o]OWK){QozٖngnLDN16l7$q.\9EQDqG&GJYeQ]<*CcI$o.<ظ>G3菢GHK}<؁؁؁؁>|H 4i8١rX1be 232h'k9,X~KGʉMJn<̳dmfgml٬"K%R>J(A rb)Ō8*r(DH z,ۮŖY}+ty(%"\<}(X"<92<4+n}lk#FvѬKHز7Gr'v'z'~'~'~'z'v'q_ᢺ_GJ5TNON,z}']o[ˎ}d.lK,Ҋ(X#œ#Dp%ubK6ehbY%De$#1+/'nl_(D|>Gvl+;>G3菡G#}OH#Go2>;G} ,Ye%=dry뮭7TQ.Ly(J>eb͋.ATx-#tw;pøw;pr8gbz7%tJ#E8-\&cɼz|U+WJ/jG ##Ŋ$뱱Ǟ_J(6r"rX),ND8dxB:Sv=,JE~$sK>#zc?)qqprnnnnnn9qqpϪEh}ɾ*B!B1ˋ"*F9#ǥaøsTe|j;shBpB!B|\= BYp *r3z1~+дQZ*2㶅 c!Q2! |=*2Tc$!Sa<왒7"7&'Ă)4k<5!1AQa "02@PqBR`b#3cr?L'|4AQ{lLȇ^9"Q]=i ۢ6(f۱ܿFפ]?b/g!D-WS}Jt>N53r6W'Sϴ{xO"ldv6Z_-vg^>thIB TM7'lw"Zg\q(U_US*EPl{1$F,m:~J6S'We~s zd~b+D(:?i,%#H7kXO*}OpQ^ΒoE/='NNIL:LI[\v>gOR.Lq'j ET៩ v+]XksjSP*zftf3rX&5ʤ]EHu#Hj)W̆,z|G"x":ԣkVkV<ι3=M0DfĴJd|*"nB T"" 7b-3GE*٢q짍/̭YJ/ZKgiGQMSy1麳+z*S :jo?6x&lnGRj7RU-IҹY*`ṫ ='tz tu>mkHXzrdΙ2g6- t2#N$LܛoYZ)e).*2ʮsv(m%e-r)].6ՔvtsCӿIyXOR.TF4M6*JUCK*_!#4>,>ܟܜ7u'4ێd7~ }}!<>4E^sϝ΢_}1Ztb 3&4AiЖn9BW$B!!)\ڰn-SByY>Y߈1X/;L)s9#%Ol'ܚL9&5iDF&pf||YNx6Qm%4=^S_L.ܹ_w,yͲj.eigbk`ǸΦ.u wbI'&[DDAsRR?ܭ%% J}WS83|ku<ۧ)b;n%V&N/nίeӖ%GN GR^嗼%HY(2l\MT݉%OMߺjzvU_bU*D K} qUpqTRJ>NB]F<<{U̅޻ס(Kl8CD]R.([-CUU5?D5cK%D&1^OQ0zLi'zY=FQ=%1-QF}zϗk.g| USnmL!vt[6w͛x8~ƗL&ts&L3ɓ&Lՙ0^ TbK>o/2sWL|&tf5s&|0` 0`&t'"<5Rr'˿+OH"0`.i%ϑdθ0`Ǜ iq{jT%%T? nj dr.ƙ-{L,Xƹ2\ifx ܹyI "1̲=.9);?O3d`3%4,`EfC\0p3>]EvfK-.&urdɓ&tɓ&L3 i>lCӓE_y?&~:YivYEvY3Ɨ13w5ɓ: `2gLt9nsHgNDg"-6K"-r{1sdΘ10dr >ɧCӹr9ޖG"i]:Xs]nL3~K. n<ܙq&tkZz,NHzu:5ǶXΘ.\=yN%鏅vHD C|SsWWG㑟:ca/Ĺk)!1AQa q0@?!ׁ$F DЫcLU8떫Э;aī^F 54e1QY1 A< 0bHZ:I0S%^ì+m5οiyaB^ ᱱп 勄%-"X H"T0P_Aelb_ыcJ BdٳM4?M "%)~_e.FɓK)JR^ؒ át%DXm!.~0}/P2C<1vx6Q~:UFbHJLJDwZ/sjX#BRc#ii0c$Y:A+TB)e }oU,65=(|XS_-q!*xo\rof} , ЯDzzV~'QȈU!_"D; !lx ًo <eX=': }$߱"|&e軱"&n kfbiGFWM b%>z.tدobyYF&Y6586w ,. dv{O0GوP*m7P-?~GQvm$ԋ%t"ߦe ,~^E熅/_¾ N44Dܺ/g<֐ CHm{t/ H|j_B"j[_Ά4Vސ!")= _HY?O!BO uQ$'0^2B>GBJ]B/!!h؍^dhNS1E?L RFf!/}QckC(. ^t*cCqqSQ6vkeۍEAD"_BjyB5AnU{Brui5=Iy'I8ic񍶉gDzut~D%C]?LCg}֢t%DE |hm /Hsռ}l!o ([CaPePN[[>5uνsC$&P=$|{p|t6)Z! |BhY!!piS~zVl3Xt2FƷnS#K-l@+lkIBT &*"/ȋKbYjGcƇ;ZHx&*َ)='[*azWFR&ɍc;ŮW3Kd ޵="ukd 2蟃ڝac*YbSˈ* //Q/[|!foc{! 'BqBq8!, !Ke'5؝t4dK l!f64~S,W(Gh^ADav':"mrf;x;};Z B,/ᏕЇ1KJgi4߱ؽz5IGutg%]#Lpy r3Gb hS=LEK.R}^ELW[ױ!6 SD!%5sϛv3u7tySyhi aXx%vk脄B$%OԽp^WHft]>`M GlCv¶fA0m ayl~hDAD! (^"_E_q8AtAKЗxTz!+o:-oNYU)؊߂ٖKfz`3m%$m6ؑK1݇$bgI+)쇠$e&:ã$Y5)bf<N8`X&"]I 4,㢭/>vŖoz3@? HCd:n6-t`vFC񻵵Mg6&ַ.z~I,| 6Ѐ鲶CZ81WO#b$Oێ_¾.zjWFxu-jF" ʯoɏH4dBn>lYs|6k-䴂ld ,ŒJ;cFhj}1!9&Iyǂg;xF^z<6X}0‰S1lxŬgf}J͢H-UgV%'˂s3DF-obسK;V3W*,[Eg`z$+~Yؽt$m:Eq"IEdGFdM N73:Vh7F[NfBq`#!}hS+vU- "48HW&ɵQL$b954gt?> wƆCJAކ݅-}ׇMuBΆ7r\*j>vߊ析OYCeG'7Lqg="F8ddlkbݖK$0[to$=/F$R!)0<pZ%%z*z{卖xo$dcD2$ F_lL+OƠ/f?И&a^3A__s|o9* 1 +`-!R o L6<#V,MyBۘ ;ПfK/?@lޓb^ׄ%SIFa#s⊊œHCk~7Ny{=cB}1943~GUі'}!o^;Eixl _zcNalk$ž(e<- m"y1'ҙyf $&mv3RK34)`D'dk9K9<>nW3'y, J;azv>jO=9*'<>W7S_e=^J&R14dٷ?`/EO(&\vCX)&īgB_ $ZM/HG05؄eҰ<  Z hv7| R,3!&4&"UbI&lmAJvcO +ϏG}SZ!S5X~Rd)ֿsefZ7T=, ΘiHc',1,U ͹OB]֟Wtiy G+=(Ŭ}@ )o2"E_N%ٖe͍­T<v_ש5S[ƑA~3»Hc̷;S,u#cgIT@X Omb$ݛ#ŷh׳[4Xi[&lz1ٴF)It:fJ *&CSz3XpҗcF`!ENjr,8d XiSkz%p1)ѣ~F5F|2g$fy:؋7c1W2= Jy4&[퉕v4WhPbv&LF|TŖhF!&X`Iע{xyw鐐|cbSsxK՘/BפN"ڌV.I$QΞKfjY*V[/2Tt" 4LZ2ϱ㬰{dynƄaQU]={<'44B1_Ɲ/ѡ6CRBX,,/YH:MTX 0}q9|ODN'[=G"JD2߃ ؍_B[א՞OB̔񒞯&ȟOW-9Y. \ۮkcc^x!W9.'#Koy+>?F"mJK#"2[o xL$ٵm)J. 4 )}$\a~9B}m[K/f_mBBpk4#! 8gdw >N/>\Xo|? /3SC'OZHF$'ŢI|>4Q6qzGz ]u:BMMj15X&fBD¢<Ut{iVm eey&FKY>([b0B2譄Y5[.joD'loJDd'{.T6tkopϒ-!(u7B|'3B|'q8i&O4ॣX& gQ!e;JGks N=!,T+}zoAo-qY5dɲR]Ʋ;*GF"Lbjr G n_B%]?f*lɅlD'b܉Ÿ{wFeSr"-Ї.m6S-W1E'=kLPgkBO;N'N' ?h'-sB )|5O"_)OC)'3&_{:H\2q6p݋-HkH"]X:).`Iξ=|_3g3\{XgCߎ@nBSD+> |(.UO66K}Ko?$'//1egk3?m$^NE7i-WuH-\%ef=,%Tg~+Շ? k iM(N' 1ú=c D4:\B Agɓ3 oFi>bC|N'͸wx<#g$gC1"g?efOɔѥό"^ǝAs} BKm޷Md<<Ή O1#;El+%RX.>d\dC Ӎ'? 8d05!k8 l [}6HB&'¸ûȃlmCLL?<`~L?'o65:2 3l^pd2"Iv۠xr]]0L=pN:ɍؼvxC"l}`D!>P&xIyB{e|S}XQeF4O7WE-$&7L}Uy [1?E/>H*3cQ_\(+V=m="C0 ?\ȟBwƭ(1~L#rĮDv.N*H\ 9"|'XI#6{qGbNJjKlO#eᔧߚ>IZ7ʟK3ql2)8O(,3_b!v6f>ϤGG쾊~Lr' "pl[B}^4 x^E$]ĬJ! Ut? l^sljOhb֑GJ$)Q q8о/7c-|^gMP-E|Ğ0xG?IO }Bx3=Cm lCa_h0*/7Cu݉R rH oœA%#z#5O L*Ux_ )50Ee"u!V}'xt6c!+f͉;>!1|5OEC-ȷBfغShHL!!7=)ؾLf}| ĒؓEY4H|NJkL|3oHkg> E=n/\" ;1h0Yr/&> j.Z/ HD(D'+0[,]x't TuBi uKcb7įN{'{|om!܏$~Hv/>b~Ě:^ )q詠6[*|kZXGׯ0baz"w" "z(f;e>E A#@3!Kòhm)fF$A#'߃;( P8v) K\ 9c(l 1nf_oc]=%uEЉ=HG!!>΃wS4GM1~] *4kM@W7B/(G{T+m edć~Ř'^:lC0?df̄fFȋȾUc*%pԂ!ϖZĽ B.!8C;G] I7e_!wMti\ /yRD!Nj $HВ|CA}I'!4#fDl4/?d~G) G_&Wǿxy*aױ9̉nO& *Cv3l3 (hâ | CD0q uHҏUYzXH׹)A"! @Ӌ ۝qJd"o(W f׆]d{lᚌ(ѵCOɍ&8ߏF1Fy3 7 ?%%K>ϲ[gv`YQB*\jsJdl`\=+B|gʹ5C 2!+ WJ;A;m򢝚!&=*$h2~hRL!3/qKe,!2:В再ľ0F.,5~xf|G#l~fM/e2m'Lpl 0U}̸" o0mV  3|R8Vg#CBi M {.ǴC M Q+0"/ɕЊZ3dv-ʧB2=s;D2^!, 8!a;e-啌 fW t䅡}$yN=fSn7 ZQR)?Pp!vA%zN;(`lqAm Vh0ɏ$qw^D/! i ip]eBo~BD/2Xl\?zz16.tt 7T!p|d{D_eB !xdA>Bك.-yFln+z0VOЅ?Fz.hڽtO7K)#D'Jx%%ү s c;1Ҫup_s  W+ 2}/đ.!ΰb)LѹC;:%uDc^ŖW#llc#b4 0Ƈ!b\BJ,뎅>Cx(pVW]^đe" dQ+"z% fd76 p-Ixo##4e0lnH_$G>lㅤe3E”ȹ/A[YcDOB&$RɦĬѣa `H!~-ƙ_a&!i1ճ:064GH h CyW+\ S;zkfzgϳz=H$y?/9<:ߡunǢ`g77$F53,َ~ߑOCsFŕ~ϱ /c,짼";h7@fc5}ɂl$F3#Ti p@9^asut<)D CB%p\l''PBn:ɮNkXWk4-=P~y-ӆ<~;aHJŖU*l!!1,>o%=Y`'F$ 0YCg+П!ҍ]~ bY\~J/Kc~~$F^!cVh|^^ F$f"*)-~x ZLfٗu{M WBD!l- l$JB!iODl]Nݨi p Gm䫍c7bgK{FRs >aAI/.?bAwq=`~AjoG;`#OHSd#-:\ Tnm1g0xa=%D肇_7K}< 0Y6N:}06d25Cl؂(utTCޑ JeB= r8GohisKxB MXPCCTSio#U+"l15[HhgHlLSyG lonpjr^# lۄ5. jn+:R\) |pfcaQ_`oN3E2&< 5M+G[J/άC_% \O$1NkI6z} 70$cD$"i,rS.GQ݋,DD{ dThJΆoO,\1„ፇ!,Cv,>Í ܜ)>G$ .mVkTKI"N{±ܲ ~ Є&R;|~85;(6-BQITS>u5NJ7&Ƹc6!y( K:v5 8/&\xṁ*$9sB0(#{⌧ g 7RVUǿœTym^@ oŸc(@oz9o.ý )2 "9 Ϡ @>q=+m}+C>$s nƤ9p5ˠ|FTmơyKV  .ڥķ` BG*^AˈmI%<\*zgelM c7>v~^ D 蛳 :?Z;l 0rl˵ד12WYH*iXnRgI-CP< kajϩRذ`=׿mX }zC./4 JgZv] B=IA גm yizƔ.,@̨!1뒈} b_^~3bx(7n1Rr!q V#XZ.$pk3ť5R8v;-FzCY8oY'1]ÀyDLIB>lяru>bӧ?Wʍ}W/}vdV"vʈW4<bKgJ;1ӿ2 _fY+ݳ*g԰\z30 9*d@'* ⱸ:J_V ,2 @1GQ,+VIKQmWQ];w"n.YqŝGY4E[Z D:$)!9k9wh4p[VV9_ޥ-:KMt4LaJj;0MP2k{.ެ.SwUzݪ9@*hN+9Y/pA4G9,+;"հCf֕i`zHN {@ު!\Zٯ[7oܒ9'ezE,'qSESng_z/=a}D!K /6o1GHbQElAF! Fs\ؐ6EqaHp ebD,pYf0|(f Vt ^ 1$/ɍTTQEFBW ,j8LJ% ۅ! HE3l"^7f3ED}""495!(U452"0ct,燔B𻟡w N3~X3YCGcugX!%1 !A0Qaq@P?o3 fg'Ƹ~am.cgsOL^4Z3>> |D4t%re66CY_YZɼg|6tA*o?7zF6%!8LCXcɝt>.zѳ H;dZ5e-.1cXn!.MzByžrO1:ΧgNclѨyU Pvϲ#B11O # #4B-͸3f2 w<(t:MСO!O?e } hQx,e5vcSbm \,3`wassPF$:;bgR7ex|^Shh M4B1dü\6# lHH!C&b0(aoGoDdd6Qy/$#kB2d4,l'*S?Ta!6S PiOFC"AQe<Q_E!S"!ݏO wFq_dݝB ,ГeD X]@(D!+#:::&Kn|5qA5$4CQfȱqX Ų}bps2eY+8u.Q_1jv`llH1D4C ގ{; B*`(e..:hbe/ =c(LI etz a mhGhż>>Hi`205#'!1AQaq ?R 6߈mF5bR;f E{{ej8]w@RA%5%@)p &yH/Q)+ 9\h3DDq4+qeVX&Z$G"XaEv6ah1(R8eWhw\ K9g:* erIzM_UƹW;{x|=@U:M&E81\h i'ËE"]@`(̠3/;n Xbhj yQ`ݱ/SGđ5=Ƶxt%cp*+s#pXٮȈ*ed]rl]w8)~ -vo!&ёub{MtT Pwh΅b S%G| ˪% 2Ff%&%pyqRHѽLbKMH`Xܪ_҉7mCR y | .%?ܹvRDH˸` }nĭor xl ګ6y@RG!-)~ wTًA'xPxGVa>ȏY[Ś% ^@Xі9M P (CCyc،̒`r'A[E kÖIzɍ29%.)"ėo[WFta "bvuu\p#)U@ p>}29ؾrL# Ī01z T USm@JQN`̖6bSF om%+B /q\:!K :qAjhGL WT #`.Wc,"v+-8Am~f&R#[{?Có;: ZC߈%ED13]5o"_ )ϒs~ɀeFyCB Yp,.RZUQsJ8Xc6xb*`6`r 0{ħ ^X!JXxmbY-pf'P9_)XCr`ykO+N>%D YOir/9f0s2 YwG[xǀb'6+ٓUQ)W"L0TO5/>"\pӎ|1>WԢeQ1E Je_~%bUW*[Krf^eJ+,^ELn a5e O15B.)tq1(@ DMW1 2c&hf 6X %q2a -\vА,V!PT64y~(\[9$y!5+71O7@+fFgPb#6'CT"[w. 9Nq;27o9^ `Zv.œaS_.2ۑսJHrO/+,q YO`3ΧwpQy7/aVG37oDm̛t4z%Į.V5ӷ13*4Q#Lm%̹ዷ9TQ1Z V +[ *¹e,h0jGtJ.V(Y+ bєcTh1ZAMGĮl;*?ط9C#5Jy 7PnRdy=Lv0ap%&Js̼hLB6'%,)$Jфb#L8X9MD1"{;5S,z_%|@ U`_?ܴ򗣈+w9tFW(>!Bەx/R2E;_p56@B%3]GejKh:1_kbKkQGT(,#3sQFJngӵD\ Yt1q㻀x>cv,pH습k#ӛ($~;דFLWSYs)1CU%m(^%1)~ r/4A{0q8V@{^%-u2|C/1 唻K2-S)@􈷙m2T)VXd@b 3'#+d ޳G8Y}Ms֢w0;o;=XJ(۸}K91/f -E,9?xt2dn7x L&k~v8` pV~ѱ -X8Tkt7i;+oaoʆ9|>+Buq?%^fp?ۘt>"jE AJƥ)@8/Ltb;^̲P 41['r**`ՕbRQmG <̬C;%j{J8Pxq);;%5d 1D?/q"a I^`/k;`9XUl]/k/0.\9@ kǬ{!Od* ثa qT5 r#NE$1oq96x6ĺ3.eac=BVDNUw=+*i]@aG<>"13Ube̮SQf'~_|AU3 }L1ZD[^@-vr !lQEj9HopvbZOH%֫yevUpCN(W9pbTn5WO"9h1o"x /<z'̥UM왃;@w X[™)feV,R&y|J`^ygX)VqǨJyrwÎY2WhMُ0PQ`f JϓNLI;#cd/Yk.W_EӦ#/9 j[d,#i f*? ݳ̳w9 >*4&:5s g2|R^(9=LfݰVe?:u\@R$P7 7}KP>ȟ8I Elq.:4EIpL?Cm$U.YרX7L\WQb%9|E C!ߙ!삢` psZԮξVR>z~ 僆$YP@^RRN+hZ@+!,̿rWJA|j ݶQ(7( x >1N46(!L^X`r `4zGu)& 0U<,ѐj0UFY)zvW3BpK_JZ?fFap}zԱK3Gn9A m?%QYhIEoqCHlQ :ɲ9-('H]Ct _He F+*e1}Sf?n^|##*AfƔ7Ru@WC#!r?ATy% B .]DA*9ǰ=1ᳩ^=,-m, X(*l>oiʴ`|o %4~1ר6âE\ol ,N3a&o:uL%ΠTݐx 7|Ѩn&J[[*fN"!v =4~WQōU U ~#3aD|Ю YuS}0:{._DAh ЁdD/!hC145\F5aKZ%0Ig[ PyK3OA ѮU;`!}^"K`/c C}$?~@Sd;BQ8q<Fm`Jn 6{xa9K,Z{4 n՗܎EJ#2-5(hhƲ8te=Eb[+8!D|0+НMyWuL@jriCcݷjHR,h? @LZ$r)9 :Lg5!*۵0So'ctçKo:(ӿQpĢ<ΫWk,7X,ϸnEy6x`TlpOIg 5d1*Up7:iD>?JSIeD:ЋoUJ3L -+S]OB*hcAC@A[^D_oݷNԱXl߹geV]U<6Y2 %w ft70Rִ~b9$^zVr+@|EEp( :6ɱǖ.*Ս.zrqQ!*M#ኵ\eGJ4ˊ2pW(k3T]D-,o5 |wFEษ@y(<:@ohJ&5' g.`S ~YrG Q$z,:Oid4(rsjAsA[f2 Ϸ]Uߨ@RP:1VpnŦm;̫h_XƽFu|oo>*\2ŮHe.biFG0(t+\t-uVPvpE`Jv~H)ށ$vM,3ψKM媴5cܺ !SN"BB'2겦ciG5g+taYcb~}rM0wyih+Q[@ۊW+UNtƆP䌟w\|?$B#Y~L:zeVϓ'vl^u8F#D+BkaRΪ_jg=s8&V1]`w;h<?8@^"*?A3l1ɶ}ξ?@ט6p5?]fo ۢ8Q,iY{0@;&5Go̠進y)zL 8Qs/S7_uEhMf/ jLi5~cT~c-&L*:L7#,Fڋew|f+0Jmqe;HBۈ3(1FpxNA4-.`DYK,{V*_>bCT((ckRvw $]Z"ayq*ԗ$>OŒҭ s 4jał  me// “1qH`KE;}Wi-9Ρ3K 8>B@zXۣ3E J`" & :@S\CF/@60̂.jkۡ|>"%S?1e1im[ψ1UGs,(8nɗ |?!c<Pf^eJa6Jט/aJLL>.or7Ad12jo_0yУ͚ԲmcP_70aNf(`=5}ʯQ,;CbUFY"*WUS4#hQKZ:-S.JeccPW=%ˈ AQZ` *A{+TfИ'̪Z,e_1ᶾW ]QvZ)Bseo7J.zz~!]&-j l*4+fp^ى0 P_>75jJR.<*K/^{ +@%_<1|(=h` s;+@qLT˗h+ :bi@sWK7@eCNǺ/Ɉ)A|[aab*lqzɒ̊Zy%[/ Xۃm#CY[u=ABֻ@ٗ` 0=z`D j RO=,*"x((BLob)F4鎳^ɥ^>%Ag87' kcreaf :-T )P|^aZ)]{:-r&0e¹X ޠUXf \7 ^`qi tAcL9%"|=MJ rbž%lJAKP +DZGQ"/8f#NRUW̰тz^]Ɩܑ3> * y*ϸ F'=,q WaZmT!_4i_O8.Tb``tus%]GH6~RK&hˋaIG..z`J Kb%v ;ȨB=]V&9So.ԊĶ-o9CV@Kuu|FѫPmEceAio7TcrPq3-P50Ad"m\v\d ׹qAVo1`xR#ҡ[3J[CxUE@ b8X!TqU]ry \ꡟpœ yb(7q[ Th>!AjsG@=eǷ,1e Ck(̸^.6X ޅ]*c_# Paz@}rܟ@L'-)0e4Ύ`v=ܾ6{:ւU{h\?% 5_APg9/Om/R9䕛4Jl0X"a =cw+^b 1BO;>ey<2w+aOqs\f(*F _C*:.AwKnũ1*V*J )s(0|"%Ɯ%ſ?i*8/wD>V%~RD+RJ>fBcX4|Q 9qK\v7xi^"pN̋S,O8UZcX+.&!w- *W\\2G=v놆=ݧkճVpgUw eǺ>c5W\(.X'J@KQˢbU9|DP I0U*dž/q^`mMļN0 bS_ƘQspvoD溢JSB"s*_U.{4-j̠N%<aK.Be(By` }L/ʬYMSaDu_-Vԣ.lu切"U&\&M?,]mscuA6ʼny1}BC] }LDfcC5eqB GiYdA4$b+Ȳ.%qGb_ F]\,&̟U.Bas5\p-GpbC C`eJ7~X1ֽCܨ+qrKg9j<=zEDD=~#ˉZ}B4φ;;-~eZu<9~nq1N+wM_\!uU?6[[GYj0*:C/W3Fm;ƢpvwGR4* 3rɜ|dNdqŽ Eroq mm_ynZKo>eyT[po@jC Zu@˯7qnͿ1m3X%Fk5D.TU$ y3B8BV*90O۹@!DV"UMB8a#(<)BI0rM,zJES25 UiԪK|Jă]9~A^S 11I*1jW0w?^ Yqƣc[`av="%s(Yw jfyQ+$Ho3.Qm %MMPJN2ǁ5o7 5M oR iJa{~bib8 F(jU1rw4kn-+\n;cw[ǒn^aN-|T)W~#*sX(T1P  lDd,~fj|v K]E1H_7W}bt"e^S mn;3NՖfjru ݚe8fnB 0-gPJS/?0yX5d۸})wGA3 ++yJˡλCK)?qqq[jW]soC8W8*wUP`!ĦIT?bԮ"$nRgԔd楮L@\VuFڥc !w#*C<J+ZRܦ9%m#MjfVH<@K*Q}:eM*a-87yhQ1{pTn9nd/~jd?ч0ߨS]C=Uzܻy^7l;53~!šZzfsAVjY@!طL170y1Gq3R숇1μ2WFYGL0Jن&hkfOCp//?2^3#MV&f8^,ʡ*1S.cQN@tLKBtʷN IJV/@sW* e qa9Ux/ UW{/U%u3e\GSg`e6ڻQ±:nQv }&q,ψ-au k,>}G<)0q g| nEeE1J6}ANFl@%Ƭ#TAw nz0c+ PLр}N#v'^Nuwɶ\LWcntܳ5ܺ 8Q3d""Ljb y؁; }Gnen!_q(e[j^.]dgW M#S5)nYalrrn0T9qRlI㸊ke۶0ȃ@b ?*h-u4\½KHiݾ%2pL&\Cg+Vn[dP*P.&,P+f`o]y ?"1C/LOq+`8X3B{@?$+ =\ʡsTN; 3Cz֦`q fV1r-bN: f%0lDA]Eٸ\yPp^ķtb*2sz>%sFp3@ODH `9?V\mZ 1 'b\5 p((Wġ``\08'Q ~cX4pġPicM,K7G5B+;E t@ 2_2b56i9x;!]y/mbpm?pUuaP*R[eL e诿 /T2쁱"QUpTʼMKla8E+qccl,>byy 7ۗkg pS5-UF2C!Haod2"!,o3O 3Tii}@(",LdՔ`T[b; >Xx/ &LfZ :8m'Ƽ׸@V"-T>`J_bJkPӊ8 ]:\r9¿YFR U0i2jųu(` Dsj[-&c f"L0yQBf=' ꥳvT1ŢXP`.@mӘ\WKYN >b蹨2V )m,/!/U-NNj6ķ `aB@!` W3:86%V%1$U3s06u4>fW&اl?SrIka|3C潫m2e/ZgZ<L74,'G cc11fP!/yQ}Ek 3+솕!J:J1S*p&2_.;?pʴ*6Ŀ㛏^f\ԬTuo1{R?xF&ůqKx!FH& xPz/Ĺ;1855hh(\ZkJy ex)3SL 3%]L׈xDj3!6/=@jVfn ዯh@/$s?0~QUP~𓐆8n3ŵ6+> YGо> 22-G@3 u0Գ|bݏf#Q.m||1@8}J ^ [ʎj 7=)}Dl` Szb_[~HM=0yhJ ;f8}& | spbࠇ|,{5Y}U%ԯ̲RS8G8%m\3DF,SP*9ޢ+|?cs 2y{xW~_2alSPFؔX^۹|9qDX}FDejePգ)b0ӘQ7m6P,:bc)lB*T%|Y?@rD Vc.0qb4$583[ MUy%t2,\McvEKEH75 :oq&T\SO{?' 0T^3Sl2HxDO%Z6irǧ3Ɵk#!]-3 +ǸTsw=LC_9Ľ#l$X|Elő\"i*dLQ3@6<|Esf/o9%rX$x4E8ʨk3s+^J =LJ9vx7LPW|M%7tC+#eA2k27M騫"&)QoSBu ٮLk7un#W11wj)Jg@";0.Y>浊EyLM P0J"\K`3L 6DFa%"2F;H}%idQz37j%_2pGr9J0܌ĹJ&e8 %#2&.1̛pEE/1KA9@ǙE׉amyAfu2)o.]~U)@ҞCq4TX~%^UCB.g"g  l| Q-Fs+U\¥T6|9z*jaͅ],^azaQ?0"S Z[HUF5s.n˪%k&(!uR~r36a*oKdyƗ%Ysgq(oTƝo׼NUxb,̢1~>eݡ9JL:%\O ޢi?RQqi֏ ]Kez 6*8z"!R*})r doZj>uL61 Zf i^Q=|'Ku2EP#f2 \QАk9䆔CX#Hu0'"0s4A繡|Z+#c۸dF^be˻L艵lU~f| |J[ȋ'An$PD_ݯsķ5GP@^9Q,R_ax%Lݟ7]?2Ʀטgbb|ʋsq/A2+L|q6-6n,.4a[ĬG#xPF9DJ^z_IYXkƅoxFH2]%C-bS#,6.~?Antso)|Ep,*f(y;ƺ6SmbS`E)wLYoWy/pd4X//x_hNHrb~ɻKb&r~~YF׸?P)KT%ǣe_0 #͘uc2sڧ%(y`ܫjx+z:p3Zx"*Q˸FlmGq2(Q(AXQ"#YH(>%%iRF_Daוq Zsm J 5.c`0 ^|f-Dp9r*,*h^M8$\s&+S6T4w.c G|$?@eI 2W$VK**?0Ee# kf.^w MgRGYg IqǧS;O"<`q7.Ȝ1\_To v^es Z96e^%pjv"Z3&ޢ(U0/1j1|r 6 eRGEW>#dw)3AWD&9,-RmE^%恒*ڽ1]G,؞f>GE:^\/O^&Z-99qQ44=)͒Tx"8_OJm?n@o l%`sx /,Σڽ aG-bN*s%%-rܲ1KL/0$yA> P1NQ\o^rKO.!eZ%P.xLqa^Է]&YOg#Yq.5^'2XX~?4P0 CPC)1dDT1 }ʦ*($"h`ܰ u!dU)nbbcٖ0d; ~+ j[fiJa G#B jY[QcM7rla3 P(-|O+e<ѣ?Pd\~i .zh7rv-gr((cC۩ɣY.kPVEAi@MM5ٵ?Pe*w̱a&ToVJhGrjTTFr\ԭ5,ZzĶ\{/Tycp%3 TqbQU^X1M_`-P{P O:EKY\ [Qؾ%% JC[|((`˘Qt-wS 0EpiEb:ߴ o%-x@,rQr_).b83P8,YcJ bf,Cl0D[%hx}%-rl?QgB芅/?pbp,^9Wk?0+!Q2/=|A>a\F{Tr.*Ç11"D1lvDblr]зPQŗ\E g1P嚊ӸߔrgRD@ɞ!"kB,"4[fE28w2mxmew+.^w#UC1B1B97^e w.b,(#e KFy}%yj6lf|&{WQ\7cj,rL Gar &gyѬ}^cqkmCU+~*gqT( ?B4[pyA#QWkSqYJmY¿0Z  oF.Ht EZW :|!1T2!|GT/b#kr|ŶIc_fi`D8?1J p_F=@LNG/\~7]j*k4y Ky|~YQ]0<B"uJ'A}S_rc uRО(98->%\0}r-MKX6BOpңoi8-`?Wr/> QRE8ܰ?/ Q*5WÙgV([tC)KO7nn))qrX kŕr,*T(mF]Ў+lF厐yk,, \D |g6D0~.G8ms"։̮]5qH08m=abE<55rڂL W.TkAFv8X\L[S2n?,kU@GqNsPB:6 jۊ;g,H*jgYwCu}͂֜MZ~ͼ\q(k/:,m1F]s)agA]ƨU ol9lӘWF|fGP@hK!N3`C4,G'[bXxe1̵p{4AVzsU,~0Q<kd=&K)JJepu2arfCp: Us Wٻ4dq~'רK-J=VZ J}|M-q E<ʕ/z2>nE/YGlX( oQ:>l=CBW3!D 8^0*`2pCqp&!wmȞbLqb:^} ܣku^u' aSOY88# NUCqq_3GP; *@(n $/hB҉J3Km>]SF . EM#isc,FQuM:KnZ%e0Kse RŬͽ- G1qGԦDsD' Fwf; 51Y//#(?bM~"-tE1|):eɚT W&?\"%]b'j)~an1z'۠N {Ly~!MR"IqED<{rdQO틜*jE<ᘫIX 4o(J*ax"4}LӍwL@aŚ z]2\ 5k o]Bۛ^nO9} nV\ #`~ mEҪ>Y<%ʥ6i/pG c\Jѻ[5a\bZ荕\Nfq8 8b.Se;'nʳ"iH)[J*=>!G&5&IB@0[4T>v fZ wؔ~j5薰0g>ߘXnV`|DЈe@P6SQQI Y|(D:)[a*0EB8Cy<*XZ@Q=ռtg;ڸS`{(%X7[='$/䱟HBPEP4TWZ\nVf e7 丱\4{@obkY.',aqCY!Iu܌ F GGN/%%y aZǪF n`x~" D̻ts"> stream xMkF+c$d Bn$lYHS-i4qTfx=zUv˧;9tعE *z^>~{;upG^~wΫ؅h=\{xA6jϿwountpՕ>}|).lҐ[/v1q_LF ])bAGzDPJ?WapY.T,{!0ѭ'c*M\ OQ?hb{I闽ϿUV{D4IG |*ՄQlUq!<{m[EXDRrBBoM5 7 \)7r!q!=2 @Z$nf 'BdrOҿ\V=e]׆ *L.=5T Dm.7ޑ)'ߌ;Q(NH3rnJBMs%3\Ղ[J\풨TGfd%tOX37뉋첏zN4dP{ShZ. QXPO}:*@@eNM.E˷dk!78jQS,MNτ ! !6{BDh.736!AޕkK&k{51dCjSQ 96\ZJ@9м0lC֨TKYg5qe5)&jwT~2R+Q*ZzB휀%->=WuS}ϑg;hq< 2l'`/K%D AAMٍt֊l`H7 #LUO' 0j72fv'=7AAul+a)oL”SUEL 5Ib_{zuKɛ %`ɏt-ޡPaT*`Wi ״plP׶= ks6h)g>|CfU.юP .BV‹7cLUmCՖ:/*yRP-q6p U] j2nÞ%unw.sjBn~)gmpQ.$ &qo'j„yPi- %flOz$6y0WO,d(F>j|͹: .BxC`u! z3uDz쎂z-V5[Nà%ŝI. P7-6P6L#1P@[\#xB* \a4Dqn1ȝJ!,`E>R5H-P8UA%}&J%\n,nfZfib91z}s8NRWMu&j7NmͷAV!AHO&:d W7'iȷBnv&&8 aO(l#{L(ŦtTLݼ6C0DU!w3 }ZͯabxB4jRK7;)з"Y\y0O{<[>v z]ϑ0W` {ںc ww98ۓ](OeS^^DI"ܺ @QB2l"CMM@>zetۍgfQ%8<w籯,sivTm4.ΩelK 8p[ԟKpu?pN)^NE{Rliߥ-=l=Wy?~&JxgsͥE~Ou]!A<Ą'ђ> stream xMFr詪acH 9,9da!@,ֺ" Xj=ߛO?7uЁ V]0o/gx||x0|^~N4 ʅ؝>tG!uOO6ϧB~WR&F>9`C mIƣs(<{D#@GO4s|k 't~^!xϋmkX .P/!W|zf ,ڈCd\An>!DŽ27mvPQ tn*ϯB76{gآg0Ze<{: d@ kSw: Cq*䋩`ZTE~ Z-S% 9K` .[#Q RSԫ(ÍYGrX|c*H߬h-t$Tlҳ[Ezn󞋦.u*jWPXU|;@64Gy^*Җq܏sa`qN6t 'ZVbѹhpv '#PdqQ q fXT b9H4]TEdWќ ATWcƫE+V!?Mr +86^s<;~$C$C`D 3gR/|w,)2v&Wk^aH*듅;C&q=\$BRZ46@U& 7Ѓ3iǩT/CQIEwZ>S&|xqIIfjφϜQB47Iqٽqغlq")}a <*9+X$iyR.X,:QEUN% 7G溻wg r!\l9<*$;]G,47l6> stream xZ[~_1ව] hs8~0,!b{ᜟtEӣx֫4}M ON_|C45|7A;h`&|>o|zח?^맗/vPۮML e?hi56hcg@hBs5=z@Ol~ <Ϳo=p0gUd ˕AAs'>tߞمnl-$K$+"=P E:b`XN'th N";'= c`TϛZNu<=|OX=P6(Z+ms_`uǷ ='|pyܶvk2`D'^Q%16Gb=0k$-%HM`m/7F.[YE#HnɘFlېb dzY$V⁌m_b/^- %zf :d.{ObI*sXX4ZŅH [E⋀:_[x{b'm(\hV[6zR3f﷋fcR^"ՋUY[~S=I0qbkPtF ֯fu`9(pij.Ob&",0%D^f@!)Tg \x<0cqRKgf|Ml͋hrD^BKja-:I.V:|3XY_4 hrBΠD`-'şdήK#[0ܗa^!> stream x[Y~_AoDuM`9GCPĒE:a3;lVUWUUӻo~MݩNJ uB=ty݇~o:vi:ǿ?L C]矻gׁ>Q^ʀNꌯOx8=?|'7 `~Yn}qmQ=Y_QOךW_ ]uOTAu7~_z^5^gyQAm߿}w_i¦{guDʡhs>ktF)2S͊)G@oj|g+6#/ 9wiBoRϿjo?/kcw1A&߀^wz݈"ޟdxw>J;'&>Ey 0F^M|_7HW kg %zʺe.AyX3#I5ݚ1}qGr9d"@9,}L u;x׻yyȊdr8xD}d'rXb ߮nGDz 0e7cH,‹\7 4a+=C̢iFl``Џ g҆J `$wD-!}ْk*D48(vq[ГLtJ}j8l-k _6 4$+H1?E/;R kGF.$!FL@@d[L:9,k |[6'M]lCNf=VX'${P#${}$L̄%oHr}0$ {tuMuAji@=' X~;z &vbLh]EqڀXoLq70阹fN伿@r(C%Cށp//M͞HZ@\.K᪦N،+3!"ىqKO)WY 9ޠfMjˎ1ь"XS& (g5|]0VҚ)\+ re8!e9@Omy\SU$|2x1VIz(pb]JLK2|'MBrk9)JB%tPŶ+ÕGhYj9 R;c"r \f,E}P4 +0[Bg KFMRdZebm739x&0Ax[\{mלshzvis)w' 3.dFz"[W)xf"n7>s\X2+["*aH"!r#|u)VsAz ВҲ #*t UN(gC3U]$ۙޠKnqs2nym[F>"rIfD1R$ɥ$9nan #^˝gіCFp6vAa\3C,\S]9=+T)/՞t-7!gy'6[A_j0y&/u]m4WK[,%uJn.6/)vC;:; *i9ǦlMjn[6*;DZmL7=3\p^vrv[_bpN$^D04M?C:n>U1Sy`\zE\7 NfF&ښ ʊ92IMݞX\&Ul-UPIytn:G3Кs5*s.4˰JlS*yL+Nse@`R5ic:1I=/§iߙk S@Dt=;,ap#'D8r_s'9~!Ӝ6Ð D7Τ m=eNeaxxёB%ƍ aE[]X-q[4<|3Tsn+rUo ;DЭx"cpܗ , )]Bkux+ ׏rC=6ݴwshBf CKhlm)B':a/eeDi6&WGDFI{XCgt,373$y'(5Vq //xQ3Jɐb}H2溟ϣV{a*Z[UŞ^}Mhh.cr#qwBj2Vfh*}X:DQfA{≧˹=Є; ?er"[>QhVlի+/CLO81n6k12:-(L2QAATtd&>߰g#YҀ5z d|nH 1t2󜺸\t kX~ݶ>RDך~ endstream endobj 394 0 obj 3531 endobj 447 0 obj <> stream x[K Q]&0X`3$AAKN}d7lriA Uuho\~kD#Z!}c:JgmW~z/Hӧ_w:k\}顓%h_wh@6OoN‹qgR=oZaZY pwBNtx [?=~kO"np~@h B\]Z_nO?4ֶP$5`;uT ;u@ +Y?5ޓQ$ǠwұpQ9B2{.LJ C. AO[]VdvDED5>՝^8aHz1[IٞLT1Z ܄QB.4]Cn Ӥ|F&P3Ӿ)qZ;X]1oz=n/¶t7QmYD "5b^E67Qtm(j ZtMG)P}0.4p|61A](T+/ux5k)vOWPSdӼ6h?=hۧ|m'>$"=@E?y=ep$=Zx-a%2@'`o_ښV(*CSA~<h]ƈa$; H2rH3 V@1̟6:uB=3R=Hl@ `\28>5zρ? ET uTnUc کZXXb=*` k}7!08A?1 GB&%JԄy'zP/ ]к[EZ *7Eugc9Z9K5&-ۦPd)D-6ŔLIlTX(QuKM?̥^UU1K,mA%o?쌅pő`)Ej@&!񙋥]q7^JyJ+ۡn =.?= sŀ@/~m~,+UL̯4q~*-[z`n;2DY 7?Y:ޗ]%Pܙ#'Ď:![V-+AksZE#H],ԦڭfvH0fCG'ԁ'K>TY,݅E%h+:X;; G" &4KM%"Б3KLjɭz9X):i3]Q+pԬ1p$jNBM'J#:bneQAz,3TellƁ9x$VYla-M+/=s!/'-Xx %X9fSNL1gq6D3lhj)]:xє bɝ:yl?pKk[)V4DD])>VC7,Ul8 U|:o}@(ޞdWiUReo Vg'rtw(@6wCd;?<ETEw#8sHzmDkI_ıhBRFPCiD˯Io `"O3v\n݁@|r U[; \slj垚/Oҥ˓_ej6Lb'G0CȵoXƯlWhr@i N'ٳ 'Y]:]3G9sص/v@ye\0ĝOpDy#A?Vh `dc kg b|3IᲘ;wtD}~GgHuV&'W$8,fN4ZNW" hN$2C'TܮdQ醾>K9G _jdq endstream endobj 448 0 obj 3145 endobj 520 0 obj <> stream xZKoW4n=Aaw`]I ߧHvNkCWEO~yǛ:ֱ i{au߾oNԇ?;vw7?n`mXon懰һQsӧ?kZ\YǕgQ L ?1-|d#  [ikq~kT/eܚ̲QHƙ o5#f -W\{E8_L/?wW`_$\ v E4zO +x'Wx,䎃 bL pHO4|/ 37Sgjÿ́h?}cfm_@q.)tq5Nz;܃3!X0VfN(Zב+KxJh+* p{Vl<2 I'N5/Ot._G|p|L䓂$,,-Х33\>V d~'>5Dgc1 LOx0sz.WD3B4T y'EƯaφqׇ%֕b dQp@]3:**K0Խ{ $dTPFed:/ 2i<@kPm:^rWy-{SّyJWuBx]"SĸCiO]KktKĺU8o, 6=[`Yp *;{g##GRUUsaŪ?\@iӻp۳|$ 8qlT/2bY6[ꖐFju~λ⧿|O7{{} _.Ư+)aP^-Hq BQnmQ~SpMcvvR}RsGnw%h6 L(s>"8qB+fVۡjRTLMeUQK'!*VzcT ł; FqE٩G-7KxHc竤8OLF*9e(Z^m̎'ZG.{CB)vt e#p'd;^5] z]m )Rp Shġ)!J9B@X8lr#@%Nl\Eh{ےL;}/0`dЁ,q7&q 3|JpZiNNPE8.=4k D !0v) 0QEOpK# K"8|UpL^4xrW\(OrLWHYlz yrmikꐭA{@I47hp.(_=rfF<) qG%A"^RҒ$&%VwZ8m-+SrτJD9X-v[çxdz 1RAU w]C""BfXBH %Uu&E^ .eK@Vs䎚#U[݋r dItdMA:/1t^VK>#h-3< .ZyxV̔sn@'A ~&b(&#K-/g"E`FE0\םRH 1Rٶ{PE%O&2 c CX& yΚZ!P]*L8jE#ߔN}KI6D7wtW*SfGcݡ)g\lO|Q*H#0/H\g ywmmSV5vRJh%nZ6VZp6B6u2V{)},aW*iߍTu=U52vACl+32Pg-Xi+YAas@HȀ;@&{&o唄*&j*kJBY!4"YKzȝ/RTkͤ9ȉZ_D;LLfw:wxQ8PХO_RX&٢:D$gCעvÉt~P Rl6EYhrLGNg@44{!193Ss1?C/*^hpE1BX6k,8,40~C\1RuNQ.|xB"XJ9ujHS=?G;:{4C̲(s+}&Cq>Pt`+pl14W:K'"{E'rEJ$YmYp'ՄâWId3^Ot|9 בPe8/ v: YHp8HҰ z%t(i{gq9T5gy_zՒV-˗4/(*LU'?J%BaC%2 #EuU{녩\#u˝@ȚKT)^"x.].9%⠚zSܰś4,G퐻D(X)hxs%s/1C iȼCjMUďJ~x 61yDa όL!K94:x (ܫ M s]Ÿ:^z6"K<@c(Tnq(9Hp>?A|UcpXuB&OiBTi9Ȇ#oA劥9_\sF=3W>':n*6"pJ}ˣ xY]bH℣8nPK`UGefܸv(VI{:Ү j#=d;"yӴ6` ܱt=5AFΫy\#JL( YV.xX:-)<0ˊ&nI>Nv ~ڼvU7#7 Rltc#ZCs}!=rg v )Vʽ PWk;1QVA@5Q ξOj+A5[nG/?t` endstream endobj 521 0 obj 3134 endobj 584 0 obj <> stream x[Mܸϯh"{HarX·xHSU$%QbSaczZXUU9ޟ~z寯󏗇Au Co@>?燁zw~/x<Ώio秇;!\Op<<|^]`7TWguGtӥ+}ԃ7M,o J_@P}IsC <84M&n >O7q8`:W8\hukl1ly(}#}F $dp43)xeC@mߌΔ6l3MOrxBDf@5fIBLG,hgvviiGYvXYZ^ņw!>^|}s950B~cx7sաtyeZ=`X bM*#xdn>qzQ1ٕ%f|i;|#,tn|32@ȁ6"'H0 ߧأ9P=;Z42;U䰊*o,f{B&zK2Pv|!n:4C"Ax.:MVDxX< TFQd$ E qKԃ֕=8 LHDž903%&Zo#Ά%=]z`z6ɖ'cgw"ReEND==Zi].WthZc߹hÉMU ͣr) _л~U27;wrB ,*SK:wG0T:zU12:waA/1Yie !rMp՝TX DUMTAN։46UE11 2K<{;ʰ;T]X2V6V+[-9d؃@gtfI3@y)^<㎤I!?漤QO3%&4_p\YĸT=/U*#Xߐ54l0)IO0tT/'K~'f- L.R‚ ReC \ѣZ2UB%U_ J *=x$ :W ~Xx7 6Cóft$|ARSI$(+cǂ܂>BbYD>d:b^8J7 3͘,54kj@'1OZ> ;`haU5dBg.o~g:O϶%cqh xaU&=wP =[@>vVN33GjMY~'fjԀkPeaZ PUj+qZ͋ 0%pZJ4\nĪdt0cEJQDy$ q &)'viL&(19bzJhG 1\cۏCJUĩ%UE,2o{%|rWK%>7}7ڈXiY0ᑦ*}y9e)G+p'vn~4[ ) ydT҂.Q MCAoCmKblRyMʾzhU#Fj蜚gy7@rɔBbbB-#}2HW71p;N[^;n4 i }{`Č'geq܇~U;:0uW%ݾ4x=#/řB5UYX7m'6BzUmT'?5|H͹52?{"ћ9Ld_CXT-Y9epH‹C< ZB@bvqﳍnCpfL?S*1M)ϧK |gT*_/*P$Õͥ2g~g1&&cOF# p]ټ//Z7&RK3`80vN$MM OD{U|c v|aooho'/[.Ы]r6zImaU7AES5~q<<%j16ޘ̨K Iє=TZ:}(WF'&T>SQ{Ò7sCT\;{{{QCi bױU_~׸3qkâ83)81w\Unc`*HLbU`abvBgտU$S9#1T2I3 2GBp1,,-NB܋&ZsZے)M)-S/p*c}{>fxa K+!i X8%6\L=N,i':5Wn[!T4DN7ʩk3eOڀ~B`f~Jhju8]56UөbXdh|f0Wr)%l5[;súY@,fFJmU@GPbQl.o61%fE&1ƩI=\@9q\Rߔb_er7:N;jVHu!}_sV$=(0p>;؞7?fk//;7j p:zgo,IƩ,;KP R7ʹiXN8bV`V9q\ixnZ2-w'OTgK3Ud|F3=nT%1󑿐jj],H8N^4!yBng3;`n~u094 씲\9eOeQo4U&:|qUvUq$e/{=Ted:J#^'c$?5mlJ)Ub dP))e1Q@_&tnΘI3(5raIQK endstream endobj 585 0 obj 3068 endobj 653 0 obj <> stream x[Ɏ$W$aw@^`$5CI#-Xd#1Y]+||E0GPy?Vo*UZal5z[upP}yesO?|W><ӯ~O/_^?l9X~?nC]*VuPJ9=nM_ڑ4U ȮF#}zW;vC&*N`W6I+b6̦ɞpB`Kw ϨqHPi@V5倾H@?W{z_rx`!%h5 S(ie{:/`0h0H*e2xRP#,UPѥ-@O#}mnmd=o-Eh2]"i 4AtXZ5:]~% $j@8*0K6fWX ίb |EuH)S[u8|$0޵ȯ^-¦UG r.D<rl}첼eb3RؑQ38ޙ\Eu~!SΛ( Z_O[zxG c@yS'N3sK=zQ'" C9pEʡ+xHeu\Q hkUyb`Q[ٶ b U&;w*een)j,#b@#Ȋm&&y2 JUpPȼ&{7p6$[e)tT M%kՍĸ0e@d U䕜iG$q`-Aؗ//|`[Ȱ()W 6Yk6{)L%\i L5.[&9@6-O|oaGzyjF@+!fA 0e!+KZ^ٴ]T:hv]fR΢>ٻLqeє(ISUզ1詴uu̯v EeM0}e Fs6[KM"ᑌX-2;9=P>%)v{mKZE]HQԷ{VL?3K@*6kʖTT:*wH&YjSt \6ze̗bA6<Ϻ>0H"`M;q h^|^t:%)B;08 /n(? ۔ ׍{3wڨPk5 <~٢-Ҳ ,g(,乑-e{MڋnL6h򅁼04Yu"6&F(<5lU,¼o.-٘jx Rt2( ,犁V{A&].N&\v(yd'@@@˦xQ3Wf$6pE¨:Je4tE;vå~ڪX]Jk>2;?R$dbt~B%&R-{>~-n9%a;QGK-OG|5LYn)}1]$o$0{KAtP`'A͛NOci`Z] iW|"]1U4?9 +Xh¿]D߇\ɘe>c0c5%ŀ\9*"5 Y@D+ffTw_&iP^vN{ЂL ڦJ8pSE.(vLYh^Mn ĦwK`(eiJg5.?;чhV}uDY T;V GgF$݉;Z:QI>%'F鄹Xը-& Κ$0NCۺl q I ^8R8"۸ɩѵ]uēh@TFQu\/JE D{džK.)e0tl1*uC:G Ya{` eɯg@̒uU $4Ŷl=hsDAV[N-#:h~֫sMŃL` m|0ك=YEQjwn31ھX WZ{6v~rdWs]XSRlZ.KɧǕ)^h')ff\A,x\zMR&K6byX)^>[Ť==IoThxnl>Bpn•& "ۨ(;p$(AqQ 'Fm r%$ 8CByM$ ?+enڄbm˴e.F`Hn_K,;msGqZf'q vkBJ,^n45FOs7 F+DInP:;hzeVTRs :x`@! [u؋b:h}˼lobZ -۟8Wɸ{:Gbܺ41 =m7 MaR+ݰᐃC@Ǻ6<^I~:S֪/9fhĖr$D͎i`2!A/-mv R2sp/ei-hź@j[-5ݠAsN_-t:ωe3<ǥy͚fIڴxU8dY5l/vfU*vlTk}7WFF:. F/31v N Z*H#^˅iNm/*onv endstream endobj 654 0 obj 2856 endobj 782 0 obj <> stream xZMoW$`()`Y9 r]$;d&>I"[DIdw׫WmjX[yjcOe*SNo|WQU_VzZp׻ݏퟷl'ʇ:Uɘ:}E\=OLkôacs[4$yCw&}'EG7_2[mvgµ/}~ûOOT9*T[-r GBndK({kZb'܇7p=A[Do ePGcwFm)s_x2E|(<8{Ь_~%@ru ֑\M2a!U?`kfLMmY=~SObbk7 ڭ[ 9B-'sq&3R؄l!E*fnUέOP''),Oڠe;% %euՅ  ! M%_e/=g5YX^,-s IӨ<ϻ# PjeXKG70nf5"@ Zy+npm ؊MeI'+c@lb[Fr/X[hmf3 ٠` FK"t=ZoxHbem4t rX"(uu38 Z"Ψ]ҜI# Y/y'qR[@W(55Ж٠W Ш0+yM,De0ea6^yf {;$EM1f2#4IR,3mZAԐyzrTlU>XU@\yn|1Î5Hhi8!_Z@i?I-e6VPA@^A"]6X/J\;9(-fc t{!BpS +gNU2ĎxZ+vQ"~S uT8zCr؟Кj ZC hrb/cͲ],9$]5\>,іR?3}e b/*kKCOהS ң,6u=snf[]︎'T!((̺r"BΥ*w_MKN6ls&@2D|c:$SFn_{&`,%׸DO&CNjq힖|?y_dfn;ɍL~IB'#l%(ݼyu̳\J:m\`Aq;~)PEֽut}^!YY Z^Cx.!qa_MFY4Û *d6O%r-a 3ث3KQEnC҇UdmFCX덠7#Z.AZyCN{E8 %j&%MK,PT6W'&_`FjNWQD.APiӚ [O(ӎK܍'y2E Dq"ϲ{nBbt{Bu-\c9bΈk>,.&r"]v;3Av' :ϑQ^Une֡;قC㑏&m z`pe^aY>A>y-Rp1Tm[)iBf+0YʿlitwCj3uF"10$=/ѼLϲ%')j;@ vT$m \iOD@)} ʓ:k:jk9݀ݵ^OvaӥP(r, ʭ/EEv9*]IC &^}#ΘsR(V> stream xZMo6W[hXER@$#!!dvb`UQ-vzޫMI>}~׷}s4 _/2VT|y]c:[3*|撋mYٺ`%l=V/^Ik?=ooaQ7*t]CI.>CA\<ܛDREda:RKY~wtdƵGCxgӚHvVu,öMӶM,t|_Ǫm;c>͑*$H,N'/o׷O vaB*庴s)={>ⱑɑë7t 2tl͚ɚGආd;o^U2sX!D^]՘SC2T_ZښJeOB*o\i!̄x^'h8Hp)+$%p"w'4o:e^~:p!Gƃ;bXbIQ{lVx+r.[rZy2A?dӍ^Ρ?IIA7BLfMZ j :7>%!)R~AsnNZ#;<rl6 E$I%; Z0ɜ%5rNyH,r,^|)_5Y^nu4 xy9}<6pa/.ѥۋ!ҿx}ν{˻^t"0bMVkZx,W\GZ7>KtczDY$DŽdvylpT.` ^J '8pM~7֬hW3LNCI_Ardmi@9g {z}$^RRl4BO RucS=|ud3yn1jt `H(;$]* }TG8*m>+&r͵pmy.:PR`OLY\*SԴMS$l^{tUO%ZF=9㸆=\e"U.ĘZ"Չi? ͧg0G|gǥ\rgp+1LP&XxrW{φubVt*.}6$M ^-?b%$^ D:%S.7K7$/xu[ɅraVbP( DʆuKØ9rǏ+nin>POʊxSu]o| x=MDJ)kҫ K XQ+-#lLe+>Ž$ 1F}k˖2Sh/lV*HlTxI#,A|ry ոocS-B`$/EnGLA@()g#] :aZ;m[^덓 Wy5S0R##Ζ8XƵ>vpF~iLm@8ӲFt Iخ+}~hʥ(|  g2~ 2_{3m -ҩ ?J$TιB_j)}wԚAc3bBh)s^`V*@ L}Ͳ7Y/jxyE ltJVO}NپksǀYLGƌN@]0W'IZroW.KI`K[5Pxg:A̹[b!z3$aҫB:#f)vJ˜z-G}Uze@WgĥĖ󒍧}n PߞmZ==|Eו{u[[%f[l6뷷B{+S5T_€yxQt5 r BH4 ||YYTƲ42ɸY'=7Nd Gis (qU6 OONY\Uq|xPueäύ6 [HEQHar+%^[Gi6JHc'߯[ I#爴E%ڞҵh:*;.i:>t`2Tdanm|ݚNSfu#"\PĹ~ endstream endobj 858 0 obj 2183 endobj 897 0 obj <> stream xX]kV}B3s,Y-݇CJvY =s%˒-;rbKhΜsE%.ޭn?XTT%WJpE\F=TH& ;'?/R*IXW)mky{7낮uLަZ$un b{Hɐ໢=mpYWQ%Wh/p٥z /Ò5xT6l%)e^73=% 1k[3vMa9F̰U6W_LxVJ{RY2S/ $eB3lH'ˉWeEg$s+jP7X{y\]P_+L]659f6+zXFkj|zK Ey u@Ꝕr!D^PTq<+i-ɥeg,urՄuX8jL|4~MB9 <]hv?x}+Md&}a>|%Gv9j6#>L#D)JT;{PNh`mcXDLoj&o?~W29І]چQ@8%CG);U.7hk7aHHѾ-/eoY53eT^BM j~ +LUVԛg5"5fxQ`s%eflld8mNag>,q¾1\Cezr%1O5i5Ժ:kpIVU2vgskƤK% =4)Aӂ k\A@k_/T!O淃)P{_? 0&S-| :i>CgD>4b:V_lZ7Qا}%K>|(czװtvcWuFr@;Ŕ oCa/fʼ]xٕc%ɜsaeTa<&y^fZwy cnaoD(5|hf0(9 3y|b3;y^?AsŇ k>,DVK֚<?- endstream endobj 898 0 obj 1582 endobj 947 0 obj <> stream xZۊ$}(7j3#0 tWW#A0ɻ#VwjDd=2fTeefΉl?w__?fCF5U\K56z|7?Ш<=BQ<h}y~yT<ӻμ_//__umD-nivh㓥^+J / -WW,4,??GaI?baxwFdTxS=kWX@D؜]`lLjHҦuj^YVKQ ,hapQieughד|wĄؘVu$ʥQeT`q5sT:tVB*"m )o+G"ŨphZ6uA<(GXx?^ ?:|9㨻94y@v=d 37+wT_V71jM]??r-MՒ@et4[EZwH4|lgQ x#^^E >~~a*Ca?kUнf0Y(>Vt A:IXo <l/3|[I1Et+Y&e=\+E_*: !\H]AgeHB/p< r_ =d O<ZDy5OjQԬtBE- Hk)RvcH|$,{oNjJ5:%VGTt 3qb, bc6yM"K3KxI"6K|gƩ)Z(pLKvioCF#$+:LT6i1Ye$dA.6SU| 0D\a9L=)m?wetL .A  [%OI2d\EFT6 #xL(& `ŔmdhX"qCz5=iř0kz@UZ'KvmzܟRVn KLR"m-L>)T*,65PfRsr)TZB:q @`:Ͷ-YRC[gm&C{R|M܇cŏ**n *yTua>ȬH8:Eo@ moI=0,]wU/듞p?]n`ȟKFc 1(EAGer92h,9kQYcM %=U1u pN'/2= }:'t[NM(^>qPŀmAnЏiV~rWO: .b%ԅogk[s \QxZdh6"RVm[?C!nxHIBn$I6*YmCa% A)8L##'sIwJ ִv(ж52"I‡4n Lz$)7Hm㕧XR務RSnDT,7@-x(Y!U"ֳUcH&r@|V"hl  mdv*q Ĝ%/$y2C) !OU{j .LR4 I'nr;sQ3u/çWsA婃7XՉ:` )u2sUΔ|L9wYL=u;CBsɕ#޹OҞQO,˺*T) a)gC '@; u go;f̑JIvsTjQݏb(ksxPXfE^ugxiH% z&J3> stream x[I(m@x4 `@‡ȋeDdFVEE+23"Ujݿ|˟Ɵܩ;ܠE C?>=w3~:SOO1}w!Ŵ{mv`w/(?GO'ʀxuԣr:=營e{Z[Ԅo~Z`_V/|- I-Wvx\@$,w}🯸ݯotsiЅw ۽ tPFGux2**xvk#rwRc<*E ѳ(i=I=8K|K$,wK7\g9|L}ׁgd.ف˦Dɉ؏"))ꈷ-x;"Ka(`5|J:gjvzO"7AE/PG\f#h'gx2i6D[&:z@jL>F˜ Ю"QvhǏV җ\8M_o/H6* < Qdn+sx&f|%;?D$  TYܬBt}2Cw# 4\XH P.Q{&3ʂȿ$9Ih|>KW SA&Rg攭|ND`FAs ).,6^0& " ؂DmE"bBXR6g߽CS< h%Nn$E I2qax#dz͡^^{|CGӓ_=A5/؀9B+_p$deDaxѕkC2T@ w g$|d^i*ڮQyCdq4Vx}M!Ne 8啟l+ nƩO,U^׽b~SKi;Y "iZ@ot'p! 3QvmyfNفA?,52OVteO,9f(s8sh|ׁ6lG ␐b7ظ!m mVºdd UZPgV6 ;q<߃q*;dSk7·^A]*՜|=}w2.BO[a[-ny5GMn53vU4T Zȴ4^ ;8fAc n]b'VvmY?kKꥯ`ns>eNΔݎGP&܍6UiվqKm:yC5uLZK%G4;a o"V;;xsx'J:1@,~"qQd]Em"gI&}˄Ю+uGkF">`.m2!*-%'X 4Pc'I9Gd O·gb:{ -ط)7!as?k}Ksbs_ ?qazc>km5*1nkZy8.tfBIZi̽\oPQ*,A *Yj:8!0E,@?Ć^E,E8> T<*9rp].jY'>V8p |u.ҰQ^㈄q 0-8IҠ)Lok4YNP#5XwkX쫚yUujO}OꪑJզ 7Bخ;fÚ BI#>*+JV(\.KfH<)=Z%qT0Iµ-&X:HÍ #$̮ȤG;֖ uWgNpN!T:0laoOkzKO2J) ęx2@(pj;|o@ GjK[|452c(|C/@r/-g"gaR[+V_[U?_rHBZbAj9_RO$f)eЀAPF *v9U:N#&b#@v'S\U?[Qʼn<5gdI<7%%+ykCՄYޠ09b_Eg7;Ώg[C5!TuZ(||f+qo>\fK%dƀiO:4ѾÙK_J\kr]u1 sAmQ/lRn"4(fQ 7\-XPe|U<; ׭hiZhKvSҋh (@Q=@S Oq1w*c,4x.+:f.NS;+JXU[+!Ej/6]N9-Che4,.˓,<v;3jdlPˎQZ\+$>h@]t[H6 /iL"({V4VڇT}TcȽp y,<װ0u s9'M>rx_Ze-U>RKczk\Y :S]P`$Sp):$;GSfqMi_l½ s2Y_T+O՛6e\CdXC'EʭP5FKI%9/k1sC͢Ր2}[gQEfiv?!v endstream endobj 1003 0 obj 3272 endobj 1079 0 obj <> stream x[Y~_qokj_ I y`Ǟ,6 $9KU$J5 aj+ٿH wOß?.O< '=#O z>ďw]~=kZ}ՠ` !ӻGD7 碘EĺL/14qCbtDtGx- E5ʫ'F*d UxP$؜͛H8!<>0P2V)}~3kVV7etPrp@8Pfw fIJT3Yx N^bBR R?$W: /";"ąݜ/`3|('f-1sY#5Fv.pg2d4WRJ}N23E)eߠ~BWB 2;r%V{yz0NVT^XZՆ,5kn] "9d:'Bu*$#XTLՆt&?r襠ˀ"E8AQRjBX@=ժJu&+!݋" ~Ib ̦T,){"?ŃHOվc lIO' M+%#Jù_Vg[~8ɉNfk:E%e|:!;#jДm72 ]a: %  G][u麒W%!u:4k 3thwogZU£c D9Ird301M9ϺtF[g_"9 v991 {J5B{*\KiԀ@MoԮn =Џ$>ZYܯ#G3;by^Lm̔Vn~j*cSqJ=Ճ LxjVJHTvXy~u-l]SeJ&H.&L(VfAʄ +aGd/*<#6L#7'Vҵփ5%[#N۶۽/k[3ڈ';#3z_=|;6@6TZH*`v&Gwr ̓Y+M<a|3Hs(y% c@F_@C#oF\j+8jO\ =`-QS]@~v* WfcgȬ3_?MHL&R?*VZWeAjr.rpQ{-׾0ύIK IUcFQ[Sn5i 7 N*IpvD ̋ J)S #-U5zpZ nۤ}Kh <Yˬ}INk QPD&W}iϬa8wмX73{22!{UU{;$փ  #}v))2!$C ltI(S!`tсSg1KB',uMlN2 N5lih_̾5=T}넼jS|ObV 7wp.V1vz*dD3j(!\1]rs&JQ Wuhk'UWFT(F/ca?lC<*c'RZ=LAa9z(fk8.=RfͽZ_ןOiƔ>K!Mc8މڴZ +G+dr@(i),]Q/i endstream endobj 1080 0 obj 3709 endobj 1131 0 obj <> stream x[َ}0o$JBdh`.|_/O^u ?zxw/6-nd !s_xh [w+!+BяU8BwB+کZZ}/mRBFsx_ _&3 mfBm[c#a8:ٟ-3t|[T-o#7BU8Ɛ)#߄pw&3;[Bc'< E  fT# X͎EŅЧl28QX1) D3步R^#K^)o)<J[㆑@5ZǿO3Н{/)m}ߢDZÀ lWlg՟ࡴ7XD;y)$.$y ˊ(Zڵhw-׭zb{ljȃ:S)AYj}zB NAYt 2*Ux1t;Q>VHU̎?p!Hiݓ۳>T3|/%%P:ӳ:mF0b;v`F0^T]dW: '̨9Z&j{>P^f2rFq#) = @tb<^$D l@-d@A!W0_?}\鱥31!E^ :V Xa05 םX,` *,Y5 @VR'hߏ&U#i-us3E|q׮irVND((˩#b6I\/%52 ׬08yPQH3=+|R#k1>dlIT+s4E;Ck/Ո˲Q ١b,<9 ]66~epB[B.bJ4WMC 5jhWc%x DQ{ruSAAy '-SB8ԗP\+e+ *;m֍8bЫHyׁRPuYw*GUI &A'F `vF SbET@ ey*#7t5,h%KkM~3`·RЛUM5 k ĺl0[!0ocqW^asa> V3n;B$ eW"P<#  TW#&"ܯ)0L"0Raêp۴lĦTXS)}e(ʼndKGTn XZCLL5iAub}ӆ % )cT<3]Z` d5'rUަF,b4^A 8Ba*{3wܒ:uFqRGx`zvͅ|i)K$cK{&x@Y {J>Kc7*.W{9VR{LFw& IP^[%쯪ØƮ)g^['4JR"Z$Em8rBjI˜=ۨJ,{1gΏd(M+k-u,X^ h YZ3~#RUxV@lg/ڳ<ɯ gR'*dF*9cX^#]e]i,1?r(jl@oCd&Mϴ f IbZQݻ4k`*@I5a{Bu9V&* OTJrSxчwf/w4_ usͳ#f'`d6bSG3Slr9eu۟,y*{-ICz47Ҙzv:Ƽ lupe\ X4]lNi.tj=fR0n(=-$lBv$']Wr_Ņs7Ư8k`W=mFi"%fUVCWAݰ*h[!bI}J6)qMnj]R]+*)['롡.4\zޑpK=otlGY y[{ݤX˭i~X i+jk憐O ʫi)լYi)޾ v*3~ָ|;̭xd>œ6u bK1 J_(}WDH(܌Ƅ:&aZ!%tYt*=a:o$J 'ӹ+oe{ fpj(PN`*\mwVǏ%oD;d+$I W'7YJ糘I'J3q5O3BFfx*"W^cU?&s+ү-V rd 'C=urQȱ8J5 Sj1͚oԡQ0?9'-{;,(#cu6ݶI p4wY,X `<|]f5ÕV4sGL!"5IךW)}լ NW/WiĬSmI=qK,*jgjM9σ ~ 0ã'=ZL.Pc8/pQ^9[;F&IIRaFDtdEjKxxJDu r;u}--5*j3v7krܾrQx&Tbtiۦ?ئ_Q(K35O\Q?\UN endstream endobj 1132 0 obj 3475 endobj 1188 0 obj <> stream x[n#+΀{nB$€,, &gI>QU.6"[sνUR?NԠ \rVz'߿viwǧ燸 ).Ov^ikAmQA9w27?Z&ԭ CĽo~'9h_8n9Wot\NpSMk|lW[|?_pE?~eE"(eE`qkPjDu&[+p}A+z_imy|W3.P:kD448=?# g#Ckd8- Nc1Q h=zBܴ{LdQpt?F,6^ д㵁HL{1\ǔZ\]gܪ=uĹN" 4NK65.v4ƕ_IZګݝS3sF{f_nulCʈ!ǏK-BRmZ՗3_#+"KlXmĘV61 fwSW1quQˁG1By2d:8{#WtoZ:t+h+"gMEth󈘒auUۇ{ 5Wb'3M$  nWLW_3_u1.30mQT3\O"1 c H2J7Ăn-EY.aD!lnJ`G40Fcoι-w8؇05H*(±N, 9:LP(D8DH=v|KDJ'1Z%(#K9&T2Z/W-,7--{^Z¨(bI!\M_q1\7վ5j_NPχr_CQR.`X&nD+/Rv & sBqb_MU=Ѐ! >Z}Wi`X"L .**&,m TVE#t`ᬎ\{MfKI/D*;eGWppy`sŦEaJ(l ^EK:MµeFlD~VL漜7cJCZhMQ3î7jU"bG&8\%ְ6g,Hҹ`#nY)~qq(-qtLh,'׃i s%u\1+iך}[MfA@N('A2{ \`|~b.(z$YIdBmb1S:U0Y Ol(4'%աapvᜧ8b8.5ҁhXCk d9 j*w1::Y?fX<RF2r`9##K4MŹ\&8tպ8t$:z\Li{fIӑ@AAHMXԳ&(.d:mH p1 엛~scb_2wJ}\I0(;I;DjuH͕F d:ȡ:082Mǩ6 2ʏXY#䶔+EhtjNx7(c"=W^*yfM  2 {fQygm4h[әbtcCך 'q/O0&E,'=FzY0 b|NGpʣ6cSH}Fr^|MƖ*M>^!p)q]6:KJmQ)G6A\~\r9`I~Iz 'Wfn5Qn6IoR+{nY^NÚ,*m2Edjה9:'0ϨұD&7-!Dr* Eڎ9j0)˾&RQA^KҖm+Ӗe;thlτDoa /t1#XM-G;jNElYyU3»ͯg?4$u,b@OʥWuBstx8Ŭx'<# ԚY:s^S Uy65;TG[ [κ5X+"E*n  .0;/-JK,׈N*,qp(p9]ɍ CۚB$HvJe8'3vMXmo#Q A Ĵq#Y#,3!9|JO6n_~X $m4zaP@VƴX}PTK)wĹ9CǥjM܈] *>mˑ&:M헪s|hOcvеvYmrUgs*a:;ʙP+tcƧ)V|"',VYvIte9 z앛cաQSXPטsX;b*`Q tW,}FU舝;@Nޏ5`\C{+ȯBV8Y5~B" G?.z)0K Mp)=tP&:w*GiS ySW>T|J)_RUtm#HKҌ}dڌTO 6bo|5ENQus 9:Ns:|;.7wݟM,gyHA!e9Poֲd:zSKQJ8'--ϨFW2^2>.3q\F5len)"78 oKZq,r.+5|[bj`pMpxj@?5|Sd0`(Lct{1tyY&)guk2VRPGZCff?mjd6/7),0c_Cn*03=&]K7 [;LbΘ/p2ͬl$9S]湷I!#H=Gf3\_ȷnz谙V2D2"a*w`\ ;>'w endstream endobj 1189 0 obj 3264 endobj 1247 0 obj <> stream xZ[~_!:}UaY4?pȃ{CCN$[<$FjUUZպӇ_~vxG*U+V>_Nm??}uHw}x_2O?÷/zy/i}nnvO+4ʓW#i7K+tt[KSp F0uڿ-(xR"RV;5Ӵ|.r+˷ٞczKZGb\'|=ИnbAxl8\$E|d:bѦkW:zl%ʁ߇# ]I1,w8(8Ya$:G˙Ȱ & /]ӖAx6&q ZU1V,MFn!LjS5IF_pk[{Oezzۧ_]i٤2/l*\J-JaD:rV5E(F3k޼YɘuJI;vuN-;Ey]bG#7ƞVQ+EۍbEGe(: eA.]p7(džk tØ&C=ZGH8i3,^1 &ٕ?NmNKnYR$o nnT'ZPk[# ^u 2守T;@5E):>X>KO`R=Ųp"^29 =Ǭwz4JʃEk}DVUs?! lpB#e [+IZBE?AR=L]!1[UJEj?ABS}e/od1RBLC"SR!7NtnJ a!$I9a2|}:X]BjF%/)Fvvh2xT샎 |xݝLfX ZgڊXVะXLH)P V5{~wE| {K4S^Ymp_Do"o4Ḧ́(e0&>D?u h.:PۉrztH]tQ^c.i;Q^+3udkuz:6wA2jox[ƛNRǥ SP?e 3$ b6d}s%z ij{b፺We-=J⫶X.ikW4T@>d)m{_@&S]l*7,^ D'+J`_{9ۃe]b,dyeDn /'>LӘ^籡47.VQ_ .¶s&9`LrxŻ4 I:4Dvz̼pVc lvT̡˧n)CPv:C4 /$ݼ-nS7W,s2RN8qGm\.T®>k&(KѺ +i$s;klE6C>lcC4LqNA mGPbPI~s94yҕ1,5"u.a?g|햣0AM=/Z9ܛPڭ'/]%P(v " 9dTc_ BGAa&P:+aT'&bY7o6C|v^[:kqb{!'C+\&Ze|8T$5d>a,:!:/~h֋SiAqݥqRE44LGy?_,r/:Z'Hp0栎nshX9M^A#C%:ss}UZKM18>c`Kِ%,Vq:s"KڠuJd]yS6ŚW4LF9{:Xu9QrXw,f4 endstream endobj 1248 0 obj 3025 endobj 1298 0 obj <> stream xۮ|],n$iЇIw4ޠ}g.4Mɪ2ܯhӗǏ޿oݷ? ![8||iPc2q 1=47xOgBx_>_o?;E?eS+/Dc}{x}sw?g@@ .t3>GGw.Dڂhģzߎ3//ܩWp@ (=寯_?_KO烰 8#> DJC 13GSB@hphmD N`DrGC.$!&.HNt0+r/d*|~q/?ݣ=>Xъ|xKT ypzpJDq>-7ΔhhrDub`"]A]#Yc /_C(bgu5 P[\Sa~/OUfbuڋ^FyłN4Wl2㎶ y$O; d̲6ͬA=D֛`IǠs@k/ wK`AM"*Z3k&gÎԥQ Qiĭs<# KM1U:pQ\i:"#Ȥ+5tp)F Tm$B[ͱ!wsx6q h4Y>_߳|ޕh3`tE<2. Dڛ!Zeb0cBhv oVPcٕy]Gʃc8a<ƥFҗ[Cb>f bVH kA$YA# F[&eiK }h.Ǣ*RTH4"nwDDqY?ԫ M żEC{O7ǔŻ-D[*L3684+PO~=6@_o캙jh F 4S [ J2^T\)> 7#Tˢ#[L~0(8yM,mӢy9-~NX&!0>҃ ueAd*`o7J3iY H.IIZ̨gm.@TeHpt_Y^!'qL o s?y0>j=ُ*8q-?Ғ41s/9HoJ r?/@#GZ}05+5x)sOs/w UۀѿC)ab{X^Q|&r<#+YlO𖵰ܾV9}/$WЏGcsJmƘ3&ܒT[NHo=ߊ6b=T~ڼ+3_3p,Z$w p3#E&͔é}[PK ̔&q@aJn]p%t+΀ J]ЗK7yK2\>vjeCt䃦|9.٥svl ͒d-:ɦ P\3uHM&Ni5\4a*ACl pT\3uHMA)Bk:ɦ@q5\4*ACl aS\3uHMABk:ɦ@H6UHq5\4$l RZs W!M7^QR\s !M6q )f&xޥ )f&ƒ8X\3uHMtUJcSTZ<]5!??ô endstream endobj 1299 0 obj 3886 endobj 1369 0 obj <> stream x\[~?@DUln$iЇninH;7IMQ<{%7oHiUw>};|w|NTL7&]t}z/w颲ѾOxmv&njD#}tcs7]C7vwwXlR",@rItP]oOjClwIthmnM>aԏի;ߩC/A~/ORM˛g Fؽ+uPGW+e6J;:oߞՖ54 jNҭ9z:4 WCK/4z7O3|6+_~NGEwyн^.id?@ia{@њ^yU |RPsd:SojB6I5 dθ:MV ψ8 f'G4-=cA3sWF7;YĻFKGPp 訍6/J{ʛPM(uTm*Yv ӒP2U(8a \cԀߑBWv!e.z-uM2mWlIf?]1kh` BZB:bF>"1YqS0G)G(bI]I~kb59 iL9XMUxXoby!33yb|=0Rɞ m`MTj(9.@d#MVsW‘3]yd J^NaQe[R9D 7jXԡ=dC:x݁MתAkvs%4td`\G 0>Xjh`S_t`ӎT1Ʒ50*ZP`L՘cPK:&A'sED\I~D{e{ΤU(D > Rd[sOf~%c r{O]Y}ٔL@* S.b28K8:|klqJhtJh_vXeulXRuLx 6*FRc GW^ɗvIWT(Kӽ>2@ꌕ$\ UDŽɴ8'j5[T*ޖPiWIG;ʇٜ9c5:$lWi6y}>̿ܛm2~-bm ,Jk!8'eJމbJuEw!sNʁJ6(:)ZOȏIDDž#R7PႂQyM@Q#̄:`'r~$1DOͳ;2w @D$I1:|EtnuH*P>(0"HSʢVݺ`j\+7Lceh`T+H֠j4Ŕl::Çn]%~7'@=Z Wh<ZWKC Y⒆G" CV2-ǜ#E5yQ髎bqp =w*ۘ02GDI\D:#hXq&GKt ^vT6`*dB.oPi]%{̫>,Ʌ4c 7fV:8h0nӜ2 bvϯNvYC)=U#y]L^ђ9w /Y[\եI(V~g4]XTH7AA[Iv^VJړ)s|]b@ÿ^*!V:]PZHl#M xK̼{V3ɣ5w04G#JU9\:wr`{-5hLG+2q',˰t:N)H{isIǏ߼_Io~8bnc9S:f(pRi&;@ 1sDZDra('Ld;VN܌Bѣ+vWahWlӖ-ĉLTJAJ$|{?|g;P!{g4֗ .$;B=9\qjM7 =Xbaa9i 0C9s>G3o y!WS |fŬMhv {\| $6adNxd(yڻ' YuqF2ŽbS$"(9O+ln$sp A`m­hLRXc)B}pVZ^K`o,~%@NF /-JH#oh?K#!Nz⵼J57Q>'Pyq<8{ʹQcb:/ ئR6]fֹYxxēag]s~)^[fY=Hm5%ᷠ1hk FY-:7\L+Arz֔Z!)5ͺ!P,ϰM'o|1Rr 1Ә#="O`$'?& -*7!߭!8uP[ ྚ1i$_\TuBj/'c"zб)G0Z|Ho|#jf zB8AB#R~vL|a #@Hp<"yv3DfDC "Rf@д1AQ>@[Ced4v ֻ=HNTqvZ:| 4Ξ+*lO3[@gKcP9Jmr((^(ݹmPzg0#Cy3Za+6VVƝ~ޱ 6׶}N }Q=ENM dm)F3z d-sCcBik @&o`2 ;. cM$vײxRt؈ vÍ*$NQg8ηY PTs՘~q3|`s{SܬB j|ol?X G1!ɓ4dH 7? z+hN~׀;~B W?~GtL"wRa,6ZKJ: ҋF6Lr]R҉oHIP$m.交5%\tի%\tFPUIIKJ: !UIIKJ: |=4dN|CjUd뒒N|#IKJ: !UIIKJ: /T%IK&.)7U%IK&.)7 OP$m.交ߐ*I\2uII'$is$%%5AɭIumkbe.*%B,ԤH\hUJ҅$U2j/9rd5i&} endstream endobj 1370 0 obj 3638 endobj 1417 0 obj <> stream x\KW &199ؑqˈ,ɿOr` yKvU_U}EG_>~z~:AQt?c 틿}yW.)C:<^p:<<Wx4¦F1rʀfI p跉6v&z-"L&&|R+b8m"'2c&™|R+>m"tOjeJ OZOje@#.ʀ`6zzwk6z6iwk7zVawwns'ͷAmlmtlN`Ys/z0޼훗/燃z Y ~ _ )u ;~sQ9k4.KU.EGiT]#~v%AK,x߾~Cahwh"aߙ_Ի_?|V?znȚxi;iOMd:}~>r-DJUD[a/0`,^>LaWLh4úݚ4ș iǍKF%Gon`3/og%CsU A0LLyÚa\.~з{%}PV7zku  O  9[@F`IxP65œo'X `Tr1[en&3:"sN3^PUҫh ("]e˵tUz1e@=[ox76|Vara5 p9Ab&ɳP<~b:dRAb!RzY^ /,1 5 Q9M&aBxs.\x tƺW0ք}ÿG)S:OVL?DS20~z`s¼^}E\l ⤤b0]T }.J_}ep ^ X^l%r6)[eg9박;uH!X)ˤi`2eICt┉C1N##4N!$%JAv.b2)KdHK{7U̝TB!)bI2UVoQhRGQUHg-Aİ ˖KV?hhuGPc@l ѡFD:a+bjvleCVWv [q #!={Qc(oQKe%aMCT4b=DePȂaɖ,Gʕ/yh2Akh~ L޾1@1QI^0$ ~R$` X`P~!E1ᜳFac@$\!q0"q$L)oVBi#KWYZU4 ^:  Qnxzh>hϦ֖1S>f⑎À1^c(霫FC 7\K%i˟! .#wP1eՅ|ȕd }hDmlMrG)`NDŽ8bG( 7v'HjqOZc-cOfgգ;_͍S}8=<sc)$-#_6k~/tCDax!Kp r ^A7H @Wv-gr%x *a{.syw 8ʜAa+va+,k{m7{ڿn~E Xd!#]|,,b\Uc@'#vH۴={F;|ŷDVڶ\)32n{)iV/$e/$<!u%YayM @.<7LJMlZl%hOCl4`njbF #IvuEi2"D pw6$6z{xH[֥r7l%\".Ծ<3\"]x#0 m{;2FUFꚭd4 0 BB, h{rS,`;WbʮIH6JGp5lMl*f+Ⴗ\X^8c&3Ƞ,Sr0<@9׾Jh#pObƼqG$4l%#84w/8d JRs(߆(He=:{^I.W@Qa;@_lCWiv9u Tظ1ָ)oegl0; Ljumݱj`gHxdh<40[f[+R~r+Y|RfnұzҨ46Rl%$U=m7w$<]z1Sp0t!`U m% M..*cﳑfqB3i> i qJh_N@E ۮ]`Cho#[J{Sjӑ[b#VR1\?SWB'n^aCod_FMh?$cNa@blbGȷxljHH!6hj!vj˕<H@ 7G>C:~jivG؝3!5r:X#%u))x66J=lacl |u<LG]]ʐMg7'zL~}{ЇAq v@@QCAi;}j }<.i6#j>}&*i>b7eOIK _$}Lr]l7xO!UIҧ$%q|lU3uIA`mGdgfAV%I>\4 ZŬJ>}&.i6oɭI䪤 nHM^UIҧ$%q\J>}&.i6\S$}Lr]l7=$gfA&gfA.U%I>\4 kUIҧ$%q\}J>}&.i6 5 }LrU|7}U3uIA*交 nϪ$gfU13uIA GqUIҧ$%qI[3C]ҥ_JJ U5)ҥ_ J Ar/V̆pѭ/knIl=%2OU*de`!  endstream endobj 1418 0 obj 4317 endobj 1494 0 obj <> stream x\Kϯh7& g#>8 #;E 8%bjΌ$X*j?}~|?>{'v*lo;.'w>݇Y{A^Iŧ>XMtRtd肅w~8h#N'=dW:xy5NdJ0}\u>ΕZ tz5WjCOS,B;(:?ufY!ubfчYK'H{BcU}w.Xiu|j dI](?RN<=NH`_g=f]{~(ډ2(Rޒ_z\Q](QwA\gy'Rѵ r/m2_vVyp;KW9 V gmw!2“YH+WT:J&  w؋^;qwmR ::O#9>r^i70:X'y6i,|~#y] w4)21зooh]^6o۶s4܀n\#.B`t + =(D!WqDoJ-`D# J&f{#lVƵΖfS8`Fmɕ簀ʇ`/)DȄ)W< Cι %Umf2j]c^з\l׵@'[Z>򂌫WB'́ W H ́`*)bv"/m3A&!0^)Lc} )b9!14x:@GͱgDdcrkO R3HZ xZȍ} |Yxѱ og ٘~MP2#{ThLLs#WhH{p>z X1ວՈ[Ip~rrI<''v)P@t2DNbA)&V&0!eL):osG4PW(hZ91A͵LWd1p bp~RA $ y2i95 Y A!BTH:UG[2ȸg֌t3KlCב>=j ř=lu^ ]w! |A/_4 Dx[7}LJ?=L4idgx J=a +uČ$u6P8j ҘD%߲\tdU[kӸ5`UR lSRF)1M@{tr&q5BP{ {Ͽ33vvN۩qqɇ꨿ ޓm>Mѥ6 ?|qlSUr[)(]~K>ER wC3᷁G5V7NfT|L8T \o3Û>}3JK]LC4X -P-S(%>z1SF PPx@!.i4N o;nCGqϬ%pkzXp鱞9`)c`x->g4>8W$k1Xlz?"I;-AخuN 39lT#O'8gtvǑlcda'dnK*`baSA]\ҥMJ Kop {YPnq,fv'y )(m݋pKE4h*S6SX`$$|ڴD\>E18)BJ"J%Yuw/nMxQ>Cy[6-`A}x$tXpeܐ2'cLq4i9N;d+jL|IҬD8-2mc; z.|Z$'&cdo`` ǎJ4ˉ6.&& jq\1z2F̑ž.}O{5k pL9j/F-&JFoɸXDC71j®)%*GE&XQqqAfcog6R}̑ MJ1J,)2 luO%whG(P1O&b(3֦s0}& =Ł}nȦGhΉ@^`Bbt*pfv<Q뜀OӪHX-llO'>mv!lFH RL0ӺL8S:8RUtC$#2Y7.PU$| v3A5? #rL* Z'v-)v=lSx0Gi8ay4oyp 耿-~9\s)aM]1G3v> Fu f}\:"e??)(y6`k|9A&Vfvu1:FW+Y1yӘj@'eR\7ejD9囜+?ȕ0{eE`N/L0E{)aZו@qXF|ZCݮ`Li`BP5U̺d6 AF5؆\ i@W~<| O)l?M_۬w=Ekng:g)/X +KRY NaчfdUy:m\|CxċW$ޛR"Q(z3R> stream x\ߋ$~߿b o~wvvvC~prBLs)IulzwI|SW_WTInuԇ=|˗}ӟN==L<c ˏ?|u]!^_|8.eGVG+> W^-Q_-:Џw43c>wu٣Cfg G;"(ut!H2tcoH MFR0a*LH j)7If,4 II޹ɜm$od$y}cj6UӛM1@Hoj`>I {1 4X;5dCmd`! 7> ¤r79'KLFzB^2UZJ85 ĩ`!Lqj:`"x?I-Sd 0HȀ6S%(Jz57 "#& dbPL]7Bq*4}`TuZOu1NHhq5M/#29YTAYY"xYևoӏ>/|wO;Էߞθpl䝂ӧrU&O9|7^GeU'YGoQ-O?=<zέ*Щnaqf+-jĤ+h#OYUԏI k%2* :,˞6d>YhAߨOګE=\Y姣]m2Rro|SцxY˳=XCP B.#Y2XśhQƑTZ:(C#(G/9m$<tk]}ŭ5U/s.pUa4̓ vuZ6d.x.8Q>n(S0o,B*靲'p+U=ڥAHr)i29QaF =ZEXӊy@TlrV>/' a3J%ZˈOu'չXM0~= ILLÀ3o:z _Gf ڹ\3YXMuSeRHN0n$8'偀Bh':oȜ{~rmwPlN9TA :*H8 |DddI}Xj9Bx/tg gH΢`!e<(N? :/=-g!d%=Wʖ˿"].όN)K#Z#ry!-{\5S;>L<ݳHMF|7k05 3)NՁW9ٝõmg*#.,2A٫m6]nײsw%*W&fZ2gʬ8.rnQ2׽N'W[ [MYvˋѾ:ůGLCE7lq "h ##.觶Ayܗ{MG|&fdйz1KtLelm1y"nݥ) y0g3W՘#r*l]cN6l zcc V6ՊC PMoXz^|ZVii%Zfa|/,I Xulo:)+A-Z 9 ַ:(oVfM0!VY^, y66]:uwuc+؜?OyY֢ X2q2jb_oZi8:]1P?N^q8:71V#kHK'1DӪp%N,ۺa)+W؝-K;1ܜPcXb tRFAL޼Hご u8Ks6+ Z:P2st: 2wxw~U]_pz0% hoHhmQC>ŷa1^F^2o}SV;`N#RwȽws7&h'l|.cvtQZ5Cmwl\Td_+K1#X~2޹-%}_k]q-)vԝeV aNqЋ}}e_';[h_d%L{#w)̽Vg"ЭJ@ȣh1Mquo M?[/JA{5w6HU'ը EBDyΨ MEBDyΨ kM,$#uFU%|BDyΨ P,$#uFU`},$#uFU_bP'd3]_dP'd3|eEBDyp#UDHW"h␚N",Ro={M'/ uA:#0$<@U"N"ͅ/HUnՕtAfz* H2UACtA:* uA:*^ uA:#|j: v>nh: HQ`/3: HQ8: HQ4: HQ yDIEꍪY$IGꌪ*hN"5DHj[ H2UH2UAütA:*fO uA:*pp$#uFU,$#uFU`ptA:#yyIyDxyHN"]1/~7ro\t endstream endobj 1569 0 obj 3495 endobj 1685 0 obj <> stream x\[$~_17*Z ˁ&1΁<x͟},~ ʌ?70=w^ux݇/\n{GMC`[ڇ@낿~\`Un!kP`,⇕̪IU6Vm# ojz vܛ5f<>Z-{Xt 7UYInp۷_}syguOF3_t#wء?uJib0*@ A^xsy~0䨐cBХb[(t@E:gTdO'tQz["09 -tJA%Q`Urߥ_9@DK@@) }-{D`D ל:kاrK5iˡ;@_gՄӔ6FnnO?>!8oA } >jљ6zU*5:Q+Уwuz (CTB|VMՖ끼gkҾVco B^ۅEz8U89'8I'j=@NBǦ*~v(#RҎ;xkpJ.,Ϲmkdôr(:ss 0ĩki_OPjԡFY~._\{fʾ7`EE09 U%u񽏽e&}VIg@aR)OӌͽnjWq ԇ&v>p1zwwZa YU벜crSuKl2LQ!n ̯:OiӇ:$:J[J]z]u_yᢆK]4d'Pw7@5tg=th5bLZ:#[:lEo 'tݾᷙcTZ5\VʩrѳOE^oᓞwo١ϳI 0:Y=>:iŔ|ȼɒ[9;/^`rzE:֕G\N?G=|bM.|n^9~y`8=xZ:!"=~ 6obFln-w";l*=t+2w= !$<c$IqMaB 4tѧ>.sanE mN4 l -`y .YF7Z $z6!z6o]R7NˆRM9Ks` 'YV3c8aruyr!x46n tcl#eP8mjl*ؚvxqU< .(bTNn9ie|KQGˏfrX9b1g- P.:NͥObHF?\es%ch`+@i1p lh#"hxNQ)`ZqD^n@T h<}Q$y>'4-7l=cC`Mk{~)!=1:) Vs\ZfH)T:SaV,(<6w4r_6܏ܲA%)r&c3 +WG /`?d̻zC̏q8wtNX1az,ͧ9FjxzK4"]Y]kwn\(zߙ%B{X)5`A`b4r#Sy12rq͡z5gGUHXxSTgm85gIXsY /-45e;J6 !@nt܋6 nϽQΫ ř)*ܕU` %TnyY/6UΔӈ(F >y1K ;^$qXo#P iŋ7usӄuՑI5rJܚVE*-M {P'RK*uJ F `)ʅibhw!~?,@= xZA1S"LH_{I7Bg&U\(*Lr)XIx An)Lr. *Lr)gVg*HP$O;Tg*HP$H3uL( HU$ :R& 0Ix $> stream x\Mϯh7")bLw>8 ؈ֈ@SU,JMQv1ؙ'*?fUO}˗?_NwO> ՝闏OW]Юpr`:ciՁ;iy->}tmZw!;SK p^uz S7pcʗکl+z^xݹ#/eUbv*ء{0@6Зثѻ3S4FR1dJk\Dl)0;P$ͳ͎9rJHӨ$0H= N}N\T'i( rwή˻gf^!>7rY!H!"]a>}>P[1~nvn ~QB¸MPЪs9˩݌$IJ3' (<9xf_6R~7ɆyZlrDq9ܦKc  gcZ7xPm$Xʛ$7Q^ct[ ,:7^MHJo96N԰5'6SӁ*Fi) _gfQ2$ӯQft&]ati?۴񶳵:/NI<>+.t i6g2"7+${ZD*X`" !&L}ٛlpA<"Fq;f"!mR8uWndUtQD RU@ND3fp0 SG:sDr 6v&(RR>]H7biSTl6f.B ;;o^6%CX-oΒ )D {"3g2@sK(L M(B \Add1)l%5yҴJ醶] %:UVgv`l&eުťDGIsF7/7LcR%6mG6f,=N'ŧeQTNjI{CB#Mzڑ!' sJ7?17K$۴%h\a=YA5bek6QBcW!/J5\x fE*Ny2vƶU= ;7J]822-ۦru7tfCם<5nC"5g:'$}4ڶM}[||Ud)ŵmmTCKs@V3% n}vUn8mzSxJpݝLuit>e| uhOpmZS.qtg%! G6ͳm% LFy q]?C0n%iR-b *7{M #%ͼ6 (`,o<ҿND+o^6U% ?(jJÏUio]qrؑe.$2idOm+ ya~:ߞ'+%քӿN? ضBOLUbuV7,6SzFHY%.vT ב&ւ$Hb3#I#UR,*Lr) MIlUx1RE@#eb\ "T בJ%C@#W}R:6e:RV ER *R^)xꭊ$6S\G*9X"T בJ'̽llUr\E@#ebwQ :RV)ȩnIlUOkkHf*HڬE͌$TJ@NHb3uR,n6J6S\G*9"T בJ^6J6S\G*9{"T בJ@llUr:PE@#eQ *R^).uIlUFf*HYX`n6J6S\GI0Hb3#I#uR,~7%@#eblUf*HYXn6J6S\G*qA/\ny3WHL5j%ϲ7SCi ZEɪĕ@b2AM_P.Wc` E endstream endobj 1770 0 obj 3354 endobj 1848 0 obj <> stream xZ_O!D"  ز6H,ЇC.ٻx/,wf(JL˲cdqpG?n~j]{*U+ Fg+o T_> _^7ߵWqr {;!\= Tq-r`B[WZit NWnC}A 5֬ xIsXoj ^Ց e}S\$*"v^?~xNbb&f׊dr+PlWK`ҝ㷟^~I@WH@o)=j|1\\F6)KZQ }Pز! 'qjG㿟"dlh`{h᰻ڛД`*Mfp7h]7 3r+>k,nk31 N֙Mz K5S nVZن\yU%񶜣}ݯZzb].i.14;Jb6%P:P#tyP7m'';W-XzȄ@Q"|UGyL#j'; ~Z&ɩZrJh=~M_ O90 DEӊ#S;H@9P,d#Ց?l%m_ :5dmV$;ڝᙎs5y-84c6nK^!~aTS@~dOk lo?~|ǧA@_,N$4)aYQ,T+#Ow e82 oaj ak9 cSLjqmF`l.ȹRBj* %I ۞]9x!JأWU~;ڤ$ is]7XS?fz;0z*#DI|\aǂAwR}y 7VP;W5SN֑UT e۴<&͗~8FLESM]Цb@lcdx;۱@i 34&f䣨Dw3=' 9Iou`Xܕ^eGLdu> ~ w]7/ BF\OR,Ym}c2̂9hJI9sErw b&C[k"I߆ &rLl%Q͖gKne e^eB35'㬪SSjUNŮ4L'+Pe+:>(J?{ۃfX~ϿV?K_ =i*20G^v9a=fA6=4=&\^Pu~Z\f/I-- [xNi)nVhLwW#G@sZ߇uF5NB˘#3p{X0@F،zˊȸ@E!16:HCʙښaɗTm}cA 3L-M)4}Du^{[w6]DrGj7ڇ@FrZaGt:+ܪpgus1uP$ǰ?(k;{ WW)LvAFr@vpgGаڇfVoqGPQEjCw{+C<]ENE3Vm3N+m0n{}EjC'^A!"ϰr+ U8qx'"7FQçmf7r=GkymqYC60NA=l&{'GRS~DXqɰV1GFPU'7F1BhCv94/Mܢo BNiqLJInI/FCɑ DW~o\Sok`/5I1~¼bw[s3.G%v̭H2SdKD۟gKĹK4fdO`CLS!;`NơR @RMe;'B3$}g0`7-{LHP1^E*]1˪]^4@ EkOVY-j;KcjF7{A̮mLar|NYmA/j e<$Oב.ǫΧ QqH;v3:Y4]o8+gHV?E=L]'zz~MM.Z-]-"Mx ,¢gh2ɢx9g9M-zU(g9Mɍ--qJg9M' :g3˜& }Bٍ:i(hp1rqydQѣg3˜& |(ZO8u6iip+*r]hVTfV`pA)I~'%j91q쿾, endstream endobj 1849 0 obj 2614 endobj 1919 0 obj <> stream x[[o~зᝀa`F7 4P!VN5sHIG*AcqH~~Xz~|wt3ҙk轅~սEPAwsAV΀݇Nxx«^e'WW85+VD]СA(Wu倴 LIԕB&dIԕz †+XIE(CiW +CX[5cn$Ս)D燬F`M6PR|ß;p|L ㌞ ř3_k^>>D^waOw6Hlp!q#qmxK_p#`œ8  pg/<3ģڃ;F;v~O Zǟ Ij[ixm mA+>G@63U\M v1w1ڵjc۪ޔf,QdiG6Rٸ=Ɔ|ں†|HXVm666ОhB*0/_V #4RKevGRkc Sl(f B'9ӎLªI|EiL~lL՞2MlXl,t c)c::Sfݨ h-|ðR=#ޝޜ8_.qΊ;d|)|5G/h"bMw+c>{݌NIc! X=Ɛ\$UP"8==.qı}7_.^eB }AB,Z ]8"f2x l _zIֲ-}zzI TNrɨ' PW?g"p^Ӄ{)qM ș0R(y oc+bT8Ya ;ܺPF6AB 5tt )؏!IktF5 k| 849ܷXs!IJNؒ A|A])HIЋnwnhSsk>#F.D#^G]=?~|0dlq8虩p6*kMز-)qFdFc<=rk?`c}>Uj,6ym H;M\u&Ji"OnXvH<&ŎM4PQ FP.٘BԊx !݆d< e~R \ɔRki3;J839NpWtG`t:6R5p\ܒ"y PF.]H:/ m$K^nO[,+K{x&# T؂声չ=4WA)Xe:Y`HgSW&ը%E, }( *1|5&YR*xSŅ fo4͊ GU&79im]d=zG] !ml3+\> stream xZY~_р *M6X`$Fx<yP!dzN$WE}Ljw3=$`_۔Tqn맏Z80) ׾訌]<o:[3*UCI.<}Ui=V.>~wwjõ JfP,tF]3L/2F@X֋9kG*W,_ȶEX Չ}d23mN)ûXXa4- .$ثn'Q2B o"Py50Z&0k#]rP;]2cOߟ߿caskWEA~P;Lް9 h~$c #Y~6Q{^d_1tOl*?' Dڙ`Ofύxxc o_UӧO_>4@FXHY!,% !?Be|gN„@- A#75a:-c35uPE`(,4WuX]Px˲< 5󠇉|&bUjȃsE8Q.?5 .a)P&șnsx#@j85U/k&-ynx"gGG{MQ2pш/n*M7ުؕK1 dL%>H2cs+ @b=v,ԏ&SܰD+5$Fh#6J^HϪ ¿۳D#0#Y@_պ2@ئ|یfۤV^Z"##cxN~Hh(jB6I#aEJ bMFakb7[FM;02 D¸^(GaBonN~dU!+BR( <+|M ʩCڬ>!H^ZNb0 *ȋOwx+%ޥ@Ut[ Pq+z~Nw N$ZH %>+ZL; :hU%4,`=AL>C/!}R=ਰQѠ<+. re8tq'mQ3v IYd:dčD"4VN# E./?@]9)D=(ĶZۥݿi] #vh3"9Kp]W'A,KQBT*bk'D:$h!C#TP8װx3ʞ4vepPGu9'j5 2 TePSDD5L)uu$LL&on͗b#`7e/ŅCmJuJ5\({Estʶ4ݭ[ UrMg=: t@rCShAm~Vӈ$n~%kڒUV1TkY45YZ4"Z`x'[γ0ׂj(C >9NP.HKjA@\&\wNo ,LZ{CV-D KAy^wg!o]S`>%|м# _Al 㪦GD˵qYQ0#7m$ލP_?=]3 հ(<.Qy*'`@gJjZɵU ؂l^\YrʢVZR9bAҔvM>ZRВѭԵ<~SAi?)5N5I@BKWmU::!qRf$* " &-& _d#lΧHӌKFc!d2\$%gKOAFLٜWhv6_R }F48@&z9kMt:U13E/_FOGN=Yq$U "Ìj Ш-/`kиu"iݩ G'gdSQZ T~ 8vV0/6 PeȨfbwZNBrh+={1w4' $:gvk_U=Fv]{@L)kZ_cg[-Tk0v p%,C\;4̫FدT ލbI>n#`yosD g1<&|' mmᚠ6)S_^l%`G6LSE/Fة媟%:ME;q:N:b]zGl\JDd̺͡mJvj<<vg֕$">bÒ E9=öT(j xk{:2o!h?ob~z/_>&_ƱNPawjHE>v]5 +-;t'q1iicD`(X)+䬧F > stream xWn7}W,зY oK@0 ^<$nb)q {H.+Q+1 Zk̐ZnϮOϟ><77[C $]ciřvﯚǣFfvV7>L8C;'mgj6,.`pO;ap80myFkWlT ć/$r㧝fe?M(Ci_PXyut(,VHǒ.ْWO(n@)rCK=dTUxBEJCh(h 8+0}y!48l!LY*\h;J{ [H8T!+.HutBJ(ݟJ*4H~/|] A}Z΃.pL$I =cz+xT~}ƭgbHV`}], W@t B! Çdžx8.y>it^MMt|H^txt4{9"Yㅵ:Q,K[M۝((.m*9HM=b;r/޽&45Y> stream xWMo6 [o XXڢrH@Anj-q QZIElI78Hg_vWǧo?@n`!CQUQ)# 0P," 0]U1Dc(Tn0ƈ T0 T0| ]QuQ|lLj T^6cD*/1"W8cD*/1Q1 CښuThN;]N~aWGDsҘ[~ nH;.k$zQK-): 9nx7w7eWHRr"UM p翑xb㔇, lׁ-P+lT# %hҧt\t~ʻ?oFxƻ*] =cuܒ<3$6 ~^s ᯦?õpoyf>_ex(O+`= 2J_0M@ xYm| 1хb̶XbZߍߝo7ax[6H*}f`i|?f:3mmZ* %0y.MKA3-r0({ ZHCe`eLq uE }rr;AyM^RW.{ u/]:-sÉO3<@zT͢Dflhg "fQGO->J71 U`)坷yhz%[1xZ B8$Ämb+Qi*=d" Al؊](.{c}$M*&bLKDZi d[!1;yi!Nv&ćL68}Iwa1~c\رwjt,9-i> stream x[n6}W*a}b>0ۋ f<Ɍd~O)TG0`EROhQꏛ_^?<| VV7to/mpסՍdS+;onzxP5#ڞ!Hw,BHwhHF{XyLFc \/(aCSE2;22rLF\"2w?>Qb*qw%PuV{^U?j-H܋RN*}n~+sri9̈́`u8/ )+)C|4-.UQBԴ946H[AB)zf9  ژ6p?}B^^bX;b]fz D!b[p7Kn/K"}{зxS6 DeŒ®f#뜴5͙lƞR/0ʖYY4[Z8<1D,L2C91+doL3OVit˪lqQf4'F B f`#޳} ĮX{keSiN5L;lNϷ |;IyJlj_ U>YSî[ATWʱmK';KQ6J[lO@yҳYiaVQ~0Lk.+XsQ#픖n !GzշէJIeO5ceiqʌW@414H2LJWo #(^RKה?_N!צ{lҜl:*qlH8C.R;SHlYAp{㌛Yl_۩oB=ҫDI#r[T`T{Mm#l-\UodF|ÍQlApb fD|^7LSZGDX94%ǜ ]14=Rl}<>ǵ3 NpwB>n||y D.l0RawnP΋ dBhk4v>٠G[} ^p 3K.`KK3#%Cf!c=Ǥ*HJŪ%H;ooU3 CT@7P},R :>l˟pXȯRueCS[D\u/긆qeU.D*$ +AʛuJ;e݀46 >ǴpUͱGwt)+׊2pul@uq`3(%4GJ"c9]Ȥ6{hN!İds<"r4FUg N`4a 1mUYDA"K-UJ8ΥLPxLDnV3!^ц&lΘ&ײŏR֒L㱷c!%0;NLTyΏ噐lAI[8]i# bTSR(r꓎N=7)]>heEe3Rg9&HzU]^f}a8HY-OZ 7[sNx2Ϡq.rX$ bKHZG34c6t E4),4b ?ye{/&lAv„,O-k4e@Idzmq/Pb`LTf][OZ3I`ki|U5qoWV 4 e{J帛r=lMt8}{ZMWFK7s'.fJ-y \Fui\sc_ %š8a1o9T8_ei yq< a.tKx#{?<>>=vgk=[0IV0WH 2l 㥙q6ΈVA\ZN5YSCcSfu:L!f$I:OyN}- d*S 8C> stream x[Y~_Ao $f"=&>Uͻ%R4Hvw}uR5Tܽ}yoUJUV*mV@T_iv?Tw6jCu@stIu _[z]fj3ؼ&?wu4i|LCPGVOԢGr^DAAaC3 tDeS+FK&#b@@ZvJ^@_'\BF8Fadk-5M(ZcL)3=ҝd,H5:iK^b=~i(FBc͚Ob.JH|'xTHb^[$>%h;E8TGDnU;UZWOcKGo>ct/aIѫĕF6@ O$l$5nGx#Utf8j4DeoAPya,8.IܦrX56Q@Y(1XI@~C'k:rמ_EVcEߜea2fb2ɿIЊKԀ)8 X01 HmXK+heb ,g%M6WdѧWuQo_ Mh[R6(RL#9Bsꪊ|fJȷ`ѭo1-6HM8 'r4 DZ>J\J W: ,&!Q?9?BЃLʫ7b '@Bz t_G ,l5G-z,Kq(KPݦs?gJ J?ȕ[`_ YxFv/#bAsm(mNް@ )gVqa@SsA %r}kzM)^q Tg {ۅj8$TYUja*)BjagtR[vdt_NIDj QtfSfd5eB8jV nn嘴V%YCL"X?"IDѹa3ۺ`w;mJŮP›aejc̭95+ 1💞ZZ:EGGȄZ,m.IX*@yZ,k~2ֵY'h:-IKa)zS*HoF0c#Le,3TM.tiěk9)uj($ò㇧ y> E42 r(Z:eK$Hv$L\RMr6hIpUs e^ EG-i-5Cdbw;e-Kˤ%8q~bO<|7,g4(Z55wN0ёg!\\ns{ή3'FBpQF(c' J.^,: %@ R6#TAn:LaNMeRRJw7) MFcI%6VZ2*犎cz82"lָv# N#s~a; ooq8؄7;Ǜd3C}Q/gWu hɠ.K$Ñ$x0i2}5  { pF;rpbMޙFŢ uG噑#yC2Õ@#%eTFͼIK!O% hlsnp6h≠!536R,^ "yV_50Q)U+ 4ކ׆Jذ5 ϐU9p޹9šIݗtIc cȶ|m'b&W[ r ѶgѮOCO."D n5) @ۛ+zR- Cmpnb&7Uj;E(sY*2A,R^)ɔ_opCrh}d0yz%̬I-K5BFNӨQfvɡWjT'L7"5-JJCNԟu`KsE]i=uR!3Qn}YX<r%NB@@$؆G'Ӽ%#EHCd-)*~`iq>KdžerrKS,fɉIvI3v&)54~@bb, , ÿo~F= ks`|hbP=v pZ`> stream x[KϯՒ,>~ r0rػF{op~~DI`i5bE/ޟӇ_oD/L0rZLJ~}^|x+7|.T/azoh =Wi@ \'C˧jaA| Ch|ZCÈvFf}`zv K7ˇF1ȇp;4ޕ|4hwcOV 7ׇh('K:b az3!whH|v)=ZCgk?@C84PV 1EI! (cFTNa4wXf r}?]:4\R=)9<ӶB·uRuϟe'q#9#_iD^e2PʋRJO*N;)|. h̀OWjxS㊫rJU"OI]EN+-$m"-c 0\ ƿ|,Ŏ _Hp 򄟝HS%lҩHkPVXx>^ٞn-,M2E<2dn (=We^|xt4Ld c YfQo8)ŭ5+>iB!gNi}.䓄 p7'QV [|c| w5 O6G:7Kt_Z-[ $],xD g\K6&Y=zQ X++aynE'b{$eKN)V zΤ0^.qM`R2'ln] G2f;ѯȎ3KfOFk.Y6vl~ P!Ci[BTqUm#o*XrY4AP[FbbY;?i<+4UV )1sk\!ӥaG㴱u @^"gt|4l;rb6jAYGJt^M+1b"rUp :u d0 g49srȑ.fעkqY^|ݪ92xg2*gsЗHanD12:on揿>P{/|;C+>K=KơBbޛU ʡ+6D%7Aya :'+J:1 Өl ܍XyΒ%'f*\NU" qOU$(ʁjQS G3hc5:ylB;\_TjE.#܈#Uxr lS Bl_)׼amsZ/VCrgh.̑@!@hbŭeO!݊zvN+ZTuh4頤@̀^I@.Io2d]heo2Wzr]DUI:H1bC:5RҌYcphg,vD=LdTZ:qv l12_6ҹ jr)qA*KKkiu 5 i3pj~]MDZL@tp`#H؞@u7K*q ԛ:!8 ج~yLSF@gerS r55N(#V޵:O+]KcrN 95, Ejqh@+zr OjBnUkMP W4 ܄ؖ;4]S]=9ہ>O'OPolew ,Bjo >CnOp sm¼|_N$y7I)ŋWRϱ' Ja),;N((;lǀ2R~!ۈGfLj;WqͲpl[ep3KnN9aEPnSFO,jz{M髈 hZiq 64ey!T+Wi۴2< "SM?,OS3'stY ,ptc7>Eז*? R#M',cz0`> 9gXj4qXgܞMjks[^~ڙ.[QrrW,N#i: ]\*:E)1-{^/"Ӥ)3.iQ>5 ~7- ^XYƱ -d2vWwGf.kQfQoά 0ʒKٲAr}q0DzOWHQ7ƣ3amqUm^vjV1pW˂sO *R endstream endobj 2475 0 obj 2800 endobj 2577 0 obj <> stream x[K6ϯY| RK $!؃A [R֣NcivSdU}UUV5T>=}~㻟^῕Tt\r__U.|}BI['W]{3_=t\q`j=!SoZç3ᓟ6vM 55 5:p6Xװh~oMQu$ j :T#Ё"@yG'36W&z~oU^x||MssvL]7ϢWjSzۣ#*R TPpшJ*kC#8ւҠO=#*,h/8W-T¯i|TߠO5h| ?G_?t{E]'/)?(YG2Z3Ľʢ*ڗf5be)lHNFyRIlçtA_J? ::+3}vxhV>VWNDqQ=A_/=ԓ@jQCBؘDg he0ت AV[VIS KBQk]\옆잆Yx#PD{DP PCRa{*8 @䍍:?BB--[;:2`H뀊gm yPd`5p(?r6GA-0;?7 L L7ت%; Z,Y9SU=יc`X'&1Avې1 6%Q]OapHMPi"`̕;*K1Xdn 0 i͟h¾o9b {5ʢU{)u{p<CiC0¼(CAq0gyDԖ41P*̮xJ:bk6 C}sXϿ.7Gkސp c6Yc#CNq5]& b|ZN #l: fXMV/MSN^e5`# ]w7;-(c*|IXq9w,4iP\$ ecY3d܎-`Ck1S4@"s`&Ýmq$p& ' -`s@(3u*̞ Ɛ1x]$mQ">AGam.A{.<9B=cp\Yq4/ig+>E ԽLY\;]qa,y ֫qH 5nQ _=2ꄨ㸧rGH,n$6h¼r)8_}vwpٝ^JIMߴ;<ctO/,zC4RmoE?N S_>Gd}x?(`5S *Z9"SJlfT̸4(чpj!d+m#L鵅6șjt"^>MT`^ 3m$/EdDΜ;ټxt)XfЕ a3*gϾx'ScPJK4^_K6&Y l!ΤzU %Ye 5w\yrOz.M;lQvͬ"ьfBZH\0=h|a96JoUJ(հ= hM50KF n:6ڥMc mӚX>nW*/^StxN0h-;1F}!*Q3(T"~-*H0ՓيزOoW*b׺\aΎ2,a,x;N7ei=SbnJR+0ەʶD)XM-24/ˈ̊Y]I (|FiP8̊!#O)y N 92JڦuڛsAsDؕ>¬\n|:N}Y?b}`r)w7șkMz+i8:D6,ȾdJB9I[]o%66vەBwjŢ_[vy`=jr@t@F74zKXbȔ#Bs ƄcK> #)Ce!y]Рi)DzG1EL}Uk%f,Kcݒ@|rO+O9D04ИsGP g$Ͼ\`"QVfEoAzL~81Z'Zf[:cL 9rrTnD)m0vܣqt)Se0H&v ^'wY𞴱ʌםlL\ 6PBv4~4L5xejrӂ|FxX>ĒdքHƤ}p; 5עK'' ËNZٿ*SBC֞%qkygTR[kEZl(L}ļ;Hݞ /A~(5p1JmZA m.{I{[NaXFol"pόıDB5i̛B5t/-r"R7{*#ICT٤׈6iSJ( VfK $u|݄)>KjSi|;Ҏ_5 t%ZaBQ#PIPM_WP/<_N)<R)2i,.w^&d)EڙOyXy$L4^Z~VSoD0h endstream endobj 2578 0 obj 3012 endobj 2635 0 obj <> stream x[Yo~o C$@N>l@<,v[uW*U+*]:4P}}묽cP&jpM5AMZ B\}ѦcK`8M;\ɢOaum֥^FO޾ݗOϯoϟ?~RDŽ8 D'?TA zT}@z|"(hZuV?_o-Zb:P~~ػP(- rJuZ=:l?~y{[c6*҃W.m)MS;/)'pt ˹zeq߇>}wSBD7 λ 4NT2 VF_qR, qpWf`Ds4sE$5( *:M`CkMkp`1'M #׆ttk0][<6kFUuQQzQ[ Wƕ|7a7T?`4kݝ>P,xA\Տu ?[=mEGPCa 4.%!Hh94v ~q". E AhH~wiÙ[`xx\\K X~&wYJ/t ! C= +)cQHQfA2Ͽى|ٮ, -f4=.Ƚ?r4.P ->>]P@]Dk?*n0 ; jh@spgw_=-aG`7֒f0H5-dQGB-:pfC#wK#X)A[>\" nE $bI8[S>Ū py l43 u4¦(I[" c$}:4Hq5hؓw/sU494\d"eDvgтF7 ƾfN΋8&PnHw{Qu NY^=mq|֩Az,1m& )sPP4+J<3M׽δ,Јh qϮL#q#aĽD5 o`UfUaX_95ᦈOg>}S+>b9DP { ۆ(KɯtD mtmVcM?zZ iʮGE0s>[|l tNsύAOpp5X8Am92B @LȈ?[HF4疔{}8?L\zd`j8+<q)dl}=n˩^;r| ɧY&@>8FhFaף4~!QȒI3U BӖJYY4iWf4T:\;r-l[I;70)(9Ņ9.jYC{ZJU`XzAt8(ɚ&~(:$ޜ||[ھh8.I61ezis,CbOmU J1Tԝ9ѵ)6ʗbbE#)ksq%rE!-2ˊ'"#Y#mxI>-1JJmJ>/$gUbb25|Q#}ZKaz/#*}y9^H;:Qxi8Vg 1F2%LIc&]CO ijq%R!v&fξ#h'p_=ֹ<] 0׫Ed5 pK4׾DB;?̚8KVrDtL|>`@{2|/"X/8> stream xZێ}00o wQрl@ CLO0 2@OHcmbV9U?Oǯo>ӿwj:e3EO>?Mp^^L>xaOz~>d<O'Ju!gf{UTG7VMnQ{=IV \!~<nUWF:xp`d _5M # Cq翽izyV`&0}tliE'S=$`)t#Pz0Cƈز4X?z|D+77wc }7܆p`v LWZx'l*dJߊ |hLfxW~86^wa,[|'ed>FBv520{ >b:HoB-ʓ>kUyݝB˝C'?퍾 } !v \ׯ؄M99!rC[Jpι񌿘H#)ĐN`|8X8pb*d5Œc0\UlRJ 4J]R0;IC/\)8'zjeb !MPLD:8'Z5T-n6Hy4ҁ|0bjd!{#?, ]Kkf&{L6-n K-ǂ]:ehf&UQ sᇳd+0fifo0ڇپG}}XQNuҪ3i(:LTuWc cR7dÕ$'JtY7ȣJ+{NTdΥ>gtvr3[d>vz笝$lԊ±ٝLg|=tGĎ$}R**1(#4I|<&'Dtht Qs-+Q`qR[~ J3=9Τrq}nm؏'j=f i*+#{v(j,iD< KW{K%,m! LM#4kh06URfg=|FbAd rP$5Vm1O,`nt:Qr7֍̳me*[5*hhiܧidkZo!'OKM;XwSL6Id gY$,wnp-ZVv=κHۥuW&<Ԇݫ4[ 6MEdxsؒKHO9f>GZk$*-o'$hK@dg=Iki. }ۭ*ILۙġm]PV֕D{L{QAzl`ĘvY%{L/wԵJ^@ kuTCߧ,Z{܌6%8ϑJ ԧj{f**0W **-)?פLy (Z[uHbsXņ+U0 ui^G) پD V2x/ga|V'h2/% LAl&-{*Gz lH=Dw4eeTz)[ivqQ^ E1j-s`3 Uu}֠B=bZ@9Czi\(Drg 2E4rB9-M^/+Uܣ;UYca5.e-l<;k#wRqnr̆gB@+Dž(IEL"X|gʚe7̇jNOC$tJ[8a;شZl> stream x[Y~_Ao DJ d6;@{3O-ΰ *l.aw"қQHiA%nsίxIHëI/-jFwz- zGH?<,S䖸#q }EIH~.p3j 'alPЭR6cXUZCPߴ,lG*jkp|^{H7JZ",H4HC J[;iemOƸU"8$6KvNC4:Yls?/).<.]J8Kvo PmVdoge}HF:6wN6:1"iŐ(~ѧqE:3QrAefb]ygyQD Sĥv6!Jmȇ$]}YcGVpeӃ`Ԋy"Y;++y-QQ N%wtV8F@F:*i]nh!;'(QJFR~ۏJڕk3n zY/"tq3+փ3H9})F3)#d2Bb X~;S &Q `FW;^R)`r:7 $T;R8TJ tU':Pk(Az].\KXF >ޑ|UfQm -HiR6;2" `JJ2RlX)SKGŹ@r,1wD޹v=>XtRD \]=WRxqNj&QZ)nNo~ا_p+jRno=S[gG=-~$Y8Rq\nۈhrNĈ@R|ܐ ;ջjTΠ>NUo FC:)(D.Hh֝oh EC839țDO@e``a{QWa-|q bNhB-=y[PdWeOZ c;J5tHjM$Sf^=bw0L޴v;ÇcN.-A?/D-XR~vF8f$qXl\Yb7"'cf&ʉ2MazR\Pic&Po.kګ-c\Rc0"`;׉_6= ^6YA5N+7 )6"NM=wQdv?!(mQ*q蝵d=u,|\ཇ$H4|Dr)D/22N]}qS R0*Q̍ƛti&Z*G 42st44H$B$֦H .:Y/G MD;nOc:"t:GJbF3rR(SBAՠ@()D:iyd|>(_v)3JmAs ?B{J`:B u.oigזV,< 5 v)F P޴Q*uz̦4ȉ bz\T_4 T )Э' QqLŤMOy=SQ5ѢLq%p8:JK7Nbk> stream x[I#(`n\Z$F*Ĉv!LcgqI}BXUU#{iI%n-[$z×O?8 WvotVEAI;/s3VRxI{ vOMre[bu{YoY^qZuz嵷4C4/v?:0¿p!#,"w硓{|׻G^Q?S󗗴-Tre+^)1Hn@2ЫAXy8[+E<~__$|~tu$ :'9 R?FB ăLb'FX4N4q@@Hy<[ k_aw!A#͵Nn?85DQ8π#N{<1(<SG x=Q''Tdz<^<}<-Ōov%H<u&4(SKIw{ xt\8J?Ҫ`,OUv,\4 ^\n|K2H6IG`&04h6_;:0ta,¨J<| HXuTbe`E g朘>Ĉp @Q#$# aIdYM0d[n p>4x%aLobL#VU`&Ή#J Qm;Ao@uBN~=R+\T kKd\`JNMtNxJFr3t{Դܳ0ܪS :Q@bc0-8;%/^jAQXO'V8QB}@tn#F qZz95q`("~OA'R :^h\"Rp ^>ϧnDWl3Z0oFLQH0tyK9q9˴ Doe }g1_loz@o5@9D%1aQ'JE ;.qn 3Ea,)uZu"r㠜Fz$RvޯQ{6@?=ĉ@@7֜;%L ^献j8^xYtD;QLBl'U@9.!0q mWQ 52z#F)E 'Fh䈖|չeYww&'ucR?{/\qYJ~Z{_F" $1w4yWhHaܰH8`)ZN L(d*mȒ4pHV)x`s*.fRbrs U![1=ɚ"dYĤ諣~Ef6=Kd "RncPW5 %7Z)$=ҵPxr.PƑYNʔ2nM#PVƱ@[[/(Ȣһe B)Lp{AH|1+a& | {ne>*]?v!dlb|/8@aפB܊*`ܸ-Dz1RsY=hh[0LTiXtdT;dr"$ʖ1,L"$Z>\F06Rmʺ^m)Ja-J whY:c Czj$ؔڥUt2$D]?.msLzss&R n42dmo#g"R:\jڔ2ќuel|,`J Fz0[,o܅*R|Sp\l;8v ~5%J+vIt5n̹'7SQ7ݩ̯4lq*M )b{TH|C?eu?꟒חlest.QmrWo4Jq9 H\,ًUW{lIc*| LYkhJ&a;q 7v7UMGr rv[${R):Zt% x@Rxm>pU;@ǩPւS<,t pR,st0PC 'W'\'X9!~L *hFՊKli c{ &+m~ȟ_;d+I2wvpo_ap; CA)YDcH{<)=UNqjNyRz;1ϫ;IA5wcW;wʓh)y^)OReSڹ<)=!Gq8ys{<)=נ̓%W9?v_ endstream endobj 2751 0 obj 3521 endobj 2797 0 obj <> stream xZn$}W4o❀ `I <y#)X"kN>d_fz83fYXEn>~zͿ:թ^عz\-S/_u/U2I;}7!v>>:{ {fYsܟ7c}lwIz=i. >Iwy߯no?~ӶSwwm  4Ә zSw}SGJd)Z@VdTTD;U{Eh""K ?6Rk VQw'O8Bt7DJs~Wh77ONu 溛(Q# eԎTnO~=1^Ń'c6E7赓~:l4옘NBHw?OD}ؘ1>?'kl$C@@XxAyFm1C{LWVrwVig5n&[h RIÞy3߂S6rx}zyx|y}|;ӛ>PF[hWyc :0mX=Bڹ>Vo'f^{!i~oIW(?Y:X< O>:S7/2k6e<7Iʋf 6de|(钘R3٠7ʐϰa?~Y)N'AnDf咲GsN߀=9|Cv5)RP29Ǟ׎ldGr̅q4D^o )1AWp ĺNTO_7f vZJ=qt:R a+=[zWbJzvRI6"c6 - 8L;_+` OOv <C,a R~bl(ua94Szfc!EHٝkZ Qc&F} 8x)xAE8!E\Ar ~|{؈=VuU KP*FaM&R@aYyw5"pX}orPu-yh&Zً^bΐp-gpnM! WGQjJl=jt5՜L[1Ws>*Ny8-/6ɩ' yDž. ֦#kT]xnib |H}Pb]A;aȒKfڊnŅ~ ښΠ-C{(h.&JLȌٸsk6 -'Ȧ]8CQ]$y֖b)`k GLhosTErښn3Ws_ J19ʊ:L;vtرtc(kAs:dΝ+,t#dx⯖$cp5/+ jK^RDy`NCyZI=-KǶ*6(~勠\8U:D<)+>^B̊&9 [C oJف6 aa%gKz1[dz7 A3eb:D<9Ql11N. ұ-x!~bɍi763pe |#'̲?/#ަY>μLԙz0TO_6-54Ko,(ryq.'Ns|3dΌY55 ~3olRL6ll3DP ekeˆ,{5`mU `좘Ѐ 褵ؙ5C,: ',:Tԓh -&*̷ˆ,ˎv i ?Xİm@04BRn^[s'9>Oۊ,ʺ{3Yl%ɲ2yV$ {{+^׳X~T fapnܨ>XizE/"kFկ]tΙ 'RIyv`{ޟñ+YPNse pt#(ywV֨UVVCKXwq DR1ʦ^a0pj$C3Ɏ5iSyraO{!7TH>N:%|.XB.|Gsw4e7R8ț@i,:_kLEy$Al2ESBK'*QYbV3?߫6c-.̸s{"wZ-̸dWJ۵IhW6+-բ;]xvºK=ڗ52pɍ\t]qw|LFlº(&+^\qjع~gVsY.2_Īs{g荤Ҽz+ݷM$C\:@ꢤ?HMox7u?2L*o/ݟAYwN1?" |W YAmUs+"a}_ endstream endobj 2798 0 obj 2667 endobj 2874 0 obj <> stream xZK$ϯ(؛@.Qm`@EI3cֶfjwDdf=Պfz#3" 5V{_ުw**Zy[upX}~߿ss"=>x MT Urϻ(oY"$6Vv,HՀG 4Pi<5 '@p4jE5|0ַՠ 7pgDK Вz'5kA ]8)nw3=^ۏOϯoOy_jZ]~?ܫ#[}k[&w`?ҙ޵ϬZN7",Cːx"xL8#-0A92aY$ߌV,5ZTѝ"  -@q =R {E~ጩ͌FvD4 kBJ)I*F#}01rY _؋YJdbSd0 ^hݣ^V4ĭKsEf"+%D e~p=ޢ +dЖ|)}JR\bv - mo\0̃w/=mkGT<p ▫ґĭ"Q3UL}Nk,kt,c%:ۂV7LĹ9ڛ+HH|4G-A@GPpk:㼃tŕѵlg"ǸjX'k e@1Xlغ Rmnj 'Z_ w3cپqAԃ~0l*-Ⱦ=˜4EhDg"ġ2jp<_EgVҗ0ȋ:fҴF* L2zm/Ό%7Ftڭmhkj5ZOQ@HHQQt-M11,x>iX |v9)~膔5$uo1:V}_s[17& W&9o33>(A~9+GW (2˨GMQF,[Hg>cs^oiI!'H  (Fζ7ؐʭM0Rj0A-{aڼ6DmQ̎îH#/Gj;8 b8_T.X'oHQ_c1-y6;OgV;)*D+ϖF+KVcre h8 =[4vG'el? %,PV*[$e`s3V? Lz&$\$$ U+#a€ϛ^Hcn5\6-s6 nQdF2W RƣSZx ==YxdvpC,6891_lJ 3C|ȆYvN=ƣ-wC7WF2=𥦦ܞ4; 2/R3.~K'km_iA"C4 rﶹ}M\ߙV+y!jpye,sIByC_ H)qk`,C;[;ϑ-VfvC_&)8a-~7>Tfห"*%-r԰rp4V?N{ D}]h endstream endobj 2875 0 obj 2590 endobj 2986 0 obj <> stream xZۊ$}(7j3 TUփ??HBVqɺgUwf/Uy?qDvݼo>|x/UuwK*U++\:z>?㢿ST&ip>Vqw6&UT]g9leUH~pUHv1U;VOp*):O XPJX!` (AҊztsF>NG/LJǏ/)k\MTqWQ_PwU'|שx ? _#jq 'k6j@ q G-k9bȣZ jo\к6hS?3ǗN=ì3sA=  ~Жܴ]hlS26|O5F[hphĘMA2/-AMҜδ"mq52>%<;XczvZ]ǕnCSӶ|r8"2Xj28d.}-؏>xշ#h22|W@aE($SZn-kp-m Hi;$q;.LWz88oo XTMRduM V{8B{G_f/b-Á`ѢWD觏A V3;rI|2zj%{a p p8ӑvEZ:#$sr~-I;Ys9' PDW|H du]DMw)jӴe π%:-UBFl/ޱ ]t1O"x]՝`Bo7X⮘/`[8l31pj#T槁Dr$>D8Id QA)ID?EXlgLWZ°?7"UĊ*7sd,iQ{B guZCP0ڌ+ˆjj;fխN -`F~e^USi%zI E]%]$R`=)HxJ}U8J!djIiӺbz@$*kvL&;yffz曞s/ W/olPs`kƞ ;ٗC#{U47JF[:Jlc(>?U}A8͆8aZܶ±rT }awOC?_(IdLyo? ,3Cd^5c JPQ6q%Ȕxa |Y?КiEB[H$s;cJnr/xSƒfMj,MI]'- 0IRQ~G)"#q%"N#/RARAͮ_SB4|V`PC#> k=[щZ$4 ͝{'cm +\DQ:%P-Otuԁqlԗ(Bp)vNͷ7 |@mƯ\I_ۂJciJ3 4%In LI@ ~1pj&S7Tb<Z*m7*(htނ~Vm{Ʌnav~~*Əߠl>=g<ٜ 0'cpfcg]gر>eG.fqO+Xx( hKT%z0Ts@(sLo(ն݊,v4حHn9GLdk*tnl_|y(Sʹ 9USTqbɘ9ӵamRnO䑹: S`9O1 {dAd#Mz¡H2G9-X -%gz0*Ep&W1\hZ9? /vSZ-x罡d"e7{-`&nz0@Ch쉋[#_IvPO__c6MnP|Wx![wz 'xq;l:) G(|]"U_^lE7RMQax-G)|orݳ te?2E]Γ4$/˦Q ?.ZyUCSF endstream endobj 2987 0 obj 2356 endobj 3047 0 obj <> stream x[ݏ "P/I}X$=0=,pם)m2#{blq('Rݿ>|y//Ïݿv(\t n,6?o>?^>P积/O?ḃqxC,!?>p{|Çǿw?qG8Ill`C .2i2bC. {0h0?)]W4186ؾ1tpwG:Zq)n=p;D66-mܪ&Ǟ}kkxl::Y<`+gƣ忱{C96M^ 3KތZUg-[ ̴IKF08ܣg}z֬BZ'{64G ڨm`h aT?l:!>6/ $`)$OŎy#WsNZӘq3[ 46mbm:_P۴ !vߙ܂ġL$t>. @mÄ{󷯓sŎg6i?Aˡ @{T. ZO5n# .y-y\c_J2oi`(=:~UANNӍ* %z!4Z<_7R'[!zZ:^sdU"WD:RzN@m:X/d4&ac( w؞3'8zHv[ Ŕg+' r"HwDXUw?SDK5P*Vz[3ؙdv a@QqhwCf$1(e|dFy3d0ʲP` #bZ2%{ɠX;RMK'8'&pBPȼZ H.dqPyDP(w?,al(D~qW"". Nf '!eӠ!"V! lCv4FO7Z4YZJ2[N ceGY8-&EWPq4%.Tۅ ,dApozt~37TK?\9hr 9sn+W_ _ 𚋻t(w▛pXYPĔ&DS}* A@{8@*5A)UԆ7,/dO' p:.3D KKHiV"FR!vw!%Z;Is3d#9<~p2D-__w5,:0Kg*xq#܅ڮz;rr+7@+BpATo nXKLH7_1?P\t[ߩ%H'Wø)Z:G7H aodvǦ >3nGKN0/oʿơ~> stream x[K@7M`3Ĉv@GBdN}EI49 .~U_=T>w?ATL:7&CrIA>}Wi>O𡉇غ&j?$#}pcsdЍu;lMlQS1MaLԴ4>TZow.5 L!y'8XƦ-__Ϗx:$ JFCi\G%:<{tZw*jmP:Uם::[K):m ْR2Ƥ֫e N:YcN/w j nGxnt꤃ b.;7 :wIVB$w#>)mj#l7Mpml/)q[/}G2]:>A['Qa_G߈>Tgd{ŞF<ʈ=5N =o$0MKHbÅGa/Za\-p9hu6e'Y?0,=k7ΑFk|v~) L LTρ# ^xKۂ;d@6oIw WelB1ԾZ8ՠ^4Qr7Dmbɜ,6U&6$,z4u´dBlhANy㝖q$ʑrZ6 1Ra[WP?1nCB۠brxOXob!$KyFт 0 t]PxPYgU٬>Cvb,h#wr/!j]A -MO񪷯R*>M1M?w2iP*Rt2OLuЊA)%Lu=ZI!7nZ]!ZY6uZ=&IjpA ıIeᎋij\[R8|"Iw^qkE ǢICrYY>Cm4kCE6, Qku0Q1$\MA&Q*c;[qϦMz k^;([tL2SF%{ =dHGu"m!Xm;ZTW0¥n;bR JVAb=i v@`p 4͗SDdo%OV !9 v/bb_)eBU>mwIs4Uc9yW=;rW=Xʔ#DFp1D7{yC3eEu7:.5~,K/<T}V+FOfg$ $sUQo{0GOQ(U5uNI Hf(~crTGsB{#@E (ꢏ@*q8Gcd/ȳGug3++)NPKb&P$Puz`8bjxVb3|Ce{|m춮[UN3O oH-ߞI> mׇwq|7^W_PDzAV^u*qyذ?:|E7f#ʗ 7 S(\M;NNB1pKA$q}U( gD㛚rH/H '.bIat] S1>i~</|H#r?(> f:Tov#S?>V]}tr2ؐuþl;>J @oSoo|(+\NW ;P %B7nchsaLy',P3IbLY'!_Ug6N|C֭$m3e|UI\3g: HL^V&^K,I`OWUYQX=dX0D݊> {*:3SGb7&Y.t-T_E\VgɺQX[:(:_#@b W endstream endobj 3232 0 obj 3667 endobj 3296 0 obj <> stream xZn#}W o<'l C%xZO]g9=)Sb%ԩSխZh~yM?jTtl\Z\-C_5O7{f_FCz}妿 ǎJ>v}Fݿnw7Hw}~OGڈn+mavԠ@z} et?xpQWߧFuqsDA$wjLج{ƶ ]htSq 9@UaOjZkQy# _tbk.35|p *B6CʭCr8@7î#A8}`x2 E09z@@ d߳ڪv>e SlL_ۊZwlu8Xp=(SZY|ϗd2@d&q8ǟOy:8M! ?Ӡuw{8'ͣnFHf?Mϟ0}{ܨkhM0?~m~} !z?OO.].>5 ȒgԄ)DQGXCt17q =b-pv7P|EF )&MĔĝ&4XXKDO\U"_$TS@. PN^)wN&SUs]ry3ilѥU̻?=~#/c]M"a;ac6;&nB2-#yp^@+)k5O >2{BF.;q;>)!be/75 /c1R.~[c 99_, ŲEG$ٔh ?rksdoѴn5Zb`ZǚEQ-nef1OʸBKqE?4-aN#t9ßYc; 4,N+P4Z R 2z7 0MUͅ:9N$f1,-8;q8&"x:`2GwOzSx#)ٜ ?az=Ӣg[wYCj3d)+ufJƐM 3 )R31Sm&嫬SMlۙ6cf#]`%v٥N &aVm䚣 k]ڇr`]UYTUqomzE!$տ'jc߳=뼧:c,Ȏ1أSS0S\K;嬴M$CY'4C2pa&Q2`'*BbRP)b.:jy5Mjz'MZg;'(>*)4nGw,H8e~Tme+ސ 3%U) )L4SÌÌclǹ#3 wNlRlX<˫`tUW hV b3;X-fz,҄CA% #% 16g9t^qND"EF"9N25MN$Cp˼e.LڟK^ӅeMp+]g℁u5QK _ Xߚ-=+%dWҫ)&au b纡qn(Hqa%˧ ~׋]ajҖmjZ(]$h;-i%^I3Ȣ㣢Ief#NulNMb t@f3*ە3ƮU)d+~l[^T r՜:ˈOSLjJ>ef*j^&z܈Bۘ׸ Wm8p/2:]V{#'%Vj6!T<3S%=[:Vilg6*5rlp”ƣapuqΏQ&C R[o;qH{HiI])GJh0rǑi IYgLt_^Ak&I穩zH9(*!hB,;ye[XnO$uJ ,t2&AåRvm7czzwt\Xd{^m+`dDx Ljopw|b=Y?iƵMR:El!r#}:+ZSc}?R)Iw[kS9ޮq4b .yses.Gˆ&Z2x7֙5smGka@>#UbIJ:]"/Cǐ\x?zll2߱=MfOK:梪2)_l V>b8v|beicݬo)CvjGNŀY\^T%vZf'46ƔkY"қEou;gGޱY;"Q`Eb}\L hT|z(.pp.rGVL5b &LSgf`-NNbo(9$tkFN!C)46Cq粓;kGmk 0Yxr-ݨ.]gfQW"G] ;ŖIuy\y_lV_U?e,]]^v3&&W댝1zc'U"d9L`ݞLK/DHލ19М^WwJ$::*ʶ@ #Z]Q<.IbWu n 5JfGQtUROqt )*=RJe"eyʌzA;v?DA endstream endobj 3297 0 obj 2930 endobj 3338 0 obj <> stream xZ[o~_aiߎ/v[E{<@$V<K$ԭEIlݗ<ӧT?*SX.Զ UPOS=F۟y~ze:W?x鿇:Vј]uz} luh=x388;xe0L|w'3]|Gp|f opoqFK](wY34o'4;^?? "`U}& yk6 vi^NcB4[ Yo+4B|GClcǏ ۜuh}E w𹆯[lwC|sxbwݯ;\x.{f,sR.x6ء>SsX aw6hW _ (g<12mFء#4 D\P:Lt7yk}eB& `O +BAkxLڙf/İ[1]L4w%4tSSkw2bvks@xqf`/v RZD(;x.Hz NG9Ah a!D]#+':~j`auPAt >KB˱@ƻVs /I`$gb *+/[f6ޥ2ePgfY<s暰G`AFd"H)hIf;Jj 9TLbRq+2j˺Kuni ࿰!) aD)lݥLEr lr2dFV$ʬxVGr)_Бn\ypJnHiWg+锨Hnjz42oNX`TBUk-BŠe %e߸ۢ"PDžӶY%dI\_ҿ =&nf.J=N缐~*Ff/YUxf2WWB,r}nw PfY7 \YSתϛ`\4k4ya ѓ-;KFe̕L QGYcE9Af3RRԎSIMl΄ RU*y#qbJ(4oy@=djгHgIsđܘp|c?@ۢߕCR)4r|Hl5hO1ӹPZߦ]-,# nó2n.EohLw/y>GGnWE욦e&fbҔ !3"T%sHaz}R@o{ߪp  d`JnUĜ:%ƁX"5%O,9||%B@j*`)ڊȠ7@-М]xi%U)50ӈԮ(_kNËvCiKZǝV"4v[+q'S8nZPf!%%lVZRR7{DfO4!ߩJ :3e=ZJ C= H۵wjO $bt`ǥmUrI[,O\m3IsR)o3St֑EC4Ei)3Ֆ엍Ĝeb=lCZ)3 f)gʙeHB UAY4mkEzۇ=cU6h +og B>%.}qvIL<;wP#;{VwDzO 2F7E!43ovM~1dR/i|7pΖ0xkȶfœh=oq;3P6Fr:xFnBRYQ5:Эޝ^|O ޭ*6E¤O/VSop$X2Q?}@#"}C!wblH=7Q_\weCB* _P~neII TsMA^ ^x6sىSSJ#w^L!ClfT.R:p02/m)_\ƩUDAu:HęDAA :b\}ly!ESg"Ԩz+EZ Er% *ѣxoz]}YA0)%w?IJ endstream endobj 3339 0 obj 2468 endobj 3361 0 obj <> stream xZY~_!oV!`Iȃ;O$uQ`g(VWU_KPqx}~_JUVW.Zj@oÈW~7Z}x_{F^><>xxxcc\>?_+\QzP?Azn@V-8ժ `QGOՠz|%^o ?ၿċ/R\ne‗t^Nᚠkmz_8ीOq9C+<O9O/ W1k([ Ӏ /i*?%ޞm:H|!3+X+j]nNNCNuHeגBu++^ 0ڰ=t-Q䛌" c~jf֭ikaq-LZ\)$+/싑Z?&CHlhf < ehS2&e={KLLFyIVv>i' F@@g" J}([PU`,m'jFiHU-8h['<ړfcx$fQfjcx*ivUx_-*^q B İ$8/'|eTU6, =J jT*M~@9x^j˰\AXekNk K+!Wj!sa"k=7(~=#ɖz~\l@M QnRA 5o 2h٩#3q$<{ӫCr?AU6o8]ky+y]BF < ]cBbGsx \LB/8 |(?5y%X^>2H(\}&NO\fNQn:4Hs49H$+N)t,Kn=3HLh#ӤYPoc>B3t+gW9TL" 9|m?DtsЖڶe)SmsaaI+2 q)25 ֣Tyqm߰5 B Ȅfbaf&D&.2.]帴0$RwFmUm8RiJѧO(arۉWȟ8wtx##(dYg ]K،e6esv^sQN"9C3Vh12m5Z`-*=r Q31B\A;1:ٸ(Ⴢ'6,ao5 /U9Pk|eڰֈYڹs[Yu>$Fa6ekPj$@HVd( .m93P6fڬMjyH.l=RpHkɈR3ur!LU.,20C V B)8P"J/qe1Eo4AC aW޷F%.:9璳ڪ;X)|)H~baBF.Rd#MgD/2i{.S boGѠC\ b7~oYG|@xal kSmD &WIn]ӕ4K%Ar9z$U! , +\w 0>P[O'*d/^k C6,{۴jaqb*dHL eiZ+S>ohUy\ P,.R(uΞ~ۦ޼|iT@&b+?Һv(6i q041[$|¾1_tN2S\b^~͋O ɅT-iț7].- 4PesAH#* }}1 OI 2s(> stream x[ێ}7U-:H? A lI5ϺѦy׃j^ *DQigV6JkEkN3|&5xtZkRGoOp5|jTsYxQ<8=Oη؃ҏO.S]]kŊ:`a=~W8K]De 2F6*g{B~{~BT_5gl= QFB>H]h)6fKaL ' EORLJ%(͘8 @!E :xFs3SxyvDdyn0ր]6FŴ7dqYeXht) #'H~robd X},,vxn Na0 XԆap`IG1CW0XF׮>,,kfٲ6DwV^23捤|zڒOKDhp[H5.m"rd@G&yrb{ Ќ{cV0Xo37؟hb$elGq}%kMu7įj0ںWt{` @?`UvК\!L ) w)`̐vɶ9S7YG6lltؙRJ=C[)uS86i p[90>BqOmyW##cnmYȉnKiX#,KXXOk:Bb*bn}fd9gH|FtWVf2.殺mr ^ BTGi`=a\:a01)6&&xQ_|9|8 }CW =\ w:)L2-Uh8\1QHzLz P~O~maҰ{p)n`vgMUZq5V?<~ʁLY3)Y1/1# (h s 5ݮŭ?k~Ãj>6ÿ@e۫6nS16A6NX)ÓhZ)d".8vCwCX[ZM{Y0ֻ:i5reo+vwo?zx{bZ(I)R [JIꖆ*S;EĈ4%JɯcZ`zzW%f,^Lh+^)>E2A,~9B; 3(6bf;3x@8#PlP_3U!6P8/Z[p 8;Xcʔhϒ*x?ZawȶŽ=ɔRXLu = (UFiaXca3`A#r"}jWb':'9])>tkz]e•꠹PCr>K%0CTHuY}aa{ &)ڥ"O 1>ˆ9}:&A5S@"eBM3{5@*ղ_1H~A7r0 jqp0l 4yyU%f=EVSKT3}lCF8׆ !}WrL zPo|:St^{pg߭x#ppk[6 r ͏'SSܐۯg\6L] X۽Q֮w$S BCt0qn bUrJ A9)I aK^ 'ꌌUI:G[[M7g8IGiSSBMR&ʞF{(l"x2t9Qhh C%x]׶/x^i L  Slw?A&Y+`e7f}qnDBnc R#ծf_ն#Vsj\*%vz] Lɧpkk-s-Va vqP9<}aڿ(ɳ<9#8TywsJwl \ uf6A|N's/ o%C ݶ=OӖ,J%> stream xZ[o~"R€-4! N8w.$E({:0l8ofZh~0|yǟߍjTth\Z],_nfa?_iuU8Rmc '(J`Sg`P^jTX5Ixc[8~1PSjhrZt7?}' Pm5.4(|{߂[0ckQ~}zN 9#H8+ $/ P^ wD\HIq11Ym[_=0*x3ޙ;3 ZX{hBA`5#̬+Am`V{AՏUnJ~1;&>A;};5/P}Pnz1|Q44ek'^xt7Y_' ja#| %D 3@(}>ZZQ,mhkr" n S6y!hf fD XV]P-ziZj .uBEXGQuVClVC,3B"nyA Q#%P ׅ+'P@ndiFw0iWqq^%'LZG:136Youx~"/,7Io;wZSQC: rGɏk#KThUƖNzX/~|ʓ jh"tГYtA i ofC]S8ЬdX][/S7К=ZP2l}zVɌ8rYF [jǍ Bك%6MF Hk甆>'C_Cr}TLn0>%0n؞0tM%!:fG!jO6"zN Fs/cv78@TPa1ɫl4z1.29>wzZg[-pqÄ8EbsL-&[TbdJ7@eF6?9tҥKG㪶_%}^@R/Z?iBhr \ ,.,XStqþRrj˵SkZv+SحNS q=)_O.5OnO2;MNL*2bǓW!_mݔLZ/wLfW;JsV*fb>AlA<*'95+* |Ry,U~$;X 1n>Z[e4=¶{'izzmtLY+ӆoiKZ&y"{u%m5&ζv][1Xjڒv ؎%Wے;ҖLmI[eT֖Ćbn3(fBI5ʬ1Saz.ƫ1e!tFC:Ct8Tk{> ={%%J/%j"hxz)j~7d;3EU3هraJΟx&O %9{}>!Ԛgqd$ʲ<4R|[1̝5,*sIR_m{M7~*_`Գ@N$I`U$'4T*͂GZ㢎l@a`7ZrC▦]ceU}& endstream endobj 3409 0 obj 2783 endobj 3433 0 obj <> stream xZˎW-@IU$"b&ɴq>HI,Q(ᩮDǹT-4>|}񧷦~xw*׹VD m|}~w0;>=?oy{_?==>|?ШzU8R]ptWUTF :?~&7RGbq2cOe|^=JKr<¡ ਵƇ5TocmYpvkuPxD7+lr#p Zc/=W~:L0{cG hJ?5~<-dw.{#Nxbȅf"4Ϩy@?Ev?$w9ͮdtz5W\S-;mTP4."naE82c Awm],4Ú\uSLİ_2$ חgAiefÍkjkclX]PqVx`otM7Nۯq-E'¾>EAII~Ddzyvԉ"Av!/[E\,RK Jeu{JPڒcœ@S{t9rh Xۣ8ֺrN%g"M]=(v=6;(, k}V};P6Աa Geoz:lJ8`|Yn )7$cf.DYB5č"P"{s#waSM*ÞYّUYc;׺R ً&>;.`xMGW%<1b3-_W#gx}FR8,349 /yvHv :r[>DcZ&&\@W*m/bT+LЋubi`%o *0g%:Dn(4NBAU`fp"vDYFl?Yq 0 FEz5_ؕ?o 3^Oe~Fd+s[VYL[?d88IBF=8IIM&7m쿩s[k;l4ZyODhKP.Fm/vPۍ|T::{ 'L1lvmaWj43t3kKcy_>&:rw/8*޷/_>>' Z Q٢G deg {{& >_ǁx/}kO{P{@n|g(WIl~eۢ@'RI M05,O|.{DX5q;=hCN]+>,c u`7!˫E7YqMp4񇩷i &,>3]"-g+JjƉڕ)DtL*X &9ȞvTY =6 !.Txb&F lPmzܒ\feWz)LhiW;Ĩ a2g* r'qe uO=GlH6 i^ Fg"$w8]:羍HBt$X績@jIBvDi hjF "qSՆdio1{Ń'r=M1+Erȅ^^+SK0T$z)={bE!cKm9H?Njy>N"sa"D64Pg-mfm1,X*`-`[WmwNGHbVt g+wb.9XgfuF٦ 8 ,O|X2xnP5s B`9U\)<xI0Uk@׹ V/>5g\GJp%Ȯ4p]a#" Ui[ ||g1EZ.9>l,H,ooJL et'k̻|xZhx}f;/_ j<7U^i{> !Y!*/ -t谺'; ΫcS|X].(,\׆Gߐ*NdNMt/Ȏ K*/op^Zѷ3xx!͔B2Eڃvj:;H1Lu$^8Y],6oSdE#,$B1ު:%&xھw7`_[qxg endstream endobj 3434 0 obj 2993 endobj 3461 0 obj <> stream xZێ}7֒ER$ݺ ȃ 6fSQ ;=(TթSEV7=;~_˷ÿըVAh\t-x󇇿|o׵ J]ݤ O*I( Fm_4~kQiP蓶C5} .7 Zwy{h,?%(zgV/# ŧ{?#:08B?OwJbmaU6CmlRn38b*BV;5}(M@~'ϸ~oq1,oޅzzț͢ed-\]M,C ]Ň*A.4VF\m-okiPj>~-?__jۭ-&/"gZF+X hIu;ߏ6JؚMӭD_y43N[:4y]P: v5yMд} hҼp5~;0C%lw|313a(=aMZY+*B#cL'Nb]q\J5%H!=#&Z3]#צck'J) "&ACL *PS"N0ӕ3JQrQr a c夂k"[' g4L7XWm6U6[?K\rw$.@Ys\;+yY€)@86Ê5NW p!{֖2h7AD$..xčyުh<y*vܮMm]hk:+BbdqF3! Y i_ՙiX* $k ÈRD +dRrOGHOd ISθlj16W`Y/9smgg 0QRq u#qKo8!?,7Q3mƐi")}ذih*!ߌJD5l1׶~\[s}jٌ(#LHb S_!fh#tӓ-8Uzg9?BrN=&>/On7?FAu:2{IZ%ʯleY V:"SK^%(WQ#銹i3P7k*i;{ܭpCUXxb$Ep>'$k bc ;,U%,e?Np^Cÿ~z.\kvh\O( @3L8=Y@-n|nV w][?<ݚ$^@w6?܀ea>*8W=*R\E3'K>t&ɧm1f U%3 yӱHia!V9v;ƭGʶL䡁ST"F\ԗ^͉b?}.Gi/KMNH3uU{ɃZ+AbH/[ƎJSS+s->/6ro㰵q0-+s<7WP9N͕" 7vqPa48CT\L%z~p?ʍ¥\oP^B&ɢRh Rħ2J  &F3.(oȭ#4Ք' nO$5SnZ0ok:Pe͜Oi*Py$hR$R*C2\N*R9nho+١tBUTat:vR ztw&PE/ lo4#+%M:t_`>|]S x7!] BUHGQ#T=CbN8yh9 KP-(+Az*8Ј}0l{45Dd`E6s5:H^cKz,䬑gjtp_hX|+b#g&9͸pl8}W+?%WtB­sOmVܤc͆u .\t7#F:_Ͷךb7il;Oܬ|Wǚ$=VohJQ<_1m:W"VmuXgiЧb4CU_wQZH w&>L ;*;EߤrioZwSz?n͈MKmJ'G|)!bdrPjdQI-*#QyAͭ]^2K>c4O5S1\/v#;XY[{U%0Ӱ;XԱ '(9J~(ɳT^@X?9q]t̞(@n_#]?ۦ4 endstream endobj 3462 0 obj 2861 endobj 3482 0 obj <> stream xZ ẀŪTԚ |p<@Aw6p|dԙ80v=##Kׇ/o?}Ƿjv|g*W;oj5UT/0U_w_߾O?~~{== g[ׇiT%63U䫗OKԸ#Gɑ wɍtr#9?Z"{z\?Q%HBgYnF{vMu [q-?26li6'z_@? =|?}[D y|Yw >=x<=ĕlX]s[s0驦m-eD`ĀC0x}KjYVMeCBDT5ؒIyă?a֚7^s uې1,<zJK8X,ynS.r~s^;4+&796hrtC@G煳gajN3 M=;z yj:ISǟLV݃!N+j|߫ߏq15u$͢T ̜ g䪱fȢX*8/8 O%.Jj<i4;`@ȍ0Pݶk^=cs2ލW=G,9cNufNaVo_r冑TS^Ic,<!uNy|:t,n˱lgJP+ST._kԫbJ8Vw6"P&Dcg%v/R{`ٕ Ka5V:U\)ďrxaQg\>»P`jGIEBW*cTU`p[.Y\vITjc#ZIw]饴ǔ_7[kQi!tR8uU;lt M[LE,&󊐪\h {1WǴѻ'eȯ"sVCʷc+n]9XW_!tz4}/F_qpCrVgD97<$CNvo:S#tMcwW]k_ oX>ʯr:Z!uw+r(Iei|UMt&"Kq4hELr]la})7W%lQU=]vIVi_Ak1M7%фuCI3(ـmNZa eZ<3;2{Lyż[/c\'oXiz~).Y;CaĚO/7J G r\ uT_^O_/0}[1s-X5ea63F({;"nR+s dqGU:<̒7lSYLtɑ6jYTnzR=[,]m7@Xq Lt֫ܵLA -{땲NE'h ',,JF<Ɠ3ڦL9 \Kv|o^|jQz?0 fZV6IBW4΂q*@|wFb(a E0tZQPWsIW+.TΌ9S,HIyWcLn^v@`Ģr ˅ᰨk /ǚaWwiU=N&ec}0m5ڤJm Q[8VPs큖` HtR`t |ؓ>kҐJhNFS(n:R,LexҸP!`gFhf2Bw@JxaMghj`/bcqNǽ<|R! 6Gk6!@(zb&ӡKs27J2{ /ͯ~sWeZw5n/"Mv 3h=( tS$د =)] ! o? ; endstream endobj 3483 0 obj 2655 endobj 3501 0 obj <> stream x\]ܶ}_1D7)`H3S@,ЇFl.uH~%Jf4[0b%^{TT<=~y//?uP2[ߘ&}o>?So~cˇ1O?;x?tHJ5!}Q9uRZuWuV*j~2'ZeMw^UʪZ|>`dcaU ;2!f `2BKSm|@`S"F׉kQOk`?_u}|_P!O=PH7'~ja}{VSR?d')NxhXX47 k-do#x6뼅r;Bl[Hup6S5 Yqm ~+[v1mo!ح 9=@Vӑ v ܚhm)(0-DjVh&׳GkrYvȦKH*n$kWzH<+l6tzxH6ekc\BC\4~qĮ{>%rh[轈<HiDAǟcpL#fv aZ1Q+,Pr]@E`Yň\&!J3MU`N EKY 5! y](x*!i6jPi ?B)`ɩ; [HհJ8ݬk&3\jFCŮ*+9PxT F8UuKbZ/{pC&{9V.-2P3jی8 b,'~8 }D(5wFzl,Sle|KmL}\D Y|@_A fwZCL{gzG.x#Iț"NNѵP%]p`?wuUa59+ !{P a #3WmM<5Wga7ׯKjR$]+B= g`yON."Ӧ!1-3p:>fm>H@2j# %ܕS(~&~P{*uđrׅ~;ȣUSZwP @ |n(/F!4PNQb ] JQic< ޡ.+t%a6ㅷӪJbLJsQޡ ٳΧ24#+prw"x6y75"r2o2-uj+XRrX̽eٸ\s9`ÑsY]NF/NwnTf)I%yKY!6nT7%iAN=a& cI˦X;EZ`d059OUsq-G)u|D -Xy*^KqrcbsrڗN7:Dں41gI9vxkS/ّlsz>/.pل$uc$ '#z&,JÀ:ɿui_FI/f|4$棉12 g]w2K&gе.vMn %:ܽ"LΤo?+9Ț Y1|6f{92dn-WBɽ훔~O$ 2;TլSdV> .ukNpGeIX!aw[ᦎWף5carΘD, k M{}> Bnhykѫ845rPfF:(X9qQ`4oTQ;t|z}4l6('}jdói-:E$AY@Q5v~ȃ°ঢ(m(yK#G`!L;D-b/vtlJˡ8a,.$B]]; z݉oO| w"Vy4z\3%vؒ7!S+? ,=hvpOE4 y[ȴ7 /qоy::?DXꠕU)zLUe{bh;IdDs mLfvr.i86r ʿP:3K"8pǁ,@k pG|ZDcx7#;۬%bYIbpWUMwT\mKw!MVH~~TߦNit3 [щnmd+OL,l403 Ɇ{/U_/~"F,N}ZhiTCr'lj䢱7ss4dG9. 1 % nL\OmMO: 3I %HuU9rp=O mXeG TDdî"b ḚyӲ¶I;%2}]^NSZպD((Ʈ"l(Ob1C%朩< endstream endobj 3502 0 obj 3703 endobj 3535 0 obj <> stream xZ[~_!u.hZj)$d6; N;9*]K=YqK-;J귻ǯ/>R?twTjcWhwz/#yy;~pxCSS}]pcpDjS~ ttw?~<rU<>Wi<~QSZY:uRQ@o9OssG6v]T=ԦRӵU?e nco@^3K8h(*4Xh6ZQ (#kmts8Ԁx F8Z7M f?::x4#FAs#}c& eG4hNF:r{HNF_|[K+"[,{j7 ! p!~88WmB(f1l.Mh}ȭW`**o얁lpJ<0-b(~(, me64xbSl<2pcsu@7ֵA3sw2/Q=˫8lZ)k !P6uO(Pej.vcu=L>di)(GgFjI Z\LOYF?ԅiɺ+BxÉaVci td>/V'Vzwb` fGSRbQ𺔴fa\m@K=MNd"d`Bˀ)o7(.*Dq'atW;\ɒØߖ\9kgd.(CrT'I0)s|יw1~yqREi9';鄩@;s4ȴx -T#zѶnHl\KDC5:pGxoX_oU_dPd vu$\$_ g&j{2ma,)xGx !G/w*N0B[ ĞX-v' [:N&5QK+2# _ZCp"(TN@+0:\̑p4(Fmf ~˜xICh9R3VtE&8e@AS^BW5B#1&Vpu+H@;& mo'/Pd/m]a(r Co*^]2ǗEd zxYy%zh֋Yl4M{ s_.P;"`NxU 5jmE$+] 'k7oO*U~a^`"9m-[P/n!I澰OTϖH<27[55.9i)f}PM HMl/߶3WcZjVƂ]̍kdQiR6Od_26۞ݑ.i̹5{' UtfR l9߄  Ȇ^a^!<[*a$0cco罦Ȗq5'-K15(aC,ns1 Y@4L1&8%& ,rmY& uDN;VG|;sڕr?ʄIO#7$aH"z`]pN9ՓR3-viKL;ږ@߿kY7]D0|o7C3+Yr=2r&)5*h{ ƽS4[g)ͱng7Ke +93ѣR PX#o< ¤E}ڤ_h 21%pjLV©3P)dHg'˩Gު-8;„ gaڴYߴ=ʑ!DTQJZ+ӾB.:9{&d^\F#ߙg"5 RX|wgmY93 3,z嬜K| "+# zk}&nZ8"yݹvޡHRilߘʦxS$yK\-$kRDHFH繍P0B}4;ʼ/NvM{E\B.d^Mv1'V>{m`T0RGyZy,Yȳ. (z97͢U`d$}yhգd5g!HrRHxv0,3Pvp67"sL3#6㮫\sQyffb+n=Y&͸瀿[(Eul%̄}rEe,;-M^fZRRpU':i6!7~JîuSVZWN& +팖6B}Ub'DԑMowG׿s#]fJ@N80c[aSѝqYGWH՜Ӻ6oX_-.ݓ IcyKq}aߟKdI0N^7Ť=$ؙ|?Vw\ endstream endobj 3536 0 obj 2941 endobj 3561 0 obj <> stream x[YF~B@ZU%h Z=L \CC\g1d~T%z1+T9u,-Z~s3~7=hmmdӏ_5WBJ77d5o+El#}-L|iʩi@[ >| hŎ}3%޽ߝN|7܈osbg7^}"?R8D/bRi /$s^s~+O\)s=\x([lVXԘȂC⪕ۤMk3exÌ@*GjE5DmJF^,gM@bL6h#A1|=H bMr%L+#ǃ3|Mt`$KIzQU~o^2jXIl](&!A kegH^8~ҕ+sub )RToR֪'*}*,RٚI:}Q"E(P̾"n+Jh5]~YǀU2%<]E %]*Y,I.,W"d׻,IjUs9l ~[9 n5@L,Xdn$y*OWQ6݆ EKA+(KF`J} "L`XU,dG`Pb?*Ba׊XV,:^:̉c=MulKo(ܙL |0S?V0B~\yr@)x4m&n][!zL(o~ZfHe!/ J=E<Ê/kaV;=[zJ&HhJ1[CP3u:4$H91Ʌɪ:Rhg#ฌ'E2\ݴ\Ta Ƅt|%7@6m1}G݃یpb[2*6AL+Iᚪ5JzZ\;>t)}KfpVosDT-ѹ7AP^l({Xjr4b"ӆ&R\ :eS՛2$Vm\Ic `pY 6@jh.,558#:m>z:x 4\6_^@S0?$bҀWh.W2sY\)SHhCXXPq}f-iA\:2/cMfH'BM O=,NKܕL%|a=rY :яq=zJfVE@=V B8W-6Flt1kA 㔂p*r\[1aϙG1S205>QG'O8m&zP#U*ViݤY~R(*t.^y|@YqKԴ$3΅i?Ld.k.egj..\.4*n`I"LKڐb']^@sr UTluȏoEevS^C9wyeo&KrA~FMr 'N *.U=9E,DiN)uFE$`B>3]I>A,M`x̨z5bY9;c*Z"+0y 8-u*|]sxNK#SC6{Ε3@~.Jҋq>*2,8XZR=X nehb[VWX 4yu 8@0zo5༶Y~X((+7~hXٞS@1=@KHm=,wԖ·Y-eT*.s-O>>VzfZA2z. !NX,7P@+ o ܥMm_tyo +/6pul݃+c_y)J6][%R.zulcc1w/ůvm*RqI1~M endstream endobj 3562 0 obj 3591 endobj 3592 0 obj <> stream x[[~?b!o: ^C ~p| &ƒMVNO2=Dꫪ{Uw<zϿS;)v> ~Bw?I{Šl4a7?| !q#>|tcs`;[Нa]w7EF?yl ;Lu;Ou]xh>.BzkH*v1ɨ|}~~/zp,\Bzx_\V?U{꠴kQAtwfo,;}CC %p71Iܓ^'w&|fe(rIxVmxRP2bĵ1$o# Nzwt:M7&Zk )~j שuqd-XhJ~`G5I Z zAX'lO #`D-엽JUN] Er|C^)^b% 1"=]H[ :뤪z֎fH"YP~߄w({ y%IS#J=d׌I(:+`Q+-w?FL+ hgI+;m`e?=^a=@s~ )|#kU>;j0sX;BSA+tV`ZH9t5l0 ?}\΅'b=5;j'XϐE.,ҧлRZ끆OW$}q~9+x]i`F{ub{ bSgw ]gdqMl @w[Ac80WCmallG7[|;C ad|n\SqU#O"y`Ѷ{'l; 68`8. 7)d{Mp 9$= ށ5bZ?+4ހ\ \8,>*WBÍ՞X %[>x1y4a yg4S&j)Е}t}}sąa^|chV6\ 6,Y!  E~ F HXD`,%bPXi{V̓46 ,0g6ОW}|Yá‘x?_+&2NT=> >D|+[`*X IL$$3h ^Vdp0ZVɷc@''`d8,x21GX|ebu|?Z;=V֦Dۯ&Ӑ\NT#[-~YHRV1Scp =yH^r{Gb^J+NP{bf5 *-~,ɂ0'(l4ۮ@X*}Κ,Kq6/e ?Җ4S gM)  hňu񺴐sX&BiA{ɑ #tdj\M? hY?(7VX'S*@!kw>_qJh~]\1sEȆƔ#s7rJws!.ÀϘmӌNQTѠd rjJ $qAj̞R)fN7@{qX{ڨ*j% 'rH0!wo'2-=jRUT9[]m<4 zّxp1q娯D{ښu'QSlR09DHi4\}*r\*HVZqh).Uǥ\d5:@Sj4_UwMn^C럟[uH+?w?> &)[ywzN<1gG 'LʵMw -́ T✍rdf0‚ǜ ޝ)w(8 Kg&W:,^[x9'6'O9 t@TCOWńR\懯X|ʧE3Ot98)ŗU0Muc,J^")e9bWE c] #K1@sPQ(WB&dQr%9H @iYb\I%+BMu1<=r"@7Vf-y[~]zfْŢB#Q U2}6= QԪ8PsOKEaB5L.-jU*Ъo0JkY\*7&6-"9[.%W:bz,7)rZWʽ v{:XpP>c/9 Bd8`Xim(pz~9׫J|O,TwR9gq&is̼> stream xYMoϯ s  93AX@AW8d#zlJ3Yffzz~p˧~~ÿ;թ^{|㠻O|=.41yy7ǧ痧?;0|>vQ~{}N_*jTVMYD'E躧&;7&ՅFb܃>P; ='F`z5Fmi6Zht&]y5kw樝I{x(]Bt+hwJNѡ(1t W H c0Cţ` fpr &PL'`wʃa1 Ok'&^Č0,8'Ďťd `!@EsʞdqT1 zzX$L (hnGn2^.л,f3KH ެlB b8(99> r g8Cf 9Kq]skvkq;(nU*4cbto.¾pn"i|Aۙb`M2fդmEp erO0܌F>HX&ϖHtBq`p}a V%^ X&p M&6f@o̡x&.&C[Kvc(qa1 0 0"JN1@A؁sؤXiÕL[|%{\&LV.P|$㊻볾ke# (e m^s{*8 1 K ze LFWO܇>'Gw9ECYB=p,|_\+ ]nysۺM]3 :O %ϙFFt3o D#UϘ'A"S9oMO2ܔ5A/$>vۗƃZ91UH.T^Q:u# 0K,hh:?d@8GDEA{¡Yj A µ>m`WF!N.I3^k{A6%3^:HL,Ȥ9Pd%zp7J|d[2BD T[Qq:6>q]l5%giQ)1^,J3<'Y%qcSϔ(E ?ð_Pt&u~z-@ջ&DG,H¸T4K8v H lCSMlI[~)/mEMV )5ӼooAr/Չo)F~:3'ПrI1S[O=Trwu %ϜXlN a/UdΤMo|3HXx zq+Y> stream xVۏWo:d2M;i]Dm]{ޫcFgm7;مBDBBm%PUH<*ED$@e#y$|xtl9;92L^JjF_Q)}&[>ypzљyRu}u?J{?/F+a"2ݛ_|\k^|CU`ht q~s2j !wvO_GtX;f}`w p)$GE*Ciz4LOFqBH$Sޣw>M7q1%MMzػ?)}It|!<' %R}ĕChO`{Rj=i47C! ɇ0|r-/ykG WCK<-.uHe^A~7{Of`|1Cm)e;d a^sDcükpYg:iA)Cl6(lR[Sٶ\eL.J^oVY;V a1SЇ{E=P@[LhGm8cX~A %1>Q(/b WCuOd-b4QRN`]$Oѿ6u߉ozi+hO~:~7x77KYwĉ0|)r~ m~~= EccO>qs#ϝ<P.]z۪(֛ sV}v^2n2rؿCYQVsu>IedW'%=iQt><=tR^=ѻ;~ۻ> BR\..}Oʧ.Ps!9bC]7b? uqg Ox4:r-U Xo4ZPpq*MB*YJOY&cӭjŴؼb6lj"X=D*ܳYV*æjV鹔4Y̦3)!\6g4Fì i9x͔YdSvZ9Ttd3FɰW+ ӱ5f[ƚ/5ˎ j5Fsʹ4fVJƬ0xe6t*N`;` v}9f9fQTYV*JaZ%s'(haSC hrQh\5(Š)'#QقuQkTXVnbWfU5=b]FbP, NpX)(PZda A븚dR 3ß! "MQ9yE)ҡx Yahd p^3q"1rM+ H)DkJԾ(Ьdk}Dvɀ27Srn V2P(u#>, D&? w 9]2$5T!q1$ˉ~l r~u5d/CSJ/)KEQEO526>obى/T${SQGu_ q7d%٩ Mi[[Ep7zwnTCލ{/c9 ogGs%Z𾀼D%96rng@i]vF:&;3_s+ ޷=2\oN:ރ,Gy 2$ endstream endobj 3897 0 obj 1864 endobj 3898 0 obj <> endobj 3899 0 obj <> stream x]AO 96&f&=?´؁L)VM<@x7kQ13.qe0H|pPewMJ oKƹ16ү-78=8Y;{@ޯ~Mg j[8=O6=u.;"_mKd USU-4[? }Xd-ISSNc2K2{?'ŴSe}~my endstream endobj 3900 0 obj <> endobj 3901 0 obj <> stream x{i`SUYmh4%-,6@[2 Y M@BE 03(0ܾϹIڂ|zܳ>YϹiscKҠň"oͬ깋߹!6BTsW{AݮisvdR>iwR D(o}]umeBP ~|/)sjeAۆcsvkkBsNest$ ?P^( PRhuzdXm(GX+;>!OR~S3_ry\-ܸ\0BQUߚ_4j:Ut@J>p۰\ } HԲeaյqy/ȯsMh<_WS:h@ʩ5G hjU][=Oal+om]7&y{?Syd6kIY:%Kb?op;[@:T#~@'#^ukkYZZ}sTn=ѴvJhPUB[/(+Mg}5_52v)o\ zT/Wwț*r*b`--]ë ے~.֝_]_<kp[MFgNOj~>zaCZ ׿@q4l|w~U .L*ByߛouHbRaDu!O?=oq.#+a|<$4oGU5Q|ٮUyA\qǐo2?yP&ζe UZiJ}:S;Prd]),.7r``Ͽew#8 (_A}(O"^ k duy~IyN# ó Qp\W0BdL- 7sD\xYsN퍱Gr2C*MLA's#[V]2MM"?b*htȾ|&-ts 6=rBǽl-*%k~W;+Ofl?@LۀAW>V6 KiJ3ꌣ/&)8VӀT(R  R3R=8ՓIO3lNӢ# USǟE6obScc-J(hId2Ƥ19fC\)=6a{\q`<VAp%ded 8ۓ¹zld6ee Xt´w țx[zYyi+ q}qKK^~|!wyi[Im_Vz8iSt57kSjU- d*A}n2M+=CFd`# n1?2t+h?O'_l l)qhi[ޔw~͵4XSz&jӥEɨ2 H*lT@9@EDn.Г @ljn, {2; Ѹ緉b훷oݼ(]c iݫ_7._d\{}5sغ$'WU8yk[>Wx'ݖS1dyRn5A77鍏11&'`#j5Z>EmrfwJt!>[-P-cxGB`2XO#s]gW_tܬӋlǣ BޒR2 XZڷ(&NFXrLjS*y_3+Qa$5?'(Hp^mtgeg\aZ]QZ۫?$WMFɐ!؅#l~"րz-ZR"FZE*+=)0-zAe/2Cq5?8^3*f{c#Tv5F尫 |v;u7)"t&ؠ-) <΢H_`/|xrv5+k7Jpm43Cj|GJ으x@ldoYp;ҍ.]d~]p-@P 1$ܜޠԋԫvm]"1Sg]Ӷ.zg_^߳lk_eUB扥E?+շ}3.O4,QTZ6Fi0p>AGJ+ aߙm̛M6A{mC8n{@#qdz#YѨ*MD^^צ{$Mt/Ý; x,X۪7 98!8i܄9Ҍl&ýht:`tLV=P@7o­LI'F |'1${̐۔Mo.^Upm+G۷no߸}ۦq;e/_?Wοw1(, m5M&7f"9m$ HYD&&O M`-!nKnBܻ?6w Lxx~|cҥv>eY:ZYAz*E6ɑ-ׂA2Qld_Zu,Zi\]e6Gt^^ |d42ך.PbJ)p4^޹ &!aG/}Q6f{oKʧ'}zGg#}8^ԋ}H__}ܑ>[>#] j[$[Ua bDfC ݟ`"^tn2M?+/ғgO|K_~tmqso~ŝ>!_2n^s-o̻o>!=oā7?k7FKL3+7y᝾tH]_tȡ b,aXCV0RHHð,謎ɄyE }dIݶ!7R\()mdgf2/N/*n?cmm*3g=q1 `󤊁c'.=ҹAźͬVkE12f(1ehM@Teٍz";Sԍ:%K K00/RDkT9:&Ye¶ˍ5٠_#]fb[=҂C_YX8i.sCa[wsrۑ=myu Dx^!-*اR ا D/=" (, 5ˉ K;N9iip B+24tqd>rbg]ۉ(@NC/ħpwcs䚴YZKOwc.Nf֥?;FAYE>AE>B-Rh(LpS;M , SÏ=:;zM@lFl-W*xd.lOtgP-Cs 1cD~a_ ;O`; i PZ|J|r2| `KNUE \`1OI1G3^h9K d XJ5RiIY%z_K/72.A  P`JErDž%"ۥt5}6fG Yx Z 9@1g%h<ӠsN _Orvۖ_R ! àSjQx3 6D*Vg, +YrX>gEJ<5)rFZpn~D)M,od7crD^ViuU*~]-o"Y^M@r,dǀ9|6*o2[3x~sD7RǚԷ~I|$gVllg؝iTuYfћO}QGUK/;7I>S4F(%2]zvv=? fsa&*z=4CnKzbEOy*ʂ'd=| ;Ohcُuw1ȁsj@dVb0 Ո`Oȫ7qb;vJډ?P 1`#ZAǞȂ'!u:XHB$2-`nLK%ۉ>/v(ixö:֊9`3ݿ<(%p" ErAg2gB1<ՀzҨPT %lv%@bTj )UO -Y {o=šCH?k3:[-Y0ڋs?H/I p^ˏoô_"d 9J 3re Tף+\ hpq܁*DEE,C_,q!kv4 o[MފhΕ-rQ )(\8c8OCh7<> sXQG9Q)9S&0$'Շ H\:A\0jH!NW'zg l@ݝ@ʶoV?iIJRH^lǯY¬ E:r7ϊ QV&ILD}.64h |;aV ly#$t͍'ml?C? ˖ϟh4D:]Q>:&Ʀ5>A 3t] Ș-o]o.e6i㯾uKomamwVIp̯hV-:"(}iT"h 9fz)icnp~VBOji"JM(fs#o?K_ǘ'zwSAXAaR- WUæ= &oaktџ;..sHIWel VC<@9biqb%uQwm*V1My J=ތ ꩾ[ a5U(biQ3 IU\hUh#|ZNa. pIwm' fXQ?dWfYĸ&ˣ(OT Tʞq4\#f૭3C䵕Е@20 x g\-neA :XЕh3o3=dw-V`iϖZ"8k)-faOmoZ븙v-}l }L͖)`z "L4p,iFZDrX`FYa%>!j0S$A .K?_niM&7хqE>ӶgDg}[";j 10#ᄒQ>*`N.8LB~=;{y\}F^G§_x?u}n۽rԊF|n6JOA;^S5=T 27? &4c╄Cf h)?ʧ+L&(ۯxzdU0y\U`nƥ9R%qǥICU'M\zfLx&.Lŀ3YmٺF `=loANP`~ %l؉CTk8q2PP"@fQ[VD;vU||L/^UFQ-V[PXrgu=L =w>o*|zUҔ7>gO榬9#mwwʣ8 ?{3  d,PҼsXU)JSa-h*':r_SVò\<%(iVDɂEjs8V:>ϐ6O2zzC[[FoK`%F4iJ}ԤTPj22Djr86청3R:\h@y|çX<`ں K&3#<2WB/7gl#VoYFFiԜlآc3vH.rr(;PE8]"X_/Ea/jcXkyxo_{E|KSfrɗ?T8;sʥ e+K_qlN.[]˗cs:\@JHex?E4]} ݧM9;36tHZwW~[_?" }]8b9 k?x~reCA5ur+ Ou 7*&c{Y,^zb\$5h U30sbI84Q gGl[옙;&P-okok.o^bPdy#1K@ɣZgY?]X$!їOQQjkzRFǘ=.5!!g 4 *XpYVI˼wzfdoédrؾopZQ&!4P|kV`4v %0f;QmU&D:]$OcbI+ 1#F?{P`a^B?._9]{߹sg#[w'zg`/ƻY2#9Q<sTw)FS[t:bD, #7)^w"906b`7N&p˟u%nl-h7Jണ|xqAiu@4RwFv]+X~K$ #N  Hyl6;5vYgc w)T5,X$ġh4،>BJ*-z!5M0&9%$ Di"{o䭿:2n ?:'w4,R`'M7K~ف3Zjӏ<ܶ凗A wӂ]ސj hAF=,b5hyWYy00t;/G౸pް5_̾ڕ_>"Zsㆉ}<~Ƽ>RDz}?n7wC[փ%D͟U"@<\,,8nHI"1\ AK;Wv4!'~h7+m績-LJjV¾޺Qɽ,F}-0- `M923<=>+;+gY+a1(@DсӼ}dF;٧}&m;w_ |:qN4|z?/cwħ\ttZqǂB_ *FMNK tvHmAy.䪩,7 ,h*}Tzm) @?K(xO}Ti!CZx i BNSPYM ,:X~ jA߽{|1~kCk?qV\^^ZZ^^n}hև7{L:>D9ގqٞϮ]|O<3W]땫_Qg#O,p7C? ?̙鬒 QA*a6?[;NpTKϣ& 6Z>!E/\1:ABԄD܇k7(pDn*J'QG z.3 &.E 9B&Q$p F#(ZP /Gy ZH6r,LAep % ;8尧3@F\P )pMcw2 g dy-gA_ ]}fp:(z-Ka39{;L$O+Fk2gq븿9|) EX+~Rd)QV|':qxYIeүH޹#fu!{/4fMLPGsZkjji/Rttt }~eub8`x݈+;Mj<ӟLo,T+kpo]Y3g= 뛝{ii#=9rΜ3#4ΝX0gvsf;Wn*2qXSMںFg?gWsxKZgzZZWՄ&L.W Mjgscumݬ;sW]U}sjnzCSs]#0YS\ 3ZjjmMAq}sA_j5sf{55L o5sTti[5VW%fFs˽i:3س)uTш1AO@P3\:T ѹt.'As@?Arzupe4Lit#7qPnZ n,AɉCl^Z`\555rZl~('XW :SQ;&s4Vg}=~oYgLP7M͞er{{\(,SrZ\ø{jgMߚry k?<&4\=as]ɜ}\/9 3JM[z1N y_1Lnf& n2wUp☊BZ11% J<% xOHsghglq'Sii.}ґ_`'QaX+X_a+z?'z} As"7 /a(\rTYVWN;n_XG'Uxoڵhxt?c|+B}45$WsrSsrϗ|1xc endstream endobj 3902 0 obj 10955 endobj 3903 0 obj <> endobj 3904 0 obj <> stream x]n0E -E`ib081Ep$:P˂,՝;M.\|3Sr?nZ|/!M1]/ocY)y5|żpNO*[|N-۴)[|4vk~s{o;S?E^m:|>_細Uvn ?nCžK46]ccUQnR۲⒗S8SyjQHX,rȁYe\Ykαk[xa9n9ȳE~y, ?#ڒU@v'dǞ%kC%dW52 W6Nh"8|B ":Dp#ΣCD? 1l?޹]LwAm.UzDTGJ*=J}!8W!`Sz 5PzE:_ȯp Ώ}l=.`@~ ᣮv} t/Φ^́}w`<jLQ/C] 8EzDFUھ~'l Fw=>+ ta-|},8O=NOQ endstream endobj 3905 0 obj <> endobj 3906 0 obj <> stream xyy\WU 4M/l-RMbADtfQ1ۄ8*hYthqL$I|7,2&13y/$2F߹݀~WMU{]~ϥ|}FCFI %B_>3cpv=jSC)ttmjsvF2{=.%x# o@{woRw(ٮ6GkGhhumM@1BFhsݮ?oBWkBɈ{' ]!)4C+Ͳd,Q/Е7R&w(oTy? 2@q,8FȊbQX b:?/Obl&#*B9_kc~a(^YeQ؝{P+,?4Ӟ~;&]ʃBיR}(B1V L\pݜl>)%_cI,e2FruLϤ:-=#J֝?ZX?O$'&>'%&8/S8‘%A F3h%KE,9 ~OF,X?8V5ٛ@! dWb&?õ)\{͹\<'aG^&UHeTcДmR`Qj~ҧQ֛21f~}L "UeH1QzT%C| G5~؅]ǎ۲[^[&޲|c_nZz-N*cmAO#JPzJP.@OBFdaKn43; Ҏ& `dQo㿜|{\uZ3jP8KS&̚ʸ2AC2E*rN!O?+e(0pO<$.[l-ּ/l4s,opJݶsOˆue`^HHMRk#LHEe(Y%xMi[LQ[ȆYwe$:Yy0rJL3_WC7JD*+Hô'17'BI(8?Y>yRKOW,O(ΨmOϿs7xk~ז 'd?|tjᥧu{Hlq$ 萙 :hՆH-R l`*Т֐̪?0 Omxdenٲ?f/uƛVTGdfRd ?* ήSϦM&s`ae=Ӄ錬*XIMN@uWYCe{^}GlsMywf8ܖ--2Tծ8JEmM:ţTAMZT.,*e]Nx)0EMIpG $-'4`}V+ڏon<2c@L1-s1Q#VeBjC1t@h9M3P[VK(x_ɍ{WyO73!so_DӳaR!0]E`Erk~]i漪%# э(9L#Rdsm؆-F\N[`?ot,_>:K;Ͼ,="MZ)P V3ץ=;/_*ql,xW2XD)meBl b6ǯKO^~q$(ŧZ*2Hn|xO| {#pq4I\`3DM, ZG ,ÎSwU.(o|GVuC:cm'޿֫ܐQ m6sÅG)-^.Ҩr!MkJ/Li_ ج(}L5Pb2ǩrf? `PMe@#05qRAHqG{}ն*ښɪ{Ưt!Tt}syLݱ[~uM_;׬Dhh?<4on _x%M[|+4alQ.QB`IZ ,?5@>I<)doIThӬJamBթ:L[an.dw>ySV黊9~|4sG>}ӄ+Qe },% to"HHH`i%Bj,KdUxhz_ͿyҾ#77_ U# [P$XDD嘊SS]i*rǗ}YFz2;p[dlSgLZ"]jl4*-ҁϽ~VT ԨhOǗ<)@>9S1Jy,wۉq|}ct]>x"9*QqAgJJ+[\bkkkd9K ;&'1k0R`{RT -0pHn1uSWgOq_(N~v s,y6 kyaX]Dz[HtAHTBvȴ , XEePW eZ!O,(C5\*p4Ģ7=Sɗ!]-U-|f͡3??2ۼdo£Øs_N<&}B׹u׺ Fin5XKbQ|*etcF>~ےtQc}Nybzn;OyYڮ!az&R#Y8W|A?hܴX  X'ĻT \Ph\ n3]pVb uj2',f꾄I'ew߼sI5(-jS*K*xRMH>uqty@M/^Ȧ`mP5^l2jّ wSgn3v7i罥ݓ-PU߶r\PNTPIo#cbR5*?? Z3v*sl$OWSכ6{bO[4_Y0]@њYRSxM, -'>"ZP)ʻ9Ymzh~hF~991k)5.? E[8eOPy(0 NC;7.u+ږC1u7x/m{l/IyoD /1nd%q)ԒSs`ųaZSuu;i%w9#Ij6K0kIuH u +>zM6@zHOtDŽKj=WYM8utRwb@ YJ\xeq.D[LG|w&#qh}O?'b4[\[|;˓Qt㯐O)4$oΦ2qܡ;e]E_wW*· Y "ajo-䲘+Ej7xQFHV9dQ+s-"0jbVEV2j:Mx2^_ӧ ʿRBAL+:XTA+~8EƠp{h!k 8~3/h%]AWq28FRԋ4M^^1}Eilbw'7دKGUj\N%>39 ;-= m&BAڄ4#Ra 6( 0QEf`AXh0P J=UpK@4;HCkmx=!A#=RSs0 (:Y4: Bi/G F7p$Z̈́׀K;;:}=n򹸶M}^tÕ|=ݙK{=\lq .7]Jr2sd!eH];9s=k]}ws=!n\nnk<>O͵y|.xww~38!]aÆLW̶Yͷwvt^Хy=6x)\Hs˽2{:=j*K ~߉:y ^ ɽSplwFʁ*Cлu<{`\tnߍQZhCw@M21-8d g1AȨLydh\hT-oNIe%wp=t^*c!y XS^M>5 o-o?H:~[{2^ 2~LZ =q>W#l)ϹS#K% ?0C#qA@1k\X![%`,\g7$V vvgfKSkmeɉ)ydۜ8?QYڟXUiKoP`hk"./K IY6sC :A]Zj6Ѓg!<xoVO(˫ŰU")&ד}YQC*?كz%բ]X4*~߀\>k:󒛱͠9W endstream endobj 3907 0 obj 6646 endobj 3908 0 obj <> endobj 3909 0 obj <> stream x]N0E /aN R!uC> M%u"7]5 ht|]m}?ahw4C@ZR{:>Fu};> endobj 3911 0 obj <> stream x8{tuo&MҦIKNڊi m+LҐMmjޭ*@|Q뮮Ǻ2](.+>,⪬^A޻^Q&ZԽo$F q` /M ܐ3H{d`ɍn-GtH8z٥AVjr̈/ %n~W{ňc{בs7CG_D _<[;'Io ,双Gr^Q+`F@TgXRhu,єc΅G VhW\E/62+j~bSN榎cQhҷs6oo0pއبZwӺ\ӱ}UP_]bk.Y\S]UQ^V,p?^g6 Y:FR*X@ '>rΓipx> p"E|sD"ljEx "n;-鞑$Fn,.xN9'Gm▔ ,Q,"l4JHg:(2esKx4CxxOwS$ pXfGzw@g 5}ذhL|LwiXh_RDs}AYK,HII߶r[yn!k5ufbg;E 4PÖz"O l!|F9.4!@GM$An/N39Ekfx-mUj8?cc4"kD[WQ]ӈ͑tq~bii C\y ů0W62ەy `-"qw/6٤A'=qfINtZppI%$i=ڶR_%:g X3&;zmۿ!L}_0y[2J(B-u"mW!$<8I@iiLfL;*A"qOK+I%tL-[tkZdl#y8'6ZyOhݶ8J}?T討8.yl6<\-B$'Ї ,#"W`J/pQz-צ*JW Aq}H%h\@I9'w 9t]UQc7k<ƶ|y(l]yRkD!`A-%6y.b'vT)tPsїۘ(%Oc0y0Z0fF7ЂjfO$ȽӹJèrڈ3ua{ݭmޕ8?{3wG??uw^G8a4XRw>k U,5U0s!+{6_H.p"*:]4fH៥.'Ȝ~b+,Џ _vkwDy]ӑucdV4 VQ$@{ThfL$l^fޛIٞg^^2l=mf}4Yu#gB{l2u *O60$ߨmj.Y5jtiG*Zkgr󝝞]}.2O=]];1o:rtuX͵?:jAfsV lW4 hr*&lA6/'"ܯڎ]}5kv]$u>H3z*L|-rX?Ԇ>#B 9j.XUՂ:rȏv$?~wfbڛ؉P,rXه^|RdkogM]Jc(𝣙@Tz }y%FAhUx ֽ1uBm;n״mZȟ:G%X_/lw(Y$7shZ:=m;;L :4хXiefzma&ݧg3iJO,myw  XhĵJc$= r:V"iS5xwO݆Z0[TV,~aŕNN5snΤ3!Кo; WV6kj.LZݩY ~B6g-^H̩366ݏ{WE(!n0,![M2!-.Ib4{.?5 r4,pLQUc+ S4ucx>i(TDN)"P l/2}S ؠn/pT[q¬bnc~'mc؝~bq:VY |H5<9QBU `AZĈu25J eX z-*ȁeX S`/p%_JS3^'Yp IThaL 3`ajdnf +2< @V+ gb a"S3pJCt n P -сH{,(w⥢k\}lt$6HDcåG\W`8^ q-`42 £as\Xoe 4WQZ! Ptq.%FP`t00[an4<'£Yt G06ABt&YEee7o. rK2сa̢4lHI>0r$ě)3,-m[* %em-.%0gϭ~ x `$A*OY PS*M(CAA=£M~ V#-]H8>L1ԡ[$( J!"׉7Oc94Zg\J6-L;ggktUMHY }6!-ߨ`@ʝ}Dd-!ŘYT(44~V`T IqMw!|1R,G"J[*AC(%0)TMT9i KGhVʥ+u~Ǖ衜t~lɷ{fWSmիBmEF_k/?g@*P!UۼPik,qep:K l-eU4ko|2eY\>1.oᔁ)7>7P[L'z+j;։dXE5=ju Bس]~J!WMXNz'($]f<qD endstream endobj 3912 0 obj 4369 endobj 3913 0 obj <> endobj 3914 0 obj <> stream x]n0E|"vH)%AbчJRb,C}=3i+u:嚴5Yt 3\z(-lo[Do3>IlL3 [UlrS5qĻ5y%9yLC{f90Wȏ'x̴L{$Qb(ֿ=g]g{d֟i2ڄc0t9;qo,A endstream endobj 3915 0 obj <> endobj 3916 0 obj <> stream x{{|Tյ9N2yɃHBC+C^$$$1&@$H E05R VQAEZkUEܵϜ >oZ߽wVw ڈ_?#^E4 =hi(ۿwi7yt$ X$eYY +J=־biPН:|rg_L=/ {na !߽Vuw|!!ޞ%kNZѻ衮p/ÛLi0, :h2GYDp1Dɛ$'MH.#sRVvNor^~SN>?|Vʪ9@n!^^m+ߊ~C/{G(;GO+GĦ4Ѕ>B߀&Г@>s>z ՀւƆyuskTWUήU^VZR<_4cS /Κ1!-5%YN&F;%l4uϱ (C ֲ "Y2"3C*,([R6UP䶠*Sm\qk-\nkEiFk45CzG9jMU3fxCJ+o,kP"t23аI#aG XKhIϚVZlHk6Fjƺ`۪y̓A6ev\ܸеFQx*fԶH5K r$5vL7=0A&0 L.k H芉a 44i+΂m`R՘,7萋ǬK*׬vѺ%AԺX*ST6Hkʍ`Mw:4r]a==/<0N"Nћ[`e Y'ے}n!5IyYU 7>^?ĞP=(fC|SK/M,vȈb7ǺPw׭bXj:l1ا|u[n iT_ +8Ț|⓴D#DC;<Cy/1mTDWZ `6MCXNr:\<ŹuW5]7bg6S]MՏJ'&g/\s}4%yiS D F0`ۊ.:R`߁m98P[ {7uӇqr߆IY s|[QaDG(cչEWc^ \`b_iE pĶ6]ѺlW=RVbSh¢\kaQ؞%溙v #HwrLa_|`kEHK?.}t&^`t"VdxuR3cp38fͽA2U9>'݌D?ɋzOqɴwU'Y>+(T(ܹw(:}C~@?5Z8oraWBKf k h93ͷGfJoAG6swxApz<ҞV׸}+y;rl8i榚V~(*hd;E# 53ec$16b1fN$b3#dXl(:ǻxo1jkWbAPIee/NLjUS".1l_!?UͶZI 2fs dyfث7OTD!ur: UREGfe ^lYB #UC0 ;t@7;>,28R R|C sd2rD 2arXyh]Vyeysem)ik}ze z56c[̬ K(~'/#:;z^b*ee,XlaUd,"Ne8yf("{ 38X!X%;\srDyGr2~ W|GJ~W1*:Q4!Unߩ*˜XEP_*ŏ&iÞ Lȱ}t~6ܹlu7׳aɪ>lǾG7,K={cHq)‰@hb:.Ӧ.R٨sL?EK#LE 2#bc/ʉqΚƷwB00 FO-c#< h0{-CSOLy R([C&XTv5x$8Sm&$%EG't)*`2q<I"X~em֫ /HTo@`/%Sus^zm8zo_*oܴ{ݲjd9^xᥐ,<Ӻ0o^d TH7(&OLυ)FCtXtz}n(.h3_z^_8lYAR̔6<(ijꂙukl .]@V_?qyq{>-XŽ09AH, F ݃ccSixPS`*2^ʰ0&i<, Y[#UɺV/S+/86J⎻vmG_+Ta0, #G ׎E"$粑ﹰ޻v\C+*Sߜǯ}B  Fv)8(f;mDOxD!ަb sń4m4@|Y٣+g<ϘVvwu, gJr0g#v\# K<*'(:0DјgLł DV~eRIi-TUSKKώX>| v?6Ny;:!4aP:_B-]~O+j8y2'6֋*"הw'T,#2vqsKst$Y] $Sp+%7Z,WURܒ:v،9Kf <#;8}zac z7RdN'^o PgfXQG8=YջG:Ƒ\8⏔) OyF#S+B+8: <D&R lPάr'Op"p r( r\Ĥ* "w`TN }|x}šSY{y+vW}3se`PX|kKKmRB {E;Oq?ƀ7b (4"J. k8^/ym6ܓ;Ѷz !A QQh_fAG81`6tňh.* N\FSt~EcJ &ۂ S6 'RJ%r 8Q?7DYl,=u ů>Z;腊>Hq KzUχ)OǵSX/'X7o0`l$c33W8UeCLe,B%7>D Xz=Ә=Nb#7 nyBgC"ꙆK]u5Uo#Sҫ7[a!aΆ v 4[d`قb% Dzѱ@dG4b3+ث31rC]wO V_9ދfEyNY+ySWy#(%ahTԅk!D\]5KqgJ -["<Ňq\w aLcj T]:2J8*ԛx72ͣsn\enic@S$В͛HTl%RHfBy7\ڶlR7~(;~zz# 29f]` ބ" aEGh 1pEzq ;<՛˲)+i|'YoΗX`{n6wMV eO}.J?4L ڀ+tM@)1 !V-XTPP B15+ 7'a}Do}N\`d@[`oB@ ,Uߔ0qbQ("8];7)&,hkt# cv$"P=DkNs|U7FS4C 4#HyTq,SOق=ʻy'/`bBxй_+buyTL>U.*@jz}\8 ͂$A.() !¡ }j/;ebd`"sv6<>"Ҹsyހy ̃W7CwM8>$]dQ1_ڛҟ<*,O~(vs4]TŌ X(-6:l8=ܰ]uYP*%'O0ceK] WZlt4{]DF|c,|gd] NVzS>€W:|x#uЪުVy߇퍥{~}nkW0y!ä/*_}x>*`Gr/hfdJJBq6dKI$,'㌙p0:pUµρ5̀U0'FA3"A |Vng'~ʅc3/[޲eO}9Zz7||q?ٲ~uukcԧR:$$-lfzM b\@㱤q57VSU#qxj*a!G*Gw*rnˮ +1kagߪ[`nۜE5܉g>QLw_݆*\.ij]\Wxytr'RO~&]F8  ;IJ( b}D~,ԧV 3Ͳǻ56%/Oճ`H?+UUO?5HQg7uC98/(,󃦅~ M?qӿ{ͱrfVet%qeF+-ojaW1{@tWX8͂`3R, !YovanŽv i8K{َqG*im/;Z}ʩUY[2efw7lYӦ)x&F;#_fa989Yr'f G8[g[lO`ʠNB +ЇWNc'fS8쿼J S 9Piݪ? ̫cPdݯP0@>@fU\[/Qm؁q"apY#IppaKn9F(*\,$/oHyp?˴>'{"C8Q$v#z|װ\ ZÞG bYاB"Zȷ@^Bwv"ލjV4BȳhA$x݂xWtv4¾:>p]( A=@zLhpMvW:7h]Fh9م LF;idrg-烱FL _c.[ Fm!H++3o | *K!NOE*:2^pss{ *ry(en}z~~K O5rYn>LSiӿs?4nTIToިciĉmV5Zm}m5d{}f4(QQZ#im,11lPji2*tr-2!-j36kiգ9Zڈ7cfp iBTJV>[Kcd#-Miid-͢8LKs(ܦyKzhi,Ft=c-m=pDKB6ZKÁv-Z. I{zu-~)fdgWN4gmg夹+ym+{V_ܱOʔ%Z!˛:a)gRZC+2iŕf]R4ַ\YmeݶVZ!u,VJ;w꾮TIcs`wJV֚5k&iՋvn`moG{Gҕ ΁]Ф_1!m[ ?ZMYkc&-ZnٟU=f^Y&D˥:ԁڑ6ȷAj1A:T,\ #eju[H}Л~BY$4W~1=Ч^?HZdKc=hj5NSM,$WOGXKPF>z]6uMj-.RK{:ڀ*WX]ljp~Omߋ+w}t x,A= X;IMuCmXkUKmX1A;j:ԕ׿z:L څsWȻ֮0Cgw QLcbӘ&ViOnOL,6c죉;Cj\]nNlte}НyaW-gd_Rc9(,OXNZHcjA'w 7̛8jD k`<Qزc* kJ`;$a*O?@կWtX endstream endobj 3917 0 obj 9923 endobj 3918 0 obj <> endobj 3919 0 obj <> stream x]n@<!% ɱcɇ:R ~]i0;ݜn}jB| 2]3ۓ6zzz%?wyzOv8/Q}j<4 zV_CUχvy͏_c (ІX7aKiZB,Xr:7fKjzT{h~K3Ckm>Zxv֮_/k濩{R.6~e/5N ?ZKRȠ mk+4se&Gbmӑ|&SM~9ڇ9<:瘧#_=lzf$3zpz zCA- Zk,ze _E_ϲ6~ȓ_ӓ_0o;_O~ɓ_45N{?ؼc%xsW׉˟k!nӴ\ z ][{jFToY'E endstream endobj 3920 0 obj <> endobj 3921 0 obj <> stream xg4m(CGM):% c02fhAt&H$.D z'DBnyMֻcsy]뼯KurBE,p[. ºa"8 `bTp8`F(;4 w'p&lw`~Q?MbE;ԕq84jY= KlpX"8("*#%Ť8\L{ձ8@_Oqws;Wܫ!Agn+G4Gam)@UH kJHV..V^TMJH>pAy(O=`qng-/`s@@Z1T7HPoNVHoA olpuCgIY?t΢,{AnͶh @Xb=DxnZ@22Yoqʕ=~fZS$ZN  %=[UgU;]dMi;ZiGv :2#{ ;e}zL 497\cXKk|IWBҶ?PCd:qJLs2;ܛFTV rT!} RK$qP(.[2䳶-PNUXc7tuQ(Vne'1T!h&n6p~eV\XGt_eΣik! vg[y7iuհooȊ=)vN1%ڲg]z5sFrrf3w.l_ᗌs'P3D.^wQ&M HhM..y)QQkd;qZE52m&@P5MhyVmǐ'D{vER-״{jfqiŮ=Q A($,u/F,F$p*v(A|H,gmV>btىgEOt->2C} cCɎ H"dQTiC¯DIo=5*y7,dq;z=e} vK9DpIOwPVSsgC7+H[|ɣ49S |k=ө7ZuWM7) nU?D@Qok&=HCHa!Ja=\?oX۰>lϖ/FjtW˶Q]{xU}B#+/DVbJP|uC¹3!̸b" ˺ IXC3| p zr5(;sX̃B$Gp[] w-%{ r;Ҧ9ZTez耎ŤT5̚#BbϡSw1e/'hZn򼊒OS)1c>sߐfrj4[9lt(Cxm?_<"E27SFn)wbe!D>f")z-C;Nt`1ՇɃhlLb8m)V-(7+aя㤕< #x;O|t)Va뾴?[Ȫ$v;ߵ~ WRU)\w8]kS})}}Bˎer/XJ-Y%%7]\Ɗ$Eod:ɇ&J_>@2[V3ش UsA!đE#9_Jl*NZb'2l!nџqpVV[YUwߛ,#U\n?/"{t㠠略;$h}^.` zi~VmTP9ĘaqoQǮdP\9^cعW֎' k}/el~ۉMT3l œzy͠ɺ1-vQ-\vG2a/XyJb 3=(4fykJgмnU9`f<-z`Yם܁[չF!z eNSb5oL:ז<;ܣ$u@ɜXCiV`sO#^ #xvȢ2m96ےa?5O2W95vcz!SFZM~U&tհS$!h 9y[uzqЂeZgl;Ao1ۿ]u|H.ƹô$?eekCdS3Fd-]Iu'~pLlt+Q쪛6j糅SB2j` [H2ƨM&fۊ|R!S"2 c nuEɇEj:3]reauJB h+G~,īG7,B>>aYP#57ֱ oq0Mgi*>b$&UGۂL`͇^#MsblH._ة8/iUU7+8s{:jRAZT}HOw"%'\yk_zt3L$uű及|Mq'nMtX}@5?6: x1~IrPtť4Wu3k,kUn 88 DH;v9)?z4-$l)uѠyW`;Uyuy"nR ڜE}F:v8+ nnr91E-ZhJ|Exǿco/@3s /ՂMonɉ|2op={꘸'Mxo\P_ ΄*]I2ɌTgNAˈܡd샧* UIE ٜY0ɥ: lyu=˟lX`T`yI񣠪)7/.WSx0L& s~9ߑJ*U1*5؃8~FjR!bY|i\oAgt7}+YL%rch **hh}G,J4w'!::,t\masgJW>LO*;8RIm%\M;54 Lw`N?e@ZPƨ%[WB7RN/w *h= R5R$jjnD1ڜ>HHHj[ + B8ȀAt.A˒>h%d4Tn+fA!z߅ fEK\\)BD<'N7Y{M 7 n:6͢K8w5v;@?咢+&- T/^-< |O ;|fޜ 8\DlZf6K0{7zBSgsyCIGoyy.׵Jz6LT7 1(+7r endstream endobj 3922 0 obj 4008 endobj 3923 0 obj <> endobj 3924 0 obj <> stream x]n0E /E+$R>T0@-ckVtfޑ}Um*i73,y5hT$I+i9o-V sQk6F>ݪL,IYR B׾n,w?m@Sp> X4`q\ҢiJJ%ydI'cV:N3 |@΃ƞOy;AK㞧\M|| z6_Fj  )Ig]}٪a endstream endobj 3925 0 obj <> endobj 3926 0 obj <> stream xgXS) ]@(({)R%T RH7ޫ (]t.AH>9?ϼw1w˩{x@0>@CS ;A`Pfu@׻ Q20`coD ad":P @ QuD/z w*ӫ pGLAO_ug NH+$bb0"kU䟧tD<26۬@Dn ԛZ{ !_DFu0@D_ A 7D@o R q ȋ?t`%]ְ?ɵV/{.Zmе]x9C>ѿwkO77_m` &E=&i{` kTHwBY 6oT3H_}prPΐz=DkmJ8ks7&ڏBB8k2sR qNq vT~{'5G|yۀgi+ ݪm~0|ʶF<8r;6EG "Vk2mJj$_5^V*zǴ~ 4;쟾)n*N&3*N2aѣ718zZd Iy&scBU7Х}؏ssH3pZs*Т("H3||I9OIM\cRȡvqi5Ւa1e\e:\-h Y*r2c̨rX 8>_1ld{DtN"E[*L]>6jLKq 4՞WTt#HVFu(Unw0b^IM|iy)]5[s۩kaڅF BذF7wȵ-A Stxq ]OFdu?IU`t.l@!-g/6^qX[x}(VrO3#/mb֠ p5T$Ae|90;gBL/)m$k`.T?ΚzLd4Ѱ͢B^;kȤqg>3Hk⢀,>􈶼b]HA?+q;&>{hn\ϺݧKҕVĽgOoQyz:yBZcVyb׼4,dtN}CgӖ gGRO %0[XE! _ =4a@@bb3*۹^q~|9F X%eK0]FÉ7BQ礹R?5YmfYha/3M96ƒ*<@v<[g&Xs$\~PVJkhi؉0tۢjm$q.73 5(kxzasr-u)!ùf:fW= M鏱hy؍Id~p듁l/&o="!yB8\*KpgG=韸gl*!*ƚӣ _v&!lsL%KDv.;8uy#@dhUA #㋊y] m?=q,%3|xO-<{1 Ě-Ujl~hAC-A75'iϳK\J[O*)4u[.WԶx-HYe!Ma <@-F"kYBoGm]4H6w!v'Xs\&&N8*ĉJݸ1*;{P{0 F=˾\N~w~sT{mޒZMRAOփ zzW&80n V%y[Հ^tAK`xspMC8)E`YÛ֠u[ Hǒ3G;Q VEUvoRL3oF? &OI2L9ýu`jB& O~L~"JAeIN|ETb@ ^%'sZm)$9Eu(JʸI` leD 1R3M槔l]$娩~}6^Zd<t;V}r\R{|=YyyQ[`ncy6bɄ"mW5Pqe{Q&r:9>@dEt'<|@:dX 1as{wbɻ9Q KJ Ϧ%=x#52;I5JuS Zg-4Y[+6ۢѷUΗ%>YLKG̬EO3y>9P b1fWyK b [|~޽H旬?/έXB/(ݼ5ٙHMˌ$h/UÊ4'~jWˋ;`ǘН싈^Lu>R}U_ѱk/% xLʲpzt3PFbv[J] 0>`PUex󟓻hg>A9 u ݥx5$YynyN/Y ̜gph#]zoF{R>IcI?RW`WQ;㉯F{l05j*=E{JQ|0kZ+LWY¯!?Q4n8Qbbָz$\%oQsy.B$VpvY M/ iE6 \BVq*IWqSiJ23 d.2 DFc_V<'g 1#I^N$dcR9y"pz*R^*9l DKo`>aT.zjH(kW0-)g]֐J;DZMp;cQ+%T~$pp 1@4%&DKrQ'9Cw\Eģ61ެo~cvl lqrQ93j]~:R,ܖdՔFTȠ:F=:%8ŽSEqflFZ ("mO m+6}]ͻ ܒ^]#]2HM>_j3.>`턬&G@Gц3yԺ2 搅Bi:76_F4:0;#E*\O A^R)x5E%#Q8PuĦ]q3g`mL,{viVQRK2Rt8͟g#R/rȄ!_vHG%SU.^ꓘ2P3ւ͒\AoO,/9C˜kCbfŵr+0kjMcKtL χj% Nq3^w]272KC'=΢p__^ۀiIʣ_mtf4y(S:G9;S7JnIv&&uLzխ>m#u{՛M!*gv OpWìﱞLyז2G+:akUKQٔUlrWG3 [3ue N\5GUͧRw%# cԵ_u@MJXUkѳ(~zۖyA&UA{3iazgK#Cݡ~( \`P73?jJ endstream endobj 3927 0 obj 5720 endobj 3928 0 obj <> endobj 3929 0 obj <> stream x]n0 r>B>qȼC.cҜSsaM\1=ˈGdΗ?KW?9#4EMN!9:<77hol endstream endobj 3930 0 obj <> endobj 3931 0 obj <> stream xz T[׵#$A?@BH'F&#aa$8Mصq$ΛNI-!ij;i'4u:i7m^&nNmϕ 8/5o֚F޻>+"SA!3%{{CB uxoDv3 aLl]o  Qw#YB  biT"'~۹#^unڻ-KH*=t}9-Nyml?LHR`"L b8 ퟘ Njb"m}|ݴ\$wH|;0uȓ3yWdx sr#v;F( MQ٦F7V582R#F(Z@I` V1$).eQGoSn+-ijriIF QLR{Ĺd۠SpF!;6"GcKi`uRmK}$D_9fv %L8k~{lQߡ~pV'6l;6F<8:uW솾1MP(N7~ϼDa#:od ξ(3H{/{hbAjw6M({3ОvPU8QmvlArcE50&F| Z>-N +6\ ߐ*V9 hLMCbiIW}woTjD@Ji̍3QEcnD_'eiW55DpbVHWf,PZgw }t*i70mfJ}>GoJ".gW2 ݽm]U F 2^[ \4)/Iell#B!ਯ{T.cWG#")ؘG795,RS&ihOi bbaDڲa$@ddeyt9FŨ{⑥,󄮺oh-ر{A9m˅mK͖Ot.vIYJܑ *5J K 6?;|CѲ?IQ궳Z6V*i fscN{cyvWw\}V\!cHiRFWMF&չ]ӽza[?RQ?v5)UJa0ndl9{_v!Ef=Rms;,TLÔ>8xmlfz#+AƖJL}^&ne'yA %dy8ό-kTjل T3o&}Ӝ2GX~Litd酅;*Ef]Gϗn׬^mrvݶqy\1kkJS/ݚ_]dV5\A%')|&~-Dfoxj^j`=ԋՋrp 2 ikϱp:xʸuvDyڳ8P?1;d4_4]31L`fk@a2e6:TuzO\A4DǣYC4pҸEr{|+b?O޿;{mޏѷ؅^>ލ{^sK*[ OsNÑf;A[Pz.& 3!^Sn7\k"pUk{}t FrUYq:۫";,+kfVm*%sl#ϵa|h&$N/L|6EjΤ"%5|^ ~՜A2@T85,@>/aհSZf] fZȯPS n+n[%0O]~CKh5N3PPZ_k0ѹad[ȬyэfW׼[LG{:}c^tonxL$RoAsҟD*kWh]3ʡ,vl }!{YsYtmz m#^)uFr`Dzߩ<ȣМ򜹆f*ç[ CGo!R',XHa&^w̷W_jԬ4Arjs+agGm!? j:LMzO>ԛzk뭮ћع,zHDA}@'yIz1)bCC}s О"Iyi0b( {3>q<˸;t7t*X)Wyq r VB.1TV4fruZ] 7U*9 yV @z?"cX4y1D^{^Zu\Rpg9]nfGG+rj=q܇:ѱe?' Q9sg~&sˢ+xEt(=%!r&~-w?H 0Y{mؾY\d3:!zVdX{ƍ.{{%b ,nU@on{-5z#" $??OrlD)YQUjP#u̙$xgI?!X7XQ \  1# 9b"%`hɗ0_OJr^N"&KD = X< /W p S XK2:p:'` lFfH*d-+%`y~9+H>bV 8r'ds XMVb֐-|oN!o_OZ_q_ChbшX8\$zV2)[LJ]bݮ]< ,NɽK\ZYھQ Cbdr(=4S 8ضPd,4.nCux 8)i6'Q*[Z:p‘$"WKEqh< v/Mldd"ɱp`lv-!49 "`84>LvoPb0u v^_dD0 mݻF#wG"r\8*iW|LEJ>Gdmb2#8q&o9 X?64'N}ddDH 1CN|`ԉ`I+Fa<ˈ¯BXn^y.gc9|L?WG ٍIq!2w_О1?gW !o\/ cER*KwmDŽF#T~.Si,R(wVI(2L;>rL݃#Q~y&QD^m\)+#8J2C&MsԤA@0ouCmr2tdknhߨܚ 1-ׅcn<뒡8t^=fBcPv׽K>!q1.e>]7СO:wpy&Beidvyc1G5=$7ܸkJA^7~ uZ[j2m}q7s$5PUgT ⷠ(P r0q r}9w Wb%,d  7k: \O~W ~'CcL̓̋ukOq}b0Ep0Sgz6h4^ )ޏW.14% ~Fw tjM;y1> endobj 3934 0 obj <> stream x]Kn0@t FBH ~Դ xH Ypzfh+ulE3aYj ̢v0wׂ­7TB B{YtcfAWx&6ş/wk`3(( u RֶO x_,Eg*aM 17(*D^UEF{\q>T(J ϊ8Kc9aw9%Vru(摙'> d'fV=+?CfDft `}c}j1d%gԗY)c_cU+i@$pTK?+ ڻs~p4wxow'h1~`޶ endstream endobj 3935 0 obj <> endobj 3936 0 obj <> stream xymT[W`ғ#{B  >m 2  ŗ 1 @ Il'k&g;9L鎓Lqtgz6'>}6Nd{zNw7Mǰs>Wnݺu֭{^l|WR`xWqp"&vU |l tz>@Q ;vo}*^i$40^ `B#uG73;vۅ;ƒ(_S+R{C*űa z8ƺH-Rd<Z0`9 'AԦUr*Fc z؟?GXCPyK_ZwwP%^-8 ߃B.Co0{G^"ex › ?uоp3ta:߁!En=sӊwsw=CPoNa_]c Ff'a3QYa/BaEY_c'il욄lW<`,UDTuix7?{  g}T2=?k;Qxk"Pg`w&54Xfu[몖~_Sc o}eKk*+JKEŎ<{M4x.UQ8%`(B`\77Im"B"ŠL&KEʭQz۔kPϛ ރ&{.ëeXذpi$()_ Mk5Ɛ5Zŝ4qNi Ti8{|M%7](+RD#t])CM=qfN1q+_L\y(^ho]֎ޙ|.N\{1I2 GNM*8503?.锔5 53K7Gb=qGzb3.n@E:P6#3^؂d{O-9]qzfzһɅÃvfkgT\2d '?mLa?Xl)Aqʴ"J24*YG==E2 a05vd#}b$EfW]=qoށ|%n1D6拻푸p۞XyHrX`rTkf}S/{{%_.-=PM!i[-E{B\lqiomS$!Scc$ؠU*Z^$!7bUXxT\V!XF1KD_)I'aJؼM)5OckKCȰ˰ߠqQ3F|R H"Rgɣj"=U; VΪ獤j՛V=.2^{VVa5Yɚg-ƬZVkPA[NĿ=LJ!)&[pLn*u לaNN=>2= 55ƌ"%N'p,ѸZDֺ,r'Z5Avv؇\0:nʡ:ZatLA:*ʫȯs\zC.U:T}u_jJTVG,ײ-o۞"u0wt%tr%J_ #5#~8K˦Ξ%ʏAXRls9z}x )>Te{.AUo38Zf,۳HzМӐY 5Ƴ2`e]jZ31 wSP(ih)S@93:CY}:ō+(#ʤFMMi*\ѕw|uaQnq)3c c&s>zNj1_soa5ЪGO}-e7m*j(5\h~oK/uޭ:i[lKXDT6P޵L|x璒DlQYcn_:XFI\VRc /ؖmk>?G§קܙGs.)*&ev5PPcX^Z\B:JVzLR*K)}T[ZVJ.%5++tM:Ǣg,KDޤOՕֲ~;{a2s M:awIYiI슶;biuLDŽGU%̾@09_uꪋJum=>B-5 =eaq˪.qX3ڴxeremZWs˝|G{y) Eܼ\J,fdhɄ򀒦9y:燢`)RV1+!Ϥ*WI~/Iw{Fj:K>䮰!{1SCMzB$$SLYk{kt֥}gQC?"-^s+o̠͔uk~ǢyEE[ܥ[N t?G+8I>ڷd7l]$}6^¸@Wü^̢3[Fci/̭v#<^1ļQ䀩VF01JWZ-Uq3`yXIgtt'I0;Twr<}xILLÆcvsEi~mN{;'dӉtw! $&?+ sJrhNN:<-Z+}I;5hX'_X9-Yr֬ݬ hVP Ȟ GA#,xAZ\eb)>Qy%'xBwL۷i)-k;~xӼCgќflDnög{sLi|xsMu$].LP Cޕ"2<&Pd30.Ѫ,*L̒n xE͠5Tc kNϕXb]^Nna ZlEeo80V'j4NϊLʾ54 huGs%-k]x iW^D́F67Od|uW5!=td }UqC=2x y//Cՠ˪QJȶƜL=F9`qߥ65q'H[$qff(6꺞5 ^8RlQɜQiv=3o=]kuĺ!CI')Wx.\9>.~5m%ەͰxjlByo@M@AU//аO8!0Ri2م,M2lʢhv$y`1zѿ1{Z&IyA6.\H}YMqc.V'rH2Gv2Z6TbǘK1kj*9M {X4یN3}Nq|IU6exSGIN-Gߥ٥o=o.O%csY\ ןgBs?+s> : uzyP+!*MTPQon!b40-#J=I .%h'"8lS :M(\1#y^ꟺxWdM-~4n] +45l]Us ]hE JdSVqy}\*oд<6a;`cl3x!Yְ0$A:rA09AD3UgHUI.z^O,|>IeA9uzsWދwFƻЖ/%g=-YHijJ/5{.$/޸?|R e+˗[rV?{~ ;1|EE~}M߿_F3?T!9N⭧:4t;94aNvx .FcO>IAF£$@ΐO([e/('(?ʹwUY)F9V'eh7l@:dQ K~].܌C0 S%`Ԯ$3I,$_O8ޒՠ1kQI8$:[tK&&a )7 3%a2Ǔ0 IX ̯0_* 2 !NZfp lb#I8>q ʳᑘ\"T!y V( +ve8'BCb[KcEW5hTcC{Ƿn FcX%6ctpEt046cׅƣ oUwh$o  FcqDŝb` cCbkn xlñ~ۮ4[pBXh"$BH,Yv?IA- tHh(vhCƢ(.yFn=ch B1 (B"mXqx|QwذKrhh0aZ' J2L J aCbVwqʭCJm8|mt! vTC N|vąa럜 ozocػZ~*9X?$ӋP$Ƌpߡ]'EoS.[,p)__me.1wrTݍ2U@)+&6&Su}ˌkqƭ(eZ$5 c, <~^Fn"c.RMPFtk%BtQ$7=3ŧKO1 O]"-9[^Z$e^П~ӌ=mF[NOrߓ7dc&)^:>9IJN$ w xBR7Df?./9ά=,|)9JG(/- EjAkeKoO.>R^U+zV<@Gɟ&h}ob6fd?|8n8} ,ǰdEnt+dBy I2,dg ҇/yC_*l|YIE*R+r^$3$[\;F|;WTNVXLVc19*C?V9:$n pJ,'~:'nwenJp}_OG =@N tZgָ:1N;۾!< { 9޻1h:{Akok|L"[Ec\C@\X ,Q(D~,@I Ek\h"@|QB(Zd8{Tb~+ߛ.ML9k3",+?/E3 endstream endobj 3937 0 obj 7353 endobj 3938 0 obj <> endobj 3939 0 obj <> stream x]Mn0ta4BJHXG=CTeȂ3RXh<\~_kE[ao^hH%zWtqQfeal7fY4Efl!_۫X}us_0\S㞛bZW&yY?@$T+^E&hBI,K$l| ryC[]c9eB3sd5䂙[ ɳ$Nd`%3AWz@Rz@7h~"}rƄ{ N %)B endstream endobj 3940 0 obj <> endobj 3941 0 obj <> stream xͼ X\Ǖ?Z˽ ݬMl 4[_jb$@B ;lKXb![KM5^ylRbONؓe3dL3k;ĢNnВek{֭[TwTOML"A '~z!lXm:s /"D*6lMq I [v@H eBߧ.:6B# Iz S6nHZg2?8К>v؏8E' #[+,uB2altrSЦM}TkB9^"JZ F9bOHLWjZzF;+;Ǔ-(,*.)-+ jj +B-ZWwtvuY׿n>\2]]];W Y2zDBj֝h7z ]yz݅DN砞[oϠQ= {ų>4nGg! vrt vcІc{3h3_#,Ky!aކwDOn8lZ R t{)~->%hu p ڠ7_GyIL7i.UPÅO֍ygmB}gg͠"; Q(!|s Nb$SS`>ᯍw8:5ZK*ìLօٻк>j9пcó?;{p^pgz>8ϻY-K奔J<ϻtN9Kbwv6ff^Y뜳gT1?P:ੳW_??s^׷E;h76wwWrt;eB6B9Z3k;Z"6oG}O{vl_m .gs9zL=%/*@pL ̫Tlм/~8m:a;l2.IMkG*g}sWGI!:忩gG|r2Ai'A= 8K]2b.*8-fgrJy6jI%Swt:",2F-Iy-l;NF`}c%HXpuL/1;\^ tn}V_5*wF+DyĦP3L -A`n`ֹB, ]]T[eg0[vƉl>#;WuuӁugkNjegR^9;BKX.dvvjj X>Ќx3g1dy?K"y<y\$OFɺh o`skپN6Q P%/xoXu \Ӄs3YCz y[E1Pz`M*ATQ>mdK&=&SNs%SZ֪Ī@B\iGntTHetf gк2?lO8@vhԐ]Y5%dд6CNJ :E*٩h92_43 P>V| 3 Pb]]]쁓RߔDUآRXPI$c ԑCԆ=+UMn|uwMӁ}w2 r) nPU] XWYvw]s.Gyȏ UrgsɐUmA/.\F O4'2p Keey! >9!MrIe_ kAX>QGq$.][JCZYBvIH$(=8^3~q\3{דhV*z"Xp.jYoaʈ'JPJYj'1 ]v>82lJ)DŽ:r k IIeCpGu;ڿP\v;xUTK~8_>6ZN0ۤć0&ñNQ$J &rx+ E`tq*\Nnb<2HGrN9QRRT0'0/絔bף)GTywtsЪsG.t.\d_Y 3yc{d|'“p{I$~3\K&܍Z|0^ q!*РP;Pd׹;D-@*W2-U$}f ĐJJYglt 7A" ]77y4͇4gNjED7M nYc#561.9&uky]lWpSmݺX|GLY|b)K w4}Ey * ,w%S'ڟY:e`c78AE18LǑ8^=xe'XC(deRk\H D^;ZN+'(5AT!K 0ZbLjvEODzu Ff#J3cB[ϕP[z[X=TTSTItš QZՅ* ޙt( ZsdZ_F?Oq||q9m,x]|_XLxIY* Ixk 6L{2J^[<Φ(gǯ0QjFu8%_]h@}A7}-Gok'8t~{Iz_f Wot?20pblVUͭkKZB蠰fZ_BJx*~_<w l741cȰoNpjjM擑QyPahD})c)3)4%C6kt]z*)Ȋ|lt-0xyTrBYXF@a IIYGxjk@\}|צ>y|N~0=n߿bui|REg`Ynlǎ=p/#//Ze,!V;Dž mӶ68ށ"@#1tF6$sT&:5VJBԦ3j=jQ||6'h2vGfYcgĬ'FU(H5=F+@)@Nj#1K3ԲFMޞ;kr|Fa)myoS'Rgfɧ:9QP9d f+vZf3t@atTs-G`ΙCj-Ĕ%Q^_C:_u5_zڅ_}o7 #MٞP6I:w`[plOv?.-c~j]zںY?f~\!/,&&$ o¤PyY:-/\8c  $VC}9`IـýT}-O|iL V\J~Y2vrc^3;ڗɸXZ [x吅lMEx2<j31Q aFUa&/%'&CfC)h\NSWZpΤwT^q$"@ ֈ+dLs,i 4Nc,鋿TbTQ|j?Tz?MK7#c 1YR,G;%Zv(qSձ.$`3JWbA D@N@F7P 7zwGtۅS;3_ ;K=V6Ghо-@")HbĒ[N!#)7vp@ݮ&uN)({ & 6kwHuLj^޸ Qood饾$D-00Qfu d ;cυv[{}ɳ/|sK j?~k4Slq qQ6*H0bR1ui>k@CrNrJ T xB =y lc @#3;89udmmJ!u,y&pcʱŪH=S!Vb:ҢF4"j{:(ohsVmZjfu6y-Қv[݋Z=i(L|lǭ@) ٛim^k@-K))gesQI03e('bm1f/Ң3va6J+a4+"P5V筷!}pumebBE|lnEL[u5_+ p,67qGצ{tbSQ3'w¸jMfpCUTXDvK$ʳrg s񪦒RRbI]v i8-ͷ9>ޛMO\Te!jJU`^`q *{z"tV -U#h7b3 RM1\6I\˱RIBmĊGO6b>_ړt)c^7Jd2ZMa6)kt]Ef`I6)SD5^oٕs 4pM!1Wkƾێ,[1wk_Ӹvrek ^NŸb#Oq(˯h,FHw%=J@Z@L|h/.}M43©M)>5 $@'bVK:D]rDԧQ E+OVeXXʒmޕ?sM_oDwӵ'= G^҇!fM>ZL}φ/KFD{"gkb)V.\ h}^Zo~OK#߈ZlZlWHFVh":l4FT,ߣk½X.?BCI͌RHRDź McUJJB֚L$('U+!)~ J%ҳ,ȭIٜ®T:3&gK{غalKz@s^D{E$K4X0p1 QT\a6Pãk'=-hu2G'/[XxJinfWW|, `{C;3)Z!@qD.-@9r'IQc"YFL^bx0nl5~5 /Ws~St+ȧ&pF܀Z8oדp.ӞIP&A83#3#  6FZ+Q4tጝJ|"I>g`%(. n^rz\S6xG}7 Z`TSzFD&w7䉷O`c A8?]P'LIby=Р}"._J֗b4TJvY@2!m9rd wzP65);$#;D\*&(.og#FFld \aqFEeHZrXY&ɸ8]Vjs2KQ%alQ饈A/s{-nv-GXQ(RɒԜDz+-vnvU7V7gz:}ɚe)wv-mھkT3۝]w{]vA+Vo)rA([CXzNp` ^!܇0 aP% s{3SWiw>gXy]tqad#AtsnHޞ|0ۊIMު<"+ԧuxj1i\.>rQ,3rTqRA^T\VpQ;lZX'sZiAYL6C"ӟ1",|n*{ܽaT-+vf8ъRyM˪7S[9ŃgloRH?wVM\3vT޾4e!o=3P%jF m*Iٝ2=`"ٙ|(0i xCxpE8Eg+1F2iSQՅhUժ$a\C";l>WE*P$*pmEkV|LK#J|HwIawٕ1ڪ]{ds`Wt!Adfp`e [JZb̏gia{"D5%Iq/OyĒs}/SΩr[wVo_?29㵦7- w6t.Kms~UU_ t8ĴC3ZvPQtevE}ݠe~m8aa]at,Z-Kݕ:J˒w%&aN!=]uq$`kq2)q8arub.Ǧ&q|f()8CW%,rɝ+``Ik??x_ͩ1'd;Z?[n6ܫ^EkAyjXZ>\\> i2g!KkNqBqZA?T@*!x4#_T=Ume'V| зn))~ zَΣh@mp Mˌ򸅪Z7q {LIp RRI*Qs:)JcpsᤘԸ^Ւ%Q|`| 1s`X2:JS.|pW,zXC; z@JUX w|>}vQ3PvGGN<Ϛ'foۋop;6^2\'電}¿:Jɖ~˫)?]ѼLz̸ Q vO1cQ" F". [ s܊D`qsM*YBV.Njd`<$􋑬A\[qv- ֘`SzI0#6z7]u;V&ٍùp,Sړ,Zl+oh9'=H8*).nTBf#> }/F C !y rbFoX$,+vCڎ5@a`tR0s {F Sl[r+y/ 3ce+/fjQlګ_D\` |~}d[yߕeWn^rӷ NYb0&۽)F"Ju2[Φ;h /(4^&.XV,lQ\kyOxނ.#%V$] c{<]#C}o9vw\Vߡ bm'_=_}9{_7-/E0JE_Eu̻ҢKt: }}$_~c ķ/vzë9чhy1P@i~aS?CHGH R42F(~q;"?L{(;j< "]s lFP+uUz8`4|Ժu"a_ }.Cȇ@HcS)bjj(KL0s&9Q,gclIRNb12$S8$j͕v+hl%&*1QCW䧘MƩN:Nc&=n?S`KQϩOiWMzG ָgUSd3S{P.yLQ 5uY腯|>^/;F_ii}g5#xsH?TCoo od/[pH*qKm\tQIkE?G` CRdr U@Ez"{8p3[?{0un&b'4HlOJC b-FX9i6]HL r`Ba5 搙"Ĺ8ꍳ8&S)\Ō#EP1SyeE#ں u{v75$y. |C,52󉄖G`;6>-ӒJwsWU g1yiOw\VQY{#~eW';բ&+cmek%\G3&ܟIe ے$A ީ8 ;.۬dfgi_^*Xد}1?8?KfըR0؃G@)FM.ۨ-_LYa|)i).t KJ'eHS OųIռ겊WdG)ˬh2LlEV'"n_XFA>ϥ03gѧ3aA R>ŵ^CYlErK&No_O~N8(i@I޺0՞{i )W=EUē'sCʪ773cI}U]dXV\kޔNB ܦRne[HQrO: k}m8K*iar(5=ƖNj(,E3&#θ'3mIQ`@Jy$ ZHyXדhE+#hm Bsm [j *E< (!!%<-9Ts s!`|0yG|7rngkdP yv]y(y8A<7JԄzur+Cdcc^K]~ꯘ EP K 1uUVr\^W9UM_e⪲C<;V5Surc@A_.͍oj%˞ɦ!| Si)7}]ӜDB e.'Kiz麈 [J|qii X# nd_ko2 x)/s3jbo(P^Uxʽz_[{n}+mU+23}{Vr֒l!-0)"|lYZ_"OevzbSeC u 9ah'gwrmW*?Tru%i195SW;𳩜 M3&F`9Z.d~2%1\s`ޜY0g1`N~Ism,!1NfN\Xs=6fG/9_ρY7qJ}P!]3&vwa aXNPi%d8-OuMxl^Zũi9y(h9;ѱS&wvjgڕII[}& }8 -}I$ԞDR H"W+D<(ԣ)W$7N$ $N To?OJMPÐ_&SSJ Vl:5v j`ˀ,0 "J%]^1i5nIIhMR5-)6Iq gF}&2e"4jMS2iff6sHHb22uTuL!1j4b!ٜޞE)K֛zYZ_ Hň*Wi^c5G#k،W\s2\)bU*eJ^QTT*:8Wmk[n gse Y$fg8LjrgFNRWo{,a*jB%! aG Հ.^ސKE$zů[blİyy2p_)u/>n7ID'$`B mBu ."Cdbk,h`w) lO{1}ʇ/&(N_!{1K41<ȜctzxkwSj[_.*/?{ßq$z5?C*jCH/A`RR }*G5xF4OC,h@˩$r(B/SGU q]K{Ev"m*l)5qo[[D<'~Y)rZPE4  1IQTp) =?^xL<Ž}> ̃1Q(3*ccOD6f b4(^יfF#40Gy)&JYG٘i;Mlࠧ$JD),rN*ek?@o_^M˖3Zm%t"$H.ŁؚW%4-G8j6kY%D}/a/ya{X%4jFU+3s=ٹ<8$W" :-X%[T+ʩJe 5+)<'@ F֌)f$qZl^մjP9'cR&HJ*| T"Y,/{8#j_B1 ! 2,EiŮb ,rnۿU6VܰALlb׹2#n1ř &Q.dg8SpSp%27Kfp7~\# ȂFE-(\GGyV+ z) (~G?V9Nj$[OoY DPI6~a,(%Ir1|7o+k++-x.<SR^XUDkwEP0ا EbHAS}Rz7l[(7*I('{DΆ'[ :)ulghW̶x"ŲPIiO$8 8+FKK '=} >`gaφ݀Xzc \ @d蘰@R+i5R\.4V!x\"^y2Ѹ=v ˉ (1NR.+1KɏE7`By3ކ> $HJg=o/ځ˅{p|>UdKwP٭dtЭCdPIVutoG|lRLG3deRҔٛIħ7*-͸^`k (W,A]1H".NQLwUx3MjG٬ّSZ106G'Z@ ԛs= T蠊uϲ)KYFq3Y2 sEo[]7U*\x8{:k/w^ppaŮjU{*cD0 -c6.^hdU7+ɬr'yzV)I4W{b ƞe壏u6.wo. =^ϲ-/QS#?٩>"(U ~z nˍRu悔=}w3ueծBG81wwܶikVҊ ⁹Ƃ<1n|xէd2K:+%tc܎;"U"R#@/'.WbrD\LH>L(QH &VZ5R$~ň,!GE7~e/9_`77 ƜJ޽bG[6l.{dKoOW@`3џaU!9&z}Y፯gw, <_wUekA:< ([ ,tDBJ*ո (TH5V1<>~y d=Ё^ [ONhB },B,"[I,[9  !҇r'9Gd) /"e☁˿ T7|y@Dl߼ʃ9Ģ uѽlx"uY\d(!w?HOOBى&))P83><उG7n카k佔s J*Ϳsp jji$je•Ѹv%_zVbؖ3kަolYV^^f% [KRVRsK2t4dG=B\ qC1iN˕Il],eɺDh}AKB Q-Pyv3'|#"bL3}0hjw^[Eem;R+J4)N-id_eYq*<6ڊ/-z?Vb?L>C?բߡZעeڋz=fЧp<Ϣg{sx%m9t?@2Cy(ۀnrSqk|}h]B8DaAE2lg[?OIgM+`Yn(o,4,) o{e.;d@&wʾ-W8D.Q*WŨV}6Գyi4k"YnY}!MUc?o55_!1G,[>ZwqNŽe .&~dJfھn/i9*;;/8u)Ru/6-?t8R~x(s!BfSxPn_ϾH W4)3MSIsPh4̓;MK B4-EѴ pa4-G\M+ ~=OFj45pu1Jh ͊)*e4eFi%лi sN4-ChZѴpWiZDjhZnԌްqʞ>Þ[lou#s[m9eֺI{}j`pkfЍ7 7 n?Q=~pd`pžmM,[SpMEF@7 ON N@-gU=?582e.=444~P\?81G6B;7MO O goYj~h  'GG6NMy<۷o^es֏n{S;'7@s6Nm Oo\O ̖H,ࠝU?  @&F7 >yoxdZ5{ϞF5}chFYvr5(!|> YC#P*R նZ M|ldngZ!݄/; FA*7;7Gnx|X_5i=䌈rb^ nxgr)?Z( 3JDhAeJ;RrX JK'ķZFͮ\/=בG!1JM@ s}7%ܛ7zV&Q̟QCeicBpNY\PaK(Yf"4fWz7m-t ]xrLXۦ׶ saMjh9֣mҎjkj>LKoBd Y|L*jK<=wbGk^rP$HTx`= >;$q@I;vR|-SLZ{">* endstream endobj 3942 0 obj 19257 endobj 3943 0 obj <> endobj 3944 0 obj <> stream x]͎0}"bD|m'~$Q>$F*! a7VbF'ƾ|1}׎oí>1?]31)?KeNG{giyuߝoE6>}vgjn)}4%>LχGJԍy-ySfuLuZodzO#54KE2K]g7.9aꦩEQrʢȞB Rl+7s^8yf ow[fc}tߑ/KdXxߙ!_3֧B>8pj_GB#GSx/p_LGM)9Ρ?,G5/{C0x{GGG˳oq?h#{;[&6αZ#L0?`G-/];=R_з`~Cu+u_ ƣh~{$#[6߯H-/y?hMzy?> endobj 3946 0 obj <> endobj 3947 0 obj << /Font 3946 0 R /XObject<> /ProcSet[/PDF/Text/ImageC/ImageI/ImageB] >> endobj 1 0 obj <> endobj 12 0 obj <> endobj 243 0 obj <> endobj 370 0 obj <> endobj 392 0 obj <> endobj 446 0 obj <> endobj 519 0 obj <> endobj 583 0 obj <> endobj 652 0 obj <> endobj 781 0 obj <> endobj 856 0 obj <> endobj 896 0 obj <> endobj 946 0 obj <> endobj 1001 0 obj <> endobj 1078 0 obj <> endobj 1130 0 obj <> endobj 1187 0 obj <> endobj 1246 0 obj <> endobj 1297 0 obj <> endobj 1368 0 obj <> endobj 1416 0 obj <> endobj 1493 0 obj <> endobj 1567 0 obj <> endobj 1684 0 obj <> endobj 1768 0 obj <> endobj 1847 0 obj <> endobj 1918 0 obj <> endobj 1984 0 obj <> endobj 2040 0 obj <> endobj 2139 0 obj <> endobj 2248 0 obj <> endobj 2382 0 obj <> endobj 2473 0 obj <> endobj 2576 0 obj <> endobj 2634 0 obj <> endobj 2671 0 obj <> endobj 2703 0 obj <> endobj 2749 0 obj <> endobj 2796 0 obj <> endobj 2873 0 obj <> endobj 2985 0 obj <> endobj 3046 0 obj <> endobj 3230 0 obj <> endobj 3295 0 obj <> endobj 3337 0 obj <> endobj 3360 0 obj <> endobj 3386 0 obj <> endobj 3407 0 obj <> endobj 3432 0 obj <> endobj 3460 0 obj <> endobj 3481 0 obj <> endobj 3500 0 obj <> endobj 3534 0 obj <> endobj 3560 0 obj <> endobj 3591 0 obj <> endobj 3629 0 obj <> endobj 3948 0 obj <> endobj 3949 0 obj < /Dest[12 0 R/XYZ 56.7 803.539 0]/Parent 3948 0 R/Next 3950 0 R>> endobj 3950 0 obj < /Dest[370 0 R/XYZ 56.7 803.539 0]/Parent 3948 0 R/Prev 3949 0 R/Next 3961 0 R>> endobj 3951 0 obj < /Dest[370 0 R/XYZ 56.7 452.239 0]/Parent 3950 0 R/Next 3952 0 R>> endobj 3952 0 obj < /Dest[392 0 R/XYZ 56.7 813.539 0]/Parent 3950 0 R/Prev 3951 0 R/Next 3956 0 R>> endobj 3953 0 obj < /Dest[392 0 R/XYZ 56.7 782.489 0]/Parent 3952 0 R/Next 3954 0 R>> endobj 3954 0 obj < /Dest[446 0 R/XYZ 56.7 515.139 0]/Parent 3952 0 R/Prev 3953 0 R/Next 3955 0 R>> endobj 3955 0 obj < /Dest[519 0 R/XYZ 56.7 629.889 0]/Parent 3952 0 R/Prev 3954 0 R>> endobj 3956 0 obj < /Dest[583 0 R/XYZ 56.7 74.789 0]/Parent 3950 0 R/Prev 3952 0 R/Next 3957 0 R>> endobj 3957 0 obj < /Dest[652 0 R/XYZ 56.7 396.839 0]/Parent 3950 0 R/Prev 3956 0 R/Next 3960 0 R>> endobj 3958 0 obj < /Dest[652 0 R/XYZ 56.7 365.789 0]/Parent 3957 0 R/Next 3959 0 R>> endobj 3959 0 obj < /Dest[781 0 R/XYZ 56.7 813.539 0]/Parent 3957 0 R/Prev 3958 0 R>> endobj 3960 0 obj < /Dest[781 0 R/XYZ 56.7 528.689 0]/Parent 3950 0 R/Prev 3957 0 R>> endobj 3961 0 obj < /Dest[781 0 R/XYZ 56.7 289.889 0]/Parent 3948 0 R/Prev 3950 0 R/Next 3967 0 R>> endobj 3962 0 obj < /Dest[781 0 R/XYZ 56.7 221.889 0]/Parent 3961 0 R/Next 3963 0 R>> endobj 3963 0 obj < /Dest[856 0 R/XYZ 56.7 500.589 0]/Parent 3961 0 R/Prev 3962 0 R/Next 3964 0 R>> endobj 3964 0 obj < /Dest[856 0 R/XYZ 56.7 167.089 0]/Parent 3961 0 R/Prev 3963 0 R/Next 3965 0 R>> endobj 3965 0 obj < /Dest[896 0 R/XYZ 56.7 717.789 0]/Parent 3961 0 R/Prev 3964 0 R/Next 3966 0 R>> endobj 3966 0 obj < /Dest[896 0 R/XYZ 56.7 566.489 0]/Parent 3961 0 R/Prev 3965 0 R>> endobj 3967 0 obj < /Dest[946 0 R/XYZ 56.7 540.039 0]/Parent 3948 0 R/Prev 3961 0 R/Next 3977 0 R>> endobj 3968 0 obj < /Dest[946 0 R/XYZ 56.7 441.539 0]/Parent 3967 0 R/Next 3969 0 R>> endobj 3969 0 obj < /Dest[1001 0 R/XYZ 56.7 813.539 0]/Parent 3967 0 R/Prev 3968 0 R/Next 3970 0 R>> endobj 3970 0 obj < /Dest[1078 0 R/XYZ 56.7 645.039 0]/Parent 3967 0 R/Prev 3969 0 R/Next 3971 0 R>> endobj 3971 0 obj < /Dest[1130 0 R/XYZ 56.7 645.239 0]/Parent 3967 0 R/Prev 3970 0 R/Next 3972 0 R>> endobj 3972 0 obj < /Dest[1187 0 R/XYZ 56.7 813.539 0]/Parent 3967 0 R/Prev 3971 0 R/Next 3973 0 R>> endobj 3973 0 obj < /Dest[1187 0 R/XYZ 56.7 145.339 0]/Parent 3967 0 R/Prev 3972 0 R/Next 3974 0 R>> endobj 3974 0 obj < /Dest[1246 0 R/XYZ 56.7 726.989 0]/Parent 3967 0 R/Prev 3973 0 R/Next 3975 0 R>> endobj 3975 0 obj < /Dest[1246 0 R/XYZ 56.7 255.089 0]/Parent 3967 0 R/Prev 3974 0 R/Next 3976 0 R>> endobj 3976 0 obj < /Dest[1246 0 R/XYZ 56.7 94.439 0]/Parent 3967 0 R/Prev 3975 0 R>> endobj 3977 0 obj < /Dest[1297 0 R/XYZ 56.7 372.689 0]/Parent 3948 0 R/Prev 3967 0 R/Next 3981 0 R>> endobj 3978 0 obj < /Dest[1297 0 R/XYZ 56.7 335.189 0]/Parent 3977 0 R/Next 3979 0 R>> endobj 3979 0 obj < /Dest[1368 0 R/XYZ 56.7 480.689 0]/Parent 3977 0 R/Prev 3978 0 R/Next 3980 0 R>> endobj 3980 0 obj < /Dest[1416 0 R/XYZ 56.7 693.989 0]/Parent 3977 0 R/Prev 3979 0 R>> endobj 3981 0 obj < /Dest[1416 0 R/XYZ 56.7 481.189 0]/Parent 3948 0 R/Prev 3977 0 R/Next 3982 0 R>> endobj 3982 0 obj < /Dest[1493 0 R/XYZ 56.7 558.439 0]/Parent 3948 0 R/Prev 3981 0 R/Next 3984 0 R>> endobj 3983 0 obj < /Dest[1493 0 R/XYZ 56.7 196.439 0]/Parent 3982 0 R>> endobj 3984 0 obj < /Dest[1684 0 R/XYZ 56.7 273.589 0]/Parent 3948 0 R/Prev 3982 0 R/Next 3985 0 R>> endobj 3985 0 obj < /Dest[1847 0 R/XYZ 56.7 704.739 0]/Parent 3948 0 R/Prev 3984 0 R/Next 3990 0 R>> endobj 3986 0 obj < /Dest[1847 0 R/XYZ 56.7 496.189 0]/Parent 3985 0 R>> endobj 3987 0 obj < /Dest[1847 0 R/XYZ 56.7 371.439 0]/Parent 3986 0 R/Next 3988 0 R>> endobj 3988 0 obj < /Dest[1847 0 R/XYZ 56.7 101.439 0]/Parent 3986 0 R/Prev 3987 0 R/Next 3989 0 R>> endobj 3989 0 obj < /Dest[1918 0 R/XYZ 56.7 553.289 0]/Parent 3986 0 R/Prev 3988 0 R>> endobj 3990 0 obj < /Dest[1918 0 R/XYZ 56.7 323.439 0]/Parent 3948 0 R/Prev 3985 0 R/Next 4016 0 R>> endobj 3991 0 obj < /Dest[1918 0 R/XYZ 56.7 285.939 0]/Parent 3990 0 R/Next 3999 0 R>> endobj 3992 0 obj < /Dest[1918 0 R/XYZ 56.7 175.339 0]/Parent 3991 0 R/Next 3993 0 R>> endobj 3993 0 obj < /Dest[1984 0 R/XYZ 56.7 611.389 0]/Parent 3991 0 R/Prev 3992 0 R/Next 3994 0 R>> endobj 3994 0 obj < /Dest[1984 0 R/XYZ 56.7 389.039 0]/Parent 3991 0 R/Prev 3993 0 R/Next 3995 0 R>> endobj 3995 0 obj < /Dest[1984 0 R/XYZ 56.7 231.889 0]/Parent 3991 0 R/Prev 3994 0 R/Next 3996 0 R>> endobj 3996 0 obj < /Dest[2040 0 R/XYZ 56.7 541.139 0]/Parent 3991 0 R/Prev 3995 0 R/Next 3997 0 R>> endobj 3997 0 obj < /Dest[2040 0 R/XYZ 56.7 213.089 0]/Parent 3991 0 R/Prev 3996 0 R/Next 3998 0 R>> endobj 3998 0 obj < /Dest[2139 0 R/XYZ 56.7 674.339 0]/Parent 3991 0 R/Prev 3997 0 R>> endobj 3999 0 obj < /Dest[2248 0 R/XYZ 56.7 473.539 0]/Parent 3990 0 R/Prev 3991 0 R/Next 4002 0 R>> endobj 4000 0 obj < /Dest[2248 0 R/XYZ 56.7 442.489 0]/Parent 3999 0 R/Next 4001 0 R>> endobj 4001 0 obj < /Dest[2382 0 R/XYZ 56.7 680.939 0]/Parent 3999 0 R/Prev 4000 0 R>> endobj 4002 0 obj < /Dest[2382 0 R/XYZ 56.7 461.839 0]/Parent 3990 0 R/Prev 3999 0 R/Next 4005 0 R>> endobj 4003 0 obj < /Dest[2382 0 R/XYZ 56.7 367.589 0]/Parent 4002 0 R/Next 4004 0 R>> endobj 4004 0 obj < /Dest[2473 0 R/XYZ 56.7 609.239 0]/Parent 4002 0 R/Prev 4003 0 R>> endobj 4005 0 obj < /Dest[2576 0 R/XYZ 56.7 475.139 0]/Parent 3990 0 R/Prev 4002 0 R/Next 4008 0 R>> endobj 4006 0 obj < /Dest[2576 0 R/XYZ 56.7 444.089 0]/Parent 4005 0 R/Next 4007 0 R>> endobj 4007 0 obj < /Dest[2634 0 R/XYZ 56.7 699.689 0]/Parent 4005 0 R/Prev 4006 0 R>> endobj 4008 0 obj < /Dest[2634 0 R/XYZ 56.7 266.039 0]/Parent 3990 0 R/Prev 4005 0 R/Next 4011 0 R>> endobj 4009 0 obj < /Dest[2634 0 R/XYZ 56.7 234.989 0]/Parent 4008 0 R/Next 4010 0 R>> endobj 4010 0 obj < /Dest[2703 0 R/XYZ 56.7 813.539 0]/Parent 4008 0 R/Prev 4009 0 R>> endobj 4011 0 obj < /Dest[2796 0 R/XYZ 56.7 386.989 0]/Parent 3990 0 R/Prev 4008 0 R/Next 4012 0 R>> endobj 4012 0 obj < /Dest[2873 0 R/XYZ 56.7 682.339 0]/Parent 3990 0 R/Prev 4011 0 R/Next 4013 0 R>> endobj 4013 0 obj < /Dest[2985 0 R/XYZ 56.7 813.539 0]/Parent 3990 0 R/Prev 4012 0 R/Next 4014 0 R>> endobj 4014 0 obj < /Dest[3046 0 R/XYZ 56.7 776.039 0]/Parent 3990 0 R/Prev 4013 0 R/Next 4015 0 R>> endobj 4015 0 obj < /Dest[3046 0 R/XYZ 56.7 171.939 0]/Parent 3990 0 R/Prev 4014 0 R>> endobj 4016 0 obj < /Dest[3295 0 R/XYZ 56.7 756.589 0]/Parent 3948 0 R/Prev 3990 0 R>> endobj 4017 0 obj < /Dest[3295 0 R/XYZ 56.7 719.089 0]/Parent 4016 0 R>> endobj 4018 0 obj < /Dest[3295 0 R/XYZ 56.7 688.039 0]/Parent 4017 0 R/Next 4019 0 R>> endobj 4019 0 obj < /Dest[3295 0 R/XYZ 56.7 200.339 0]/Parent 4017 0 R/Prev 4018 0 R/Next 4020 0 R>> endobj 4020 0 obj < /Dest[3337 0 R/XYZ 56.7 666.989 0]/Parent 4017 0 R/Prev 4019 0 R/Next 4021 0 R>> endobj 4021 0 obj < /Dest[3337 0 R/XYZ 56.7 402.189 0]/Parent 4017 0 R/Prev 4020 0 R/Next 4022 0 R>> endobj 4022 0 obj < /Dest[3337 0 R/XYZ 56.7 137.389 0]/Parent 4017 0 R/Prev 4021 0 R/Next 4023 0 R>> endobj 4023 0 obj < /Dest[3360 0 R/XYZ 56.7 617.939 0]/Parent 4017 0 R/Prev 4022 0 R/Next 4024 0 R>> endobj 4024 0 obj < /Dest[3360 0 R/XYZ 56.7 142.189 0]/Parent 4017 0 R/Prev 4023 0 R/Next 4025 0 R>> endobj 4025 0 obj < /Dest[3386 0 R/XYZ 56.7 426.039 0]/Parent 4017 0 R/Prev 4024 0 R/Next 4026 0 R>> endobj 4026 0 obj < /Dest[3407 0 R/XYZ 56.7 650.539 0]/Parent 4017 0 R/Prev 4025 0 R/Next 4027 0 R>> endobj 4027 0 obj < /Dest[3407 0 R/XYZ 56.7 161.039 0]/Parent 4017 0 R/Prev 4026 0 R/Next 4028 0 R>> endobj 4028 0 obj < /Dest[3432 0 R/XYZ 56.7 521.839 0]/Parent 4017 0 R/Prev 4027 0 R/Next 4029 0 R>> endobj 4029 0 obj < /Dest[3432 0 R/XYZ 56.7 174.789 0]/Parent 4017 0 R/Prev 4028 0 R/Next 4030 0 R>> endobj 4030 0 obj < /Dest[3460 0 R/XYZ 56.7 521.939 0]/Parent 4017 0 R/Prev 4029 0 R/Next 4031 0 R>> endobj 4031 0 obj < /Dest[3460 0 R/XYZ 56.7 207.989 0]/Parent 4017 0 R/Prev 4030 0 R/Next 4032 0 R>> endobj 4032 0 obj < /Dest[3481 0 R/XYZ 56.7 650.639 0]/Parent 4017 0 R/Prev 4031 0 R/Next 4033 0 R>> endobj 4033 0 obj < /Dest[3481 0 R/XYZ 56.7 399.989 0]/Parent 4017 0 R/Prev 4032 0 R/Next 4034 0 R>> endobj 4034 0 obj < /Dest[3481 0 R/XYZ 56.7 212.439 0]/Parent 4017 0 R/Prev 4033 0 R/Next 4035 0 R>> endobj 4035 0 obj < /Dest[3500 0 R/XYZ 56.7 633.789 0]/Parent 4017 0 R/Prev 4034 0 R/Next 4036 0 R>> endobj 4036 0 obj < /Dest[3534 0 R/XYZ 56.7 777.039 0]/Parent 4017 0 R/Prev 4035 0 R/Next 4037 0 R>> endobj 4037 0 obj < /Dest[3534 0 R/XYZ 56.7 495.689 0]/Parent 4017 0 R/Prev 4036 0 R/Next 4038 0 R>> endobj 4038 0 obj < /Dest[3534 0 R/XYZ 56.7 226.189 0]/Parent 4017 0 R/Prev 4037 0 R/Next 4039 0 R>> endobj 4039 0 obj < /Dest[3560 0 R/XYZ 56.7 329.239 0]/Parent 4017 0 R/Prev 4038 0 R/Next 4040 0 R>> endobj 4040 0 obj < /Dest[3591 0 R/XYZ 56.7 167.939 0]/Parent 4017 0 R/Prev 4039 0 R/Next 4041 0 R>> endobj 4041 0 obj < /Dest[3629 0 R/XYZ 56.7 489.339 0]/Parent 4017 0 R/Prev 4040 0 R>> endobj 6 0 obj <> /K[0 ] >> endobj 5 0 obj <> /K[6 0 R 1 ] >> endobj 8 0 obj <> /K[2 ] >> endobj 9 0 obj <> /K[3 ] >> endobj 11 0 obj <> endobj 10 0 obj <> /K[4 11 0 R ] >> endobj 15 0 obj <> /K[0 ] >> endobj 18 0 obj <> endobj 21 0 obj <> ] >> endobj 20 0 obj <> /K[21 0 R 3 ] >> endobj 24 0 obj <> endobj 27 0 obj <> ] >> endobj 26 0 obj <> /K[27 0 R 6 ] >> endobj 25 0 obj <> endobj 23 0 obj <> endobj 29 0 obj <> endobj 32 0 obj <> ] >> endobj 31 0 obj <> /K[32 0 R 9 ] >> endobj 35 0 obj <> endobj 38 0 obj <> ] >> endobj 37 0 obj <> /K[38 0 R 12 ] >> endobj 36 0 obj <> endobj 34 0 obj <> endobj 40 0 obj <> endobj 43 0 obj <> ] >> endobj 42 0 obj <> /K[43 0 R 15 ] >> endobj 41 0 obj <> endobj 39 0 obj <> endobj 45 0 obj <> endobj 48 0 obj <> ] >> endobj 47 0 obj <> /K[48 0 R 18 ] >> endobj 46 0 obj <> endobj 44 0 obj <> endobj 33 0 obj <> /K[34 0 R 39 0 R 44 0 R ] >> endobj 30 0 obj <> endobj 28 0 obj <> endobj 50 0 obj <> endobj 53 0 obj <> ] >> endobj 52 0 obj <> /K[53 0 R 21 ] >> endobj 51 0 obj <> endobj 49 0 obj <> endobj 55 0 obj <> endobj 58 0 obj <> ] >> endobj 57 0 obj <> /K[58 0 R 24 ] >> endobj 61 0 obj <> endobj 64 0 obj <> ] >> endobj 63 0 obj <> /K[64 0 R 27 ] >> endobj 62 0 obj <> endobj 60 0 obj <> endobj 66 0 obj <> endobj 69 0 obj <> ] >> endobj 68 0 obj <> /K[69 0 R 30 ] >> endobj 67 0 obj <> endobj 65 0 obj <> endobj 59 0 obj <> /K[60 0 R 65 0 R ] >> endobj 56 0 obj <> endobj 54 0 obj <> endobj 71 0 obj <> endobj 74 0 obj <> ] >> endobj 73 0 obj <> /K[74 0 R 33 ] >> endobj 72 0 obj <> endobj 70 0 obj <> endobj 22 0 obj <> /K[23 0 R 28 0 R 49 0 R 54 0 R 70 0 R ] >> endobj 19 0 obj <> endobj 17 0 obj <> endobj 76 0 obj <> endobj 79 0 obj <> ] >> endobj 78 0 obj <> /K[79 0 R 36 ] >> endobj 82 0 obj <> endobj 85 0 obj <> ] >> endobj 84 0 obj <> /K[85 0 R 39 ] >> endobj 83 0 obj <> endobj 81 0 obj <> endobj 87 0 obj <> endobj 90 0 obj <> ] >> endobj 89 0 obj <> /K[90 0 R 42 ] >> endobj 88 0 obj <> endobj 86 0 obj <> endobj 92 0 obj <> endobj 95 0 obj <> ] >> endobj 94 0 obj <> /K[95 0 R 45 ] >> endobj 93 0 obj <> endobj 91 0 obj <> endobj 97 0 obj <> endobj 100 0 obj <> ] >> endobj 99 0 obj <> /K[100 0 R 48 ] >> endobj 98 0 obj <> endobj 96 0 obj <> endobj 102 0 obj <> endobj 105 0 obj <> ] >> endobj 104 0 obj <> /K[105 0 R 51 ] >> endobj 103 0 obj <> endobj 101 0 obj <> endobj 80 0 obj <> /K[81 0 R 86 0 R 91 0 R 96 0 R 101 0 R ] >> endobj 77 0 obj <> endobj 75 0 obj <> endobj 107 0 obj <> endobj 110 0 obj <> ] >> endobj 109 0 obj <> /K[110 0 R 54 ] >> endobj 113 0 obj <> endobj 116 0 obj <> ] >> endobj 115 0 obj <> /K[116 0 R 57 ] >> endobj 114 0 obj <> endobj 112 0 obj <> endobj 118 0 obj <> endobj 121 0 obj <> ] >> endobj 120 0 obj <> /K[121 0 R 60 ] >> endobj 119 0 obj <> endobj 117 0 obj <> endobj 123 0 obj <> endobj 126 0 obj <> ] >> endobj 125 0 obj <> /K[126 0 R 63 ] >> endobj 124 0 obj <> endobj 122 0 obj <> endobj 128 0 obj <> endobj 131 0 obj <> ] >> endobj 130 0 obj <> /K[131 0 R 66 ] >> endobj 129 0 obj <> endobj 127 0 obj <> endobj 133 0 obj <> endobj 136 0 obj <> ] >> endobj 135 0 obj <> /K[136 0 R 69 ] >> endobj 134 0 obj <> endobj 132 0 obj <> endobj 138 0 obj <> endobj 141 0 obj <> ] >> endobj 140 0 obj <> /K[141 0 R 72 ] >> endobj 139 0 obj <> endobj 137 0 obj <> endobj 143 0 obj <> endobj 146 0 obj <> ] >> endobj 145 0 obj <> /K[146 0 R 75 ] >> endobj 144 0 obj <> endobj 142 0 obj <> endobj 148 0 obj <> endobj 151 0 obj <> ] >> endobj 150 0 obj <> /K[151 0 R 78 ] >> endobj 149 0 obj <> endobj 147 0 obj <> endobj 153 0 obj <> endobj 156 0 obj <> ] >> endobj 155 0 obj <> /K[156 0 R 81 ] >> endobj 154 0 obj <> endobj 152 0 obj <> endobj 111 0 obj <> /K[112 0 R 117 0 R 122 0 R 127 0 R 132 0 R 137 0 R 142 0 R 147 0 R 152 0 R ] >> endobj 108 0 obj <> endobj 106 0 obj <> endobj 158 0 obj <> endobj 161 0 obj <> ] >> endobj 160 0 obj <> /K[161 0 R 84 ] >> endobj 164 0 obj <> endobj 167 0 obj <> ] >> endobj 166 0 obj <> /K[167 0 R 87 ] >> endobj 165 0 obj <> endobj 163 0 obj <> endobj 169 0 obj <> endobj 172 0 obj <> ] >> endobj 171 0 obj <> /K[172 0 R 90 ] >> endobj 170 0 obj <> endobj 168 0 obj <> endobj 174 0 obj <> endobj 177 0 obj <> ] >> endobj 176 0 obj <> /K[177 0 R 93 ] >> endobj 175 0 obj <> endobj 173 0 obj <> endobj 162 0 obj <> /K[163 0 R 168 0 R 173 0 R ] >> endobj 159 0 obj <> endobj 157 0 obj <> endobj 179 0 obj <> endobj 182 0 obj <> ] >> endobj 181 0 obj <> /K[182 0 R 96 ] >> endobj 180 0 obj <> endobj 178 0 obj <> endobj 184 0 obj <> endobj 187 0 obj <> ] >> endobj 186 0 obj <> /K[187 0 R 99 ] >> endobj 190 0 obj <> endobj 193 0 obj <> ] >> endobj 192 0 obj <> /K[193 0 R 102 ] >> endobj 191 0 obj <> endobj 189 0 obj <> endobj 188 0 obj <> /K[189 0 R ] >> endobj 185 0 obj <> endobj 183 0 obj <> endobj 195 0 obj <> endobj 198 0 obj <> ] >> endobj 197 0 obj <> /K[198 0 R 105 ] >> endobj 196 0 obj <> endobj 194 0 obj <> endobj 200 0 obj <> endobj 203 0 obj <> ] >> endobj 202 0 obj <> /K[203 0 R 108 ] >> endobj 206 0 obj <> endobj 209 0 obj <> ] >> endobj 208 0 obj <> /K[209 0 R 111 ] >> endobj 212 0 obj <> endobj 215 0 obj <> ] >> endobj 214 0 obj <> /K[215 0 R 114 ] >> endobj 213 0 obj <> endobj 211 0 obj <> endobj 217 0 obj <> endobj 220 0 obj <> ] >> endobj 219 0 obj <> /K[220 0 R 117 ] >> endobj 218 0 obj <> endobj 216 0 obj <> endobj 222 0 obj <> endobj 225 0 obj <> ] >> endobj 224 0 obj <> /K[225 0 R 120 ] >> endobj 223 0 obj <> endobj 221 0 obj <> endobj 210 0 obj <> /K[211 0 R 216 0 R 221 0 R ] >> endobj 207 0 obj <> endobj 205 0 obj <> endobj 204 0 obj <> /K[205 0 R ] >> endobj 201 0 obj <> endobj 199 0 obj <> endobj 227 0 obj <> endobj 230 0 obj <> ] >> endobj 229 0 obj <> /K[230 0 R 123 ] >> endobj 233 0 obj <> endobj 236 0 obj <> ] >> endobj 235 0 obj <> /K[236 0 R 126 ] >> endobj 239 0 obj <> endobj 242 0 obj <> ] >> endobj 241 0 obj <> /K[242 0 R 129 ] >> endobj 240 0 obj <> endobj 238 0 obj <> endobj 247 0 obj <> endobj 250 0 obj <> ] >> endobj 249 0 obj <> /K[250 0 R 2 ] >> endobj 248 0 obj <> endobj 246 0 obj <> endobj 252 0 obj <> endobj 255 0 obj <> ] >> endobj 254 0 obj <> /K[255 0 R 5 ] >> endobj 253 0 obj <> endobj 251 0 obj <> endobj 257 0 obj <> endobj 260 0 obj <> ] >> endobj 259 0 obj <> /K[260 0 R 8 ] >> endobj 258 0 obj <> endobj 256 0 obj <> endobj 262 0 obj <> endobj 265 0 obj <> ] >> endobj 264 0 obj <> /K[265 0 R 11 ] >> endobj 263 0 obj <> endobj 261 0 obj <> endobj 267 0 obj <> endobj 270 0 obj <> ] >> endobj 269 0 obj <> /K[270 0 R 14 ] >> endobj 268 0 obj <> endobj 266 0 obj <> endobj 272 0 obj <> endobj 275 0 obj <> ] >> endobj 274 0 obj <> /K[275 0 R 17 ] >> endobj 273 0 obj <> endobj 271 0 obj <> endobj 237 0 obj <> /K[238 0 R 246 0 R 251 0 R 256 0 R 261 0 R 266 0 R 271 0 R ] >> endobj 234 0 obj <> endobj 232 0 obj <> endobj 277 0 obj <> endobj 280 0 obj <> ] >> endobj 279 0 obj <> /K[280 0 R 20 ] >> endobj 283 0 obj <> endobj 286 0 obj <> ] >> endobj 285 0 obj <> /K[286 0 R 23 ] >> endobj 284 0 obj <> endobj 282 0 obj <> endobj 288 0 obj <> endobj 291 0 obj <> ] >> endobj 290 0 obj <> /K[291 0 R 26 ] >> endobj 289 0 obj <> endobj 287 0 obj <> endobj 281 0 obj <> /K[282 0 R 287 0 R ] >> endobj 278 0 obj <> endobj 276 0 obj <> endobj 293 0 obj <> endobj 296 0 obj <> ] >> endobj 295 0 obj <> /K[296 0 R 29 ] >> endobj 299 0 obj <> endobj 302 0 obj <> ] >> endobj 301 0 obj <> /K[302 0 R 32 ] >> endobj 300 0 obj <> endobj 298 0 obj <> endobj 304 0 obj <> endobj 307 0 obj <> ] >> endobj 306 0 obj <> /K[307 0 R 35 ] >> endobj 305 0 obj <> endobj 303 0 obj <> endobj 297 0 obj <> /K[298 0 R 303 0 R ] >> endobj 294 0 obj <> endobj 292 0 obj <> endobj 309 0 obj <> endobj 312 0 obj <> ] >> endobj 311 0 obj <> /K[312 0 R 38 ] >> endobj 315 0 obj <> endobj 318 0 obj <> ] >> endobj 317 0 obj <> /K[318 0 R 41 ] >> endobj 316 0 obj <> endobj 314 0 obj <> endobj 320 0 obj <> endobj 323 0 obj <> ] >> endobj 322 0 obj <> /K[323 0 R 44 ] >> endobj 321 0 obj <> endobj 319 0 obj <> endobj 313 0 obj <> /K[314 0 R 319 0 R ] >> endobj 310 0 obj <> endobj 308 0 obj <> endobj 325 0 obj <> endobj 328 0 obj <> ] >> endobj 327 0 obj <> /K[328 0 R 47 ] >> endobj 331 0 obj <> endobj 334 0 obj <> ] >> endobj 333 0 obj <> /K[334 0 R 50 ] >> endobj 332 0 obj <> endobj 330 0 obj <> endobj 336 0 obj <> endobj 339 0 obj <> ] >> endobj 338 0 obj <> /K[339 0 R 53 ] >> endobj 337 0 obj <> endobj 335 0 obj <> endobj 329 0 obj <> /K[330 0 R 335 0 R ] >> endobj 326 0 obj <> endobj 324 0 obj <> endobj 341 0 obj <> endobj 344 0 obj <> ] >> endobj 343 0 obj <> /K[344 0 R 56 ] >> endobj 342 0 obj <> endobj 340 0 obj <> endobj 346 0 obj <> endobj 349 0 obj <> ] >> endobj 348 0 obj <> /K[349 0 R 59 ] >> endobj 347 0 obj <> endobj 345 0 obj <> endobj 351 0 obj <> endobj 354 0 obj <> ] >> endobj 353 0 obj <> /K[354 0 R 62 ] >> endobj 352 0 obj <> endobj 350 0 obj <> endobj 356 0 obj <> endobj 359 0 obj <> ] >> endobj 358 0 obj <> /K[359 0 R 65 ] >> endobj 357 0 obj <> endobj 355 0 obj <> endobj 361 0 obj <> endobj 364 0 obj <> ] >> endobj 363 0 obj <> /K[364 0 R 68 ] >> endobj 362 0 obj <> endobj 360 0 obj <> endobj 231 0 obj <> /K[232 0 R 276 0 R 292 0 R 308 0 R 324 0 R 340 0 R 345 0 R 350 0 R 355 0 R 360 0 R ] >> endobj 228 0 obj <> endobj 226 0 obj <> endobj 366 0 obj <> endobj 369 0 obj <> ] >> endobj 368 0 obj <> /K[369 0 R 71 ] >> endobj 367 0 obj <> endobj 365 0 obj <> endobj 16 0 obj <> /K[17 0 R 75 0 R 106 0 R 157 0 R 178 0 R 183 0 R 194 0 R 199 0 R 226 0 R 365 0 R ] >> endobj 373 0 obj <> /K[0 ] >> endobj 374 0 obj <> /K[1 2 3 ] >> endobj 375 0 obj <> /K[4 5 6 7 8 9 ] >> endobj 377 0 obj <> endobj 378 0 obj <> ] >> endobj 379 0 obj <> ] >> endobj 376 0 obj <> /K[377 0 R 11 378 0 R 13 14 379 0 R 16 ] >> endobj 381 0 obj <> ] >> endobj 380 0 obj <> /K[17 381 0 R 19 ] >> endobj 382 0 obj <> /K[20 ] >> endobj 383 0 obj <> /K[21 ] >> endobj 384 0 obj <> /K[22 ] >> endobj 385 0 obj <> /K[23 24 25 ] >> endobj 386 0 obj <> /K[26 27 28 29 ] >> endobj 388 0 obj <> ] >> endobj 387 0 obj <> /K[30 31 32 33 388 0 R 35 36 ] >> endobj 390 0 obj <> ] >> endobj 389 0 obj <> /K[37 38 39 40 390 0 R 42 ] >> endobj 391 0 obj <> /K[43 ] >> endobj 395 0 obj <> /K[0 ] >> endobj 397 0 obj <> /K[1 ] >> endobj 396 0 obj <> /K[397 0 R ] >> endobj 400 0 obj <> endobj 403 0 obj <> endobj 402 0 obj <> /K[403 0 R 4 5 6 ] >> endobj 401 0 obj <> endobj 399 0 obj <> endobj 405 0 obj <> endobj 408 0 obj <> endobj 409 0 obj <> endobj 410 0 obj <> ] >> endobj 407 0 obj <> /K[408 0 R 9 10 409 0 R 12 410 0 R 14 15 16 ] >> endobj 406 0 obj <> endobj 404 0 obj <> endobj 412 0 obj <> endobj 415 0 obj <> endobj 416 0 obj <> ] >> endobj 417 0 obj <> endobj 418 0 obj <> endobj 419 0 obj <> ] >> endobj 420 0 obj <> ] >> endobj 414 0 obj <> /K[415 0 R 19 20 21 22 416 0 R 24 25 26 27 28 29 417 0 R 31 418 0 R 34 419 0 R 36 420 0 R 38 ] >> endobj 413 0 obj <> endobj 411 0 obj <> endobj 422 0 obj <> endobj 425 0 obj <> endobj 426 0 obj <> endobj 427 0 obj <> ] >> endobj 428 0 obj <> ] >> endobj 429 0 obj <> endobj 430 0 obj <> ] >> endobj 431 0 obj <> endobj 432 0 obj <> endobj 424 0 obj <> /K[425 0 R 41 42 43 426 0 R 45 427 0 R 428 0 R 48 429 0 R 50 51 52 53 54 430 0 R 56 431 0 R 58 59 432 0 R 61 ] >> endobj 423 0 obj <> endobj 421 0 obj <> endobj 434 0 obj <> endobj 437 0 obj <> endobj 438 0 obj <> ] >> endobj 439 0 obj <> endobj 440 0 obj <> endobj 436 0 obj <> /K[437 0 R 64 65 66 67 438 0 R 69 70 439 0 R 72 73 74 440 0 R 77 ] >> endobj 435 0 obj <> endobj 433 0 obj <> endobj 442 0 obj <> endobj 445 0 obj <> endobj 449 0 obj <> ] >> endobj 444 0 obj <> /K[445 0 R 80 <> <> <> 449 0 R <> ] >> endobj 443 0 obj <> endobj 441 0 obj <> endobj 451 0 obj <> endobj 454 0 obj <> endobj 455 0 obj <> endobj 456 0 obj <> endobj 457 0 obj <> endobj 458 0 obj <> ] >> endobj 459 0 obj <> ] >> endobj 460 0 obj <> endobj 461 0 obj <> ] >> endobj 453 0 obj <> /K[454 0 R 7 8 455 0 R 10 456 0 R 12 13 457 0 R 15 458 0 R 459 0 R 18 460 0 R 20 461 0 R 22 23 ] >> endobj 452 0 obj <> endobj 450 0 obj <> endobj 463 0 obj <> endobj 466 0 obj <> endobj 467 0 obj <> ] >> endobj 468 0 obj <> ] >> endobj 465 0 obj <> /K[466 0 R 26 27 28 29 30 31 467 0 R 33 468 0 R 35 ] >> endobj 464 0 obj <> endobj 462 0 obj <> endobj 398 0 obj <> /K[399 0 R 404 0 R 411 0 R 421 0 R 433 0 R 441 0 R 450 0 R 462 0 R ] >> endobj 470 0 obj <> /K[36 ] >> endobj 469 0 obj <> /K[470 0 R ] >> endobj 473 0 obj <> endobj 476 0 obj <> endobj 475 0 obj <> /K[476 0 R 39 ] >> endobj 474 0 obj <> endobj 472 0 obj <> endobj 478 0 obj <> endobj 481 0 obj <> endobj 482 0 obj <> ] >> endobj 480 0 obj <> /K[481 0 R 42 482 0 R 44 ] >> endobj 479 0 obj <> endobj 477 0 obj <> endobj 484 0 obj <> endobj 487 0 obj <> endobj 488 0 obj <> ] >> endobj 489 0 obj <> ] >> endobj 490 0 obj <> ] >> endobj 486 0 obj <> /K[487 0 R 47 48 49 488 0 R 489 0 R 52 490 0 R 54 55 ] >> endobj 485 0 obj <> endobj 483 0 obj <> endobj 492 0 obj <> endobj 495 0 obj <> endobj 496 0 obj <> ] >> endobj 494 0 obj <> /K[495 0 R 58 59 60 61 496 0 R 63 ] >> endobj 493 0 obj <> endobj 491 0 obj <> endobj 498 0 obj <> endobj 501 0 obj <> endobj 500 0 obj <> /K[501 0 R 66 ] >> endobj 499 0 obj <> endobj 497 0 obj <> endobj 503 0 obj <> endobj 506 0 obj <> endobj 507 0 obj <> ] >> endobj 508 0 obj <> ] >> endobj 509 0 obj <> ] >> endobj 505 0 obj <> /K[506 0 R 69 70 71 72 507 0 R 74 508 0 R 509 0 R 77 ] >> endobj 504 0 obj <> endobj 502 0 obj <> endobj 511 0 obj <> endobj 514 0 obj <> endobj 515 0 obj <> ] >> endobj 516 0 obj <> ] >> endobj 517 0 obj <> endobj 518 0 obj <> ] >> endobj 513 0 obj <> /K[514 0 R 80 81 515 0 R 516 0 R 84 517 0 R 86 518 0 R 88 ] >> endobj 512 0 obj <> endobj 510 0 obj <> endobj 523 0 obj <> endobj 526 0 obj <> endobj 525 0 obj <> /K[526 0 R 2 3 ] >> endobj 524 0 obj <> endobj 522 0 obj <> endobj 528 0 obj <> endobj 531 0 obj <> endobj 530 0 obj <> /K[531 0 R 6 7 8 ] >> endobj 529 0 obj <> endobj 527 0 obj <> endobj 533 0 obj <> endobj 536 0 obj <> endobj 537 0 obj <> ] >> endobj 535 0 obj <> /K[536 0 R 11 12 537 0 R 14 ] >> endobj 534 0 obj <> endobj 532 0 obj <> endobj 471 0 obj <> /K[472 0 R 477 0 R 483 0 R 491 0 R 497 0 R 502 0 R 510 0 R 522 0 R 527 0 R 532 0 R ] >> endobj 539 0 obj <> /K[15 ] >> endobj 538 0 obj <> /K[539 0 R ] >> endobj 541 0 obj <> ] >> endobj 540 0 obj <> /K[16 541 0 R 18 19 ] >> endobj 544 0 obj <> endobj 547 0 obj <> endobj 548 0 obj <> ] >> endobj 549 0 obj <> ] >> endobj 546 0 obj <> /K[547 0 R 22 548 0 R 24 25 26 27 28 29 549 0 R 31 ] >> endobj 545 0 obj <> endobj 543 0 obj <> endobj 551 0 obj <> endobj 554 0 obj <> endobj 555 0 obj <> endobj 553 0 obj <> /K[554 0 R 34 555 0 R 36 ] >> endobj 552 0 obj <> endobj 550 0 obj <> endobj 557 0 obj <> endobj 560 0 obj <> endobj 561 0 obj <> endobj 562 0 obj <> endobj 563 0 obj <> ] >> endobj 564 0 obj <> ] >> endobj 559 0 obj <> /K[560 0 R 39 40 41 42 43 44 45 561 0 R 47 562 0 R 49 563 0 R 564 0 R 52 ] >> endobj 558 0 obj <> endobj 556 0 obj <> endobj 566 0 obj <> endobj 569 0 obj <> endobj 570 0 obj <> endobj 568 0 obj <> /K[569 0 R 55 56 57 570 0 R 59 60 61 ] >> endobj 567 0 obj <> endobj 565 0 obj <> endobj 572 0 obj <> endobj 575 0 obj <> endobj 576 0 obj <> endobj 574 0 obj <> /K[575 0 R 64 65 66 576 0 R 68 ] >> endobj 573 0 obj <> endobj 571 0 obj <> endobj 578 0 obj <> endobj 581 0 obj <> endobj 582 0 obj <> endobj 586 0 obj <> ] >> endobj 587 0 obj <> ] >> endobj 588 0 obj <> endobj 580 0 obj <> /K[581 0 R 71 582 0 R 73 <> <> 586 0 R 587 0 R <> 588 0 R <> <> ] >> endobj 579 0 obj <> endobj 577 0 obj <> endobj 590 0 obj <> endobj 593 0 obj <> endobj 594 0 obj <> ] >> endobj 595 0 obj <> ] >> endobj 592 0 obj <> /K[593 0 R 10 594 0 R 12 595 0 R 14 ] >> endobj 591 0 obj <> endobj 589 0 obj <> endobj 597 0 obj <> endobj 600 0 obj <> endobj 599 0 obj <> /K[600 0 R 17 ] >> endobj 598 0 obj <> endobj 596 0 obj <> endobj 602 0 obj <> endobj 605 0 obj <> endobj 606 0 obj <> endobj 607 0 obj <> endobj 604 0 obj <> /K[605 0 R 20 21 22 606 0 R 24 607 0 R 26 ] >> endobj 603 0 obj <> endobj 601 0 obj <> endobj 609 0 obj <> endobj 612 0 obj <> endobj 613 0 obj <> endobj 614 0 obj <> endobj 615 0 obj <> endobj 616 0 obj <> endobj 617 0 obj <> endobj 618 0 obj <> endobj 619 0 obj <> ] >> endobj 611 0 obj <> /K[612 0 R 29 30 31 613 0 R 33 614 0 R 35 615 0 R 37 38 39 616 0 R 41 617 0 R 43 618 0 R 45 619 0 R 47 48 ] >> endobj 610 0 obj <> endobj 608 0 obj <> endobj 621 0 obj <> endobj 624 0 obj <> endobj 623 0 obj <> /K[624 0 R 51 52 53 54 ] >> endobj 622 0 obj <> endobj 620 0 obj <> endobj 626 0 obj <> endobj 629 0 obj <> endobj 628 0 obj <> /K[629 0 R 57 58 59 ] >> endobj 627 0 obj <> endobj 625 0 obj <> endobj 631 0 obj <> endobj 634 0 obj <> endobj 635 0 obj <> ] >> endobj 636 0 obj <> ] >> endobj 633 0 obj <> /K[634 0 R 62 63 64 635 0 R 66 67 636 0 R 69 ] >> endobj 632 0 obj <> endobj 630 0 obj <> endobj 638 0 obj <> endobj 641 0 obj <> endobj 640 0 obj <> /K[641 0 R 72 ] >> endobj 639 0 obj <> endobj 637 0 obj <> endobj 643 0 obj <> endobj 646 0 obj <> endobj 647 0 obj <> endobj 648 0 obj <> endobj 645 0 obj <> /K[646 0 R 75 76 77 647 0 R 79 648 0 R 81 82 ] >> endobj 644 0 obj <> endobj 642 0 obj <> endobj 542 0 obj <> /K[543 0 R 550 0 R 556 0 R 565 0 R 571 0 R 577 0 R 589 0 R 596 0 R 601 0 R 608 0 R 620 0 R 625 0 R 630 0 R 637 0 R 642 0 R ] >> endobj 649 0 obj <> /K[83 ] >> endobj 650 0 obj <> /K[84 ] >> endobj 651 0 obj <> /K[85 <> ] >> endobj 657 0 obj <> endobj 660 0 obj <> ] >> endobj 659 0 obj <> /K[660 0 R 3 ] >> endobj 658 0 obj <> endobj 656 0 obj <> endobj 662 0 obj <> endobj 665 0 obj <> ] >> endobj 664 0 obj <> /K[665 0 R 6 ] >> endobj 663 0 obj <> endobj 661 0 obj <> endobj 667 0 obj <> endobj 670 0 obj <> ] >> endobj 669 0 obj <> /K[670 0 R 9 ] >> endobj 668 0 obj <> endobj 666 0 obj <> endobj 672 0 obj <> endobj 675 0 obj <> ] >> endobj 674 0 obj <> /K[675 0 R 12 ] >> endobj 673 0 obj <> endobj 671 0 obj <> endobj 677 0 obj <> endobj 680 0 obj <> ] >> endobj 679 0 obj <> /K[680 0 R 15 ] >> endobj 678 0 obj <> endobj 676 0 obj <> endobj 682 0 obj <> endobj 685 0 obj <> ] >> endobj 684 0 obj <> /K[685 0 R 18 ] >> endobj 683 0 obj <> endobj 681 0 obj <> endobj 655 0 obj <> /K[656 0 R 661 0 R 666 0 R 671 0 R 676 0 R 681 0 R ] >> endobj 686 0 obj <> /K[19 ] >> endobj 689 0 obj <> endobj 692 0 obj <> ] >> endobj 691 0 obj <> /K[692 0 R 22 ] >> endobj 690 0 obj <> endobj 688 0 obj <> endobj 694 0 obj <> endobj 697 0 obj <> ] >> endobj 696 0 obj <> /K[697 0 R 25 ] >> endobj 695 0 obj <> endobj 693 0 obj <> endobj 687 0 obj <> /K[688 0 R 693 0 R ] >> endobj 698 0 obj <> /K[26 ] >> endobj 701 0 obj <> endobj 704 0 obj <> ] >> endobj 703 0 obj <> /K[704 0 R 29 ] >> endobj 702 0 obj <> endobj 700 0 obj <> endobj 706 0 obj <> endobj 709 0 obj <> ] >> endobj 708 0 obj <> /K[709 0 R 32 ] >> endobj 707 0 obj <> endobj 705 0 obj <> endobj 711 0 obj <> endobj 714 0 obj <> ] >> endobj 713 0 obj <> /K[714 0 R 35 ] >> endobj 712 0 obj <> endobj 710 0 obj <> endobj 716 0 obj <> endobj 719 0 obj <> ] >> endobj 718 0 obj <> /K[719 0 R 38 ] >> endobj 717 0 obj <> endobj 715 0 obj <> endobj 721 0 obj <> endobj 724 0 obj <> ] >> endobj 723 0 obj <> /K[724 0 R 41 ] >> endobj 722 0 obj <> endobj 720 0 obj <> endobj 726 0 obj <> endobj 729 0 obj <> ] >> endobj 728 0 obj <> /K[729 0 R 44 ] >> endobj 727 0 obj <> endobj 725 0 obj <> endobj 731 0 obj <> endobj 734 0 obj <> ] >> endobj 733 0 obj <> /K[734 0 R 47 ] >> endobj 732 0 obj <> endobj 730 0 obj <> endobj 699 0 obj <> /K[700 0 R 705 0 R 710 0 R 715 0 R 720 0 R 725 0 R 730 0 R ] >> endobj 735 0 obj <> /K[48 ] >> endobj 736 0 obj <> /K[49 ] >> endobj 738 0 obj <> /K[50 ] >> endobj 737 0 obj <> /K[738 0 R ] >> endobj 739 0 obj <> /K[51 ] >> endobj 742 0 obj <> endobj 745 0 obj <> ] >> endobj 746 0 obj <> endobj 744 0 obj <> /K[53 745 0 R 55 56 746 0 R 58 ] >> endobj 743 0 obj <> endobj 741 0 obj <> endobj 748 0 obj <> endobj 750 0 obj <> /K[60 61 ] >> endobj 749 0 obj <> endobj 747 0 obj <> endobj 752 0 obj <> endobj 755 0 obj <> ] >> endobj 756 0 obj <> ] >> endobj 757 0 obj <> endobj 758 0 obj <> endobj 759 0 obj <> ] >> endobj 760 0 obj <> endobj 761 0 obj <> endobj 754 0 obj <> /K[63 755 0 R 65 756 0 R 67 757 0 R 69 758 0 R 71 72 759 0 R 74 760 0 R 76 77 761 0 R 79 ] >> endobj 753 0 obj <> endobj 751 0 obj <> endobj 763 0 obj <> endobj 766 0 obj <> endobj 765 0 obj <> /K[81 766 0 R 83 84 ] >> endobj 764 0 obj <> endobj 762 0 obj <> endobj 768 0 obj <> endobj 771 0 obj <> endobj 772 0 obj <> endobj 770 0 obj <> /K[86 771 0 R 88 89 772 0 R 91 ] >> endobj 769 0 obj <> endobj 767 0 obj <> endobj 774 0 obj <> endobj 777 0 obj <> endobj 778 0 obj <> endobj 779 0 obj <> endobj 780 0 obj <> endobj 776 0 obj <> /K[93 777 0 R 95 778 0 R 97 779 0 R 99 100 780 0 R 102 ] >> endobj 775 0 obj <> endobj 773 0 obj <> endobj 740 0 obj <> /K[741 0 R 747 0 R 751 0 R 762 0 R 767 0 R 773 0 R ] >> endobj 785 0 obj <> /K[0 ] >> endobj 784 0 obj <> /K[785 0 R ] >> endobj 786 0 obj <> /K[1 ] >> endobj 789 0 obj <> endobj 792 0 obj <> endobj 793 0 obj <> ] >> endobj 794 0 obj <> ] >> endobj 795 0 obj <> ] >> endobj 791 0 obj <> /K[792 0 R 4 793 0 R 6 7 794 0 R 795 0 R 10 ] >> endobj 790 0 obj <> endobj 788 0 obj <> endobj 797 0 obj <> endobj 800 0 obj <> endobj 801 0 obj <> ] >> endobj 799 0 obj <> /K[800 0 R 13 801 0 R 15 16 ] >> endobj 798 0 obj <> endobj 796 0 obj <> endobj 803 0 obj <> endobj 806 0 obj <> endobj 807 0 obj <> endobj 808 0 obj <> ] >> endobj 805 0 obj <> /K[806 0 R 19 807 0 R 21 808 0 R 23 ] >> endobj 804 0 obj <> endobj 802 0 obj <> endobj 810 0 obj <> endobj 813 0 obj <> endobj 814 0 obj <> endobj 815 0 obj <> ] >> endobj 816 0 obj <> endobj 812 0 obj <> /K[25 813 0 R 27 814 0 R 29 815 0 R 31 816 0 R 33 34 ] >> endobj 811 0 obj <> endobj 809 0 obj <> endobj 818 0 obj <> endobj 821 0 obj <> endobj 820 0 obj <> /K[36 37 821 0 R 39 ] >> endobj 819 0 obj <> endobj 817 0 obj <> endobj 787 0 obj <> /K[788 0 R 796 0 R 802 0 R 809 0 R 817 0 R ] >> endobj 822 0 obj <> /K[40 ] >> endobj 823 0 obj <> /K[41 ] >> endobj 825 0 obj <> endobj 826 0 obj <> endobj 827 0 obj <> endobj 828 0 obj <> ] >> endobj 829 0 obj <> ] >> endobj 824 0 obj <> /K[42 825 0 R 44 826 0 R 46 827 0 R 48 49 828 0 R 51 52 829 0 R 54 ] >> endobj 831 0 obj <> ] >> endobj 830 0 obj <> /K[55 831 0 R 57 58 ] >> endobj 832 0 obj <> /K[59 ] >> endobj 834 0 obj <> endobj 835 0 obj <> endobj 836 0 obj <> endobj 833 0 obj <> /K[834 0 R 835 0 R 62 836 0 R ] >> endobj 837 0 obj <> /K[64 ] >> endobj 838 0 obj <> /K[65 ] >> endobj 839 0 obj <> /K[66 ] >> endobj 840 0 obj <> /K[67 ] >> endobj 843 0 obj <> endobj 846 0 obj <> endobj 845 0 obj <> /K[69 846 0 R ] >> endobj 844 0 obj <> endobj 842 0 obj <> endobj 848 0 obj <> endobj 851 0 obj <> endobj 850 0 obj <> /K[72 851 0 R ] >> endobj 849 0 obj <> endobj 847 0 obj <> endobj 853 0 obj <> endobj 859 0 obj <> endobj 860 0 obj <> endobj 861 0 obj <> endobj 855 0 obj <> /K[75 859 0 R 860 0 R 861 0 R ] >> endobj 854 0 obj <> endobj 852 0 obj <> endobj 841 0 obj <> /K[842 0 R 847 0 R 852 0 R ] >> endobj 862 0 obj <> /K[3 ] >> endobj 864 0 obj <> endobj 863 0 obj <> /K[4 864 0 R 6 ] >> endobj 866 0 obj <> endobj 867 0 obj <> endobj 868 0 obj <> endobj 869 0 obj <> endobj 865 0 obj <> /K[866 0 R 8 867 0 R 10 11 868 0 R 13 869 0 R 15 16 ] >> endobj 871 0 obj <> endobj 872 0 obj <> endobj 870 0 obj <> /K[871 0 R 18 872 0 R 20 21 22 23 ] >> endobj 873 0 obj <> /K[24 ] >> endobj 874 0 obj <> /K[25 ] >> endobj 875 0 obj <> /K[26 ] >> endobj 877 0 obj <> endobj 876 0 obj <> /K[877 0 R ] >> endobj 879 0 obj <> endobj 880 0 obj <> endobj 881 0 obj <> ] >> endobj 882 0 obj <> endobj 878 0 obj <> /K[28 879 0 R 30 31 880 0 R 33 881 0 R 35 36 882 0 R 38 39 ] >> endobj 883 0 obj <> /K[40 ] >> endobj 885 0 obj <> endobj 884 0 obj <> /K[885 0 R ] >> endobj 886 0 obj <> /K[42 ] >> endobj 888 0 obj <> endobj 887 0 obj <> /K[888 0 R ] >> endobj 889 0 obj <> /K[44 ] >> endobj 890 0 obj <> /K[45 ] >> endobj 892 0 obj <> endobj 891 0 obj <> /K[46 47 892 0 R 49 ] >> endobj 893 0 obj <> /K[50 ] >> endobj 895 0 obj <> endobj 894 0 obj <> /K[895 0 R ] >> endobj 900 0 obj <> endobj 899 0 obj <> /K[900 0 R ] >> endobj 901 0 obj <> /K[1 ] >> endobj 902 0 obj <> /K[2 ] >> endobj 903 0 obj <> /K[3 ] >> endobj 904 0 obj <> /K[4 ] >> endobj 906 0 obj <> endobj 905 0 obj <> /K[906 0 R ] >> endobj 907 0 obj <> /K[6 ] >> endobj 908 0 obj <> /K[7 ] >> endobj 909 0 obj <> /K[8 ] >> endobj 910 0 obj <> /K[9 10 ] >> endobj 913 0 obj <> endobj 916 0 obj <> ] >> endobj 915 0 obj <> /K[12 916 0 R ] >> endobj 914 0 obj <> endobj 912 0 obj <> endobj 918 0 obj <> endobj 921 0 obj <> ] >> endobj 920 0 obj <> /K[15 921 0 R ] >> endobj 919 0 obj <> endobj 917 0 obj <> endobj 923 0 obj <> endobj 925 0 obj <> /K[18 ] >> endobj 924 0 obj <> endobj 922 0 obj <> endobj 927 0 obj <> endobj 930 0 obj <> endobj 931 0 obj <> endobj 932 0 obj <> endobj 933 0 obj <> endobj 934 0 obj <> endobj 935 0 obj <> endobj 929 0 obj <> /K[930 0 R 21 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R ] >> endobj 928 0 obj <> endobj 926 0 obj <> endobj 937 0 obj <> endobj 940 0 obj <> endobj 941 0 obj <> endobj 942 0 obj <> endobj 943 0 obj <> endobj 944 0 obj <> endobj 945 0 obj <> endobj 939 0 obj <> /K[940 0 R 30 941 0 R 32 942 0 R 943 0 R 944 0 R 945 0 R ] >> endobj 938 0 obj <> endobj 936 0 obj <> endobj 950 0 obj <> endobj 953 0 obj <> endobj 954 0 obj <> endobj 955 0 obj <> endobj 956 0 obj <> endobj 957 0 obj <> endobj 952 0 obj <> /K[953 0 R 2 954 0 R 955 0 R 956 0 R 6 957 0 R 8 ] >> endobj 951 0 obj <> endobj 949 0 obj <> endobj 911 0 obj <> /K[912 0 R 917 0 R 922 0 R 926 0 R 936 0 R 949 0 R ] >> endobj 959 0 obj <> endobj 960 0 obj <> endobj 961 0 obj <> endobj 962 0 obj <> endobj 963 0 obj <> endobj 958 0 obj <> /K[959 0 R 10 11 960 0 R 13 14 961 0 R 16 962 0 R 18 19 963 0 R 21 ] >> endobj 965 0 obj <> ] >> endobj 964 0 obj <> /K[22 965 0 R 24 ] >> endobj 966 0 obj <> /K[25 ] >> endobj 967 0 obj <> /K[26 ] >> endobj 968 0 obj <> /K[27 ] >> endobj 969 0 obj <> /K[28 ] >> endobj 972 0 obj <> endobj 975 0 obj <> endobj 976 0 obj <> endobj 974 0 obj <> /K[975 0 R 31 32 976 0 R 34 35 ] >> endobj 973 0 obj <> endobj 971 0 obj <> endobj 978 0 obj <> endobj 981 0 obj <> endobj 982 0 obj <> ] >> endobj 983 0 obj <> ] >> endobj 984 0 obj <> endobj 985 0 obj <> ] >> endobj 980 0 obj <> /K[981 0 R 38 982 0 R 40 41 983 0 R 43 44 45 984 0 R 47 48 985 0 R 50 ] >> endobj 979 0 obj <> endobj 977 0 obj <> endobj 987 0 obj <> endobj 990 0 obj <> endobj 989 0 obj <> /K[990 0 R 53 54 ] >> endobj 988 0 obj <> endobj 986 0 obj <> endobj 992 0 obj <> endobj 995 0 obj <> endobj 994 0 obj <> /K[995 0 R 57 ] >> endobj 993 0 obj <> endobj 991 0 obj <> endobj 997 0 obj <> endobj 1000 0 obj <> endobj 999 0 obj <> /K[1000 0 R 60 61 62 63 ] >> endobj 998 0 obj <> endobj 996 0 obj <> endobj 970 0 obj <> /K[971 0 R 977 0 R 986 0 R 991 0 R 996 0 R ] >> endobj 1004 0 obj <> /K[0 ] >> endobj 1007 0 obj <> endobj 1010 0 obj <> endobj 1011 0 obj <> ] >> endobj 1009 0 obj <> /K[1010 0 R 3 4 5 1011 0 R 7 8 ] >> endobj 1008 0 obj <> endobj 1006 0 obj <> endobj 1013 0 obj <> endobj 1016 0 obj <> endobj 1015 0 obj <> /K[1016 0 R 11 ] >> endobj 1014 0 obj <> endobj 1012 0 obj <> endobj 1018 0 obj <> endobj 1021 0 obj <> endobj 1022 0 obj <> endobj 1023 0 obj <> ] >> endobj 1020 0 obj <> /K[1021 0 R 14 15 1022 0 R 17 1023 0 R 19 ] >> endobj 1019 0 obj <> endobj 1017 0 obj <> endobj 1025 0 obj <> endobj 1028 0 obj <> endobj 1029 0 obj <> endobj 1030 0 obj <> endobj 1031 0 obj <> endobj 1032 0 obj <> endobj 1027 0 obj <> /K[1028 0 R 22 1029 0 R 24 1030 0 R 26 1031 0 R 28 1032 0 R 30 ] >> endobj 1026 0 obj <> endobj 1024 0 obj <> endobj 1034 0 obj <> endobj 1037 0 obj <> endobj 1038 0 obj <> ] >> endobj 1039 0 obj <> ] >> endobj 1040 0 obj <> ] >> endobj 1036 0 obj <> /K[1037 0 R 33 34 1038 0 R 36 37 1039 0 R 1040 0 R 40 ] >> endobj 1035 0 obj <> endobj 1033 0 obj <> endobj 1042 0 obj <> endobj 1045 0 obj <> endobj 1044 0 obj <> /K[1045 0 R 43 44 45 46 ] >> endobj 1043 0 obj <> endobj 1041 0 obj <> endobj 1047 0 obj <> endobj 1050 0 obj <> endobj 1049 0 obj <> /K[1050 0 R 49 50 ] >> endobj 1048 0 obj <> endobj 1046 0 obj <> endobj 1052 0 obj <> endobj 1055 0 obj <> endobj 1054 0 obj <> /K[1055 0 R 53 54 55 ] >> endobj 1053 0 obj <> endobj 1051 0 obj <> endobj 1057 0 obj <> endobj 1060 0 obj <> endobj 1061 0 obj <> ] >> endobj 1059 0 obj <> /K[1060 0 R 58 59 1061 0 R 61 ] >> endobj 1058 0 obj <> endobj 1056 0 obj <> endobj 1063 0 obj <> endobj 1066 0 obj <> endobj 1067 0 obj <> ] >> endobj 1068 0 obj <> endobj 1069 0 obj <> endobj 1070 0 obj <> endobj 1071 0 obj <> ] >> endobj 1072 0 obj <> ] >> endobj 1065 0 obj <> /K[1066 0 R 64 65 66 67 1067 0 R 69 70 71 1068 0 R 74 75 1069 0 R 77 1070 0 R 79 1071 0 R 1072 0 R 82 ] >> endobj 1064 0 obj <> endobj 1062 0 obj <> endobj 1074 0 obj <> endobj 1077 0 obj <> endobj 1081 0 obj <> endobj 1082 0 obj <> endobj 1083 0 obj <> endobj 1084 0 obj <> endobj 1085 0 obj <> ] >> endobj 1076 0 obj <> /K[1077 0 R 85 <> <> <> 1081 0 R <> 1082 0 R <> <> <> 1083 0 R <> <> 1084 0 R <> <> <> <> 1085 0 R <> ] >> endobj 1075 0 obj <> endobj 1073 0 obj <> endobj 1005 0 obj <> /K[1006 0 R 1012 0 R 1017 0 R 1024 0 R 1033 0 R 1041 0 R 1046 0 R 1051 0 R 1056 0 R 1062 0 R 1073 0 R ] >> endobj 1086 0 obj <> /K[19 ] >> endobj 1089 0 obj <> endobj 1092 0 obj <> endobj 1093 0 obj <> endobj 1094 0 obj <> endobj 1095 0 obj <> endobj 1096 0 obj <> ] >> endobj 1097 0 obj <> ] >> endobj 1091 0 obj <> /K[1092 0 R 22 23 1093 0 R 25 26 1094 0 R 28 29 1095 0 R 31 32 33 34 1096 0 R 1097 0 R 37 ] >> endobj 1090 0 obj <> endobj 1088 0 obj <> endobj 1099 0 obj <> endobj 1102 0 obj <> endobj 1103 0 obj <> endobj 1104 0 obj <> endobj 1105 0 obj <> endobj 1106 0 obj <> ] >> endobj 1107 0 obj <> ] >> endobj 1108 0 obj <> ] >> endobj 1109 0 obj <> ] >> endobj 1110 0 obj <> ] >> endobj 1101 0 obj <> /K[1102 0 R 40 41 1103 0 R 44 45 1104 0 R 47 1105 0 R 49 50 1106 0 R 52 53 1107 0 R 55 1108 0 R 57 58 1109 0 R 60 1110 0 R 62 ] >> endobj 1100 0 obj <> endobj 1098 0 obj <> endobj 1112 0 obj <> endobj 1115 0 obj <> endobj 1116 0 obj <> endobj 1117 0 obj <> endobj 1118 0 obj <> endobj 1119 0 obj <> endobj 1114 0 obj <> /K[1115 0 R 65 1116 0 R 67 68 69 70 1117 0 R 72 73 1118 0 R 75 76 77 1119 0 R 79 80 81 82 83 ] >> endobj 1113 0 obj <> endobj 1111 0 obj <> endobj 1121 0 obj <> endobj 1124 0 obj <> endobj 1123 0 obj <> /K[1124 0 R 86 87 ] >> endobj 1122 0 obj <> endobj 1120 0 obj <> endobj 1126 0 obj <> endobj 1129 0 obj <> endobj 1133 0 obj <> endobj 1134 0 obj <> endobj 1135 0 obj <> ] >> endobj 1136 0 obj <> ] >> endobj 1128 0 obj <> /K[1129 0 R 90 91 <> <> <> <> <> 1133 0 R <> 1134 0 R <> <> <> 1135 0 R 1136 0 R <> ] >> endobj 1127 0 obj <> endobj 1125 0 obj <> endobj 1087 0 obj <> /K[1088 0 R 1098 0 R 1111 0 R 1120 0 R 1125 0 R ] >> endobj 1137 0 obj <> /K[14 ] >> endobj 1140 0 obj <> endobj 1143 0 obj <> endobj 1144 0 obj <> endobj 1145 0 obj <> endobj 1142 0 obj <> /K[1143 0 R 17 1144 0 R 19 20 1145 0 R 22 23 24 ] >> endobj 1141 0 obj <> endobj 1139 0 obj <> endobj 1147 0 obj <> endobj 1150 0 obj <> endobj 1151 0 obj <> endobj 1149 0 obj <> /K[1150 0 R 27 28 1151 0 R 30 ] >> endobj 1148 0 obj <> endobj 1146 0 obj <> endobj 1153 0 obj <> endobj 1156 0 obj <> endobj 1157 0 obj <> endobj 1158 0 obj <> endobj 1159 0 obj <> endobj 1160 0 obj <> endobj 1161 0 obj <> ] >> endobj 1162 0 obj <> ] >> endobj 1163 0 obj <> ] >> endobj 1155 0 obj <> /K[1156 0 R 33 34 1157 0 R 36 37 1158 0 R 39 1159 0 R 41 42 43 44 45 46 47 48 49 1160 0 R 51 1161 0 R 1162 0 R 54 1163 0 R 56 ] >> endobj 1154 0 obj <> endobj 1152 0 obj <> endobj 1165 0 obj <> endobj 1168 0 obj <> endobj 1169 0 obj <> ] >> endobj 1170 0 obj <> ] >> endobj 1167 0 obj <> /K[1168 0 R 59 60 1169 0 R 1170 0 R 63 ] >> endobj 1166 0 obj <> endobj 1164 0 obj <> endobj 1172 0 obj <> endobj 1175 0 obj <> endobj 1176 0 obj <> ] >> endobj 1177 0 obj <> ] >> endobj 1174 0 obj <> /K[1175 0 R 66 67 68 1176 0 R 1177 0 R 71 ] >> endobj 1173 0 obj <> endobj 1171 0 obj <> endobj 1179 0 obj <> endobj 1182 0 obj <> endobj 1183 0 obj <> ] >> endobj 1184 0 obj <> endobj 1185 0 obj <> endobj 1186 0 obj <> ] >> endobj 1181 0 obj <> /K[1182 0 R 74 1183 0 R 76 77 1184 0 R 80 1185 0 R 82 1186 0 R 84 ] >> endobj 1180 0 obj <> endobj 1178 0 obj <> endobj 1138 0 obj <> /K[1139 0 R 1146 0 R 1152 0 R 1164 0 R 1171 0 R 1178 0 R ] >> endobj 1190 0 obj <> /K[0 ] >> endobj 1193 0 obj <> endobj 1196 0 obj <> endobj 1197 0 obj <> endobj 1198 0 obj <> endobj 1199 0 obj <> endobj 1200 0 obj <> ] >> endobj 1201 0 obj <> ] >> endobj 1195 0 obj <> /K[1196 0 R 3 4 5 1197 0 R 7 8 1198 0 R 10 11 1199 0 R 13 14 1200 0 R 1201 0 R 17 ] >> endobj 1194 0 obj <> endobj 1192 0 obj <> endobj 1203 0 obj <> endobj 1206 0 obj <> endobj 1207 0 obj <> endobj 1208 0 obj <> endobj 1209 0 obj <> endobj 1205 0 obj <> /K[1206 0 R 20 1207 0 R 22 23 24 1208 0 R 26 27 28 29 30 1209 0 R 32 33 34 ] >> endobj 1204 0 obj <> endobj 1202 0 obj <> endobj 1211 0 obj <> endobj 1214 0 obj <> endobj 1215 0 obj <> endobj 1213 0 obj <> /K[1214 0 R 37 1215 0 R 39 40 41 42 43 ] >> endobj 1212 0 obj <> endobj 1210 0 obj <> endobj 1217 0 obj <> endobj 1220 0 obj <> endobj 1221 0 obj <> endobj 1222 0 obj <> endobj 1219 0 obj <> /K[1220 0 R 46 47 1221 0 R 49 1222 0 R 51 ] >> endobj 1218 0 obj <> endobj 1216 0 obj <> endobj 1224 0 obj <> endobj 1227 0 obj <> endobj 1228 0 obj <> endobj 1226 0 obj <> /K[1227 0 R 54 1228 0 R 56 57 58 ] >> endobj 1225 0 obj <> endobj 1223 0 obj <> endobj 1230 0 obj <> endobj 1233 0 obj <> endobj 1232 0 obj <> /K[1233 0 R 61 62 63 64 65 ] >> endobj 1231 0 obj <> endobj 1229 0 obj <> endobj 1191 0 obj <> /K[1192 0 R 1202 0 R 1210 0 R 1216 0 R 1223 0 R 1229 0 R ] >> endobj 1234 0 obj <> /K[66 ] >> endobj 1237 0 obj <> endobj 1240 0 obj <> endobj 1239 0 obj <> /K[1240 0 R 69 ] >> endobj 1238 0 obj <> endobj 1236 0 obj <> endobj 1242 0 obj <> endobj 1245 0 obj <> endobj 1244 0 obj <> /K[1245 0 R 72 73 <> <> <> <> ] >> endobj 1243 0 obj <> endobj 1241 0 obj <> endobj 1235 0 obj <> /K[1236 0 R 1241 0 R ] >> endobj 1249 0 obj <> /K[4 ] >> endobj 1252 0 obj <> endobj 1255 0 obj <> endobj 1256 0 obj <> endobj 1257 0 obj <> endobj 1258 0 obj <> endobj 1254 0 obj <> /K[1255 0 R 7 8 9 1256 0 R 11 1257 0 R 14 1258 0 R 16 17 ] >> endobj 1253 0 obj <> endobj 1251 0 obj <> endobj 1260 0 obj <> endobj 1263 0 obj <> endobj 1262 0 obj <> /K[1263 0 R 20 21 22 ] >> endobj 1261 0 obj <> endobj 1259 0 obj <> endobj 1265 0 obj <> endobj 1268 0 obj <> endobj 1267 0 obj <> /K[1268 0 R 25 26 27 28 ] >> endobj 1266 0 obj <> endobj 1264 0 obj <> endobj 1270 0 obj <> endobj 1273 0 obj <> endobj 1274 0 obj <> endobj 1275 0 obj <> endobj 1276 0 obj <> endobj 1272 0 obj <> /K[1273 0 R 31 1274 0 R 34 1275 0 R 36 37 38 39 1276 0 R 41 ] >> endobj 1271 0 obj <> endobj 1269 0 obj <> endobj 1278 0 obj <> endobj 1281 0 obj <> endobj 1282 0 obj <> endobj 1280 0 obj <> /K[1281 0 R 44 45 46 1282 0 R 48 ] >> endobj 1279 0 obj <> endobj 1277 0 obj <> endobj 1250 0 obj <> /K[1251 0 R 1259 0 R 1264 0 R 1269 0 R 1277 0 R ] >> endobj 1283 0 obj <> /K[49 ] >> endobj 1286 0 obj <> endobj 1288 0 obj <> /K[51 52 53 54 55 56 57 ] >> endobj 1287 0 obj <> endobj 1285 0 obj <> endobj 1284 0 obj <> /K[1285 0 R ] >> endobj 1289 0 obj <> /K[58 ] >> endobj 1292 0 obj <> endobj 1295 0 obj <> endobj 1296 0 obj <> endobj 1300 0 obj <> endobj 1301 0 obj <> endobj 1302 0 obj <> endobj 1303 0 obj <> endobj 1304 0 obj <> endobj 1305 0 obj <> endobj 1294 0 obj <> /K[1295 0 R 61 1296 0 R 63 <> <> 1300 0 R <> 1301 0 R <> 1302 0 R <> <> <> 1303 0 R <> <> 1304 0 R <> <> <> <> <> 1305 0 R <> ] >> endobj 1293 0 obj <> endobj 1291 0 obj <> endobj 1290 0 obj <> /K[1291 0 R ] >> endobj 1307 0 obj <> endobj 1306 0 obj <> /K[1307 0 R ] >> endobj 1309 0 obj <> endobj 1308 0 obj <> /K[1309 0 R ] >> endobj 1311 0 obj <> endobj 1310 0 obj <> /K[1311 0 R ] >> endobj 1313 0 obj <> endobj 1312 0 obj <> /K[1313 0 R ] >> endobj 1315 0 obj <> endobj 1314 0 obj <> /K[1315 0 R ] >> endobj 1317 0 obj <> endobj 1316 0 obj <> /K[1317 0 R ] >> endobj 1319 0 obj <> endobj 1318 0 obj <> /K[1319 0 R ] >> endobj 1321 0 obj <> endobj 1320 0 obj <> /K[1321 0 R ] >> endobj 1323 0 obj <> endobj 1322 0 obj <> /K[1323 0 R ] >> endobj 1325 0 obj <> endobj 1324 0 obj <> /K[1325 0 R ] >> endobj 1327 0 obj <> endobj 1326 0 obj <> /K[1327 0 R ] >> endobj 1329 0 obj <> endobj 1328 0 obj <> /K[1329 0 R ] >> endobj 1331 0 obj <> endobj 1330 0 obj <> /K[1331 0 R ] >> endobj 1333 0 obj <> endobj 1332 0 obj <> /K[1333 0 R ] >> endobj 1335 0 obj <> endobj 1334 0 obj <> /K[1335 0 R ] >> endobj 1337 0 obj <> endobj 1336 0 obj <> /K[1337 0 R ] >> endobj 1339 0 obj <> endobj 1338 0 obj <> /K[1339 0 R ] >> endobj 1340 0 obj <> /K[38 ] >> endobj 1341 0 obj <> /K[39 ] >> endobj 1342 0 obj <> /K[40 ] >> endobj 1345 0 obj <> endobj 1348 0 obj <> endobj 1349 0 obj <> ] >> endobj 1350 0 obj <> endobj 1351 0 obj <> endobj 1352 0 obj <> endobj 1353 0 obj <> endobj 1354 0 obj <> endobj 1355 0 obj <> endobj 1356 0 obj <> endobj 1357 0 obj <> endobj 1358 0 obj <> endobj 1359 0 obj <> endobj 1360 0 obj <> endobj 1361 0 obj <> endobj 1347 0 obj <> /K[1348 0 R 43 1349 0 R 45 46 47 48 1350 0 R 50 1351 0 R 52 1352 0 R 54 55 1353 0 R 57 1354 0 R 59 1355 0 R 61 1356 0 R 63 1357 0 R 65 66 1358 0 R 68 69 1359 0 R 71 72 1360 0 R 74 75 76 77 1361 0 R 79 ] >> endobj 1346 0 obj <> endobj 1344 0 obj <> endobj 1363 0 obj <> endobj 1366 0 obj <> endobj 1367 0 obj <> endobj 1371 0 obj <> endobj 1372 0 obj <> endobj 1373 0 obj <> endobj 1374 0 obj <> endobj 1375 0 obj <> ] >> endobj 1365 0 obj <> /K[1366 0 R 82 1367 0 R 85 86 <> 1371 0 R <> 1372 0 R <> 1373 0 R <> <> 1374 0 R <> <> 1375 0 R <> ] >> endobj 1364 0 obj <> endobj 1362 0 obj <> endobj 1377 0 obj <> endobj 1380 0 obj <> endobj 1381 0 obj <> endobj 1382 0 obj <> endobj 1383 0 obj <> endobj 1384 0 obj <> /K[34 ] >> endobj 1385 0 obj <> endobj 1379 0 obj <> /K[1380 0 R 15 16 17 1381 0 R 20 21 22 23 24 1382 0 R 26 1383 0 R 28 29 30 31 32 33 1384 0 R 35 1385 0 R 37 ] >> endobj 1378 0 obj <> endobj 1376 0 obj <> endobj 1343 0 obj <> /K[1344 0 R 1362 0 R 1376 0 R ] >> endobj 1386 0 obj <> /K[38 ] >> endobj 1388 0 obj <> endobj 1389 0 obj <> endobj 1390 0 obj <> endobj 1391 0 obj <> endobj 1392 0 obj <> endobj 1393 0 obj <> endobj 1387 0 obj <> /K[39 40 41 42 1388 0 R 45 46 1389 0 R 48 1390 0 R 50 51 1391 0 R 53 1392 0 R 55 1393 0 R 57 ] >> endobj 1395 0 obj <> endobj 1394 0 obj <> /K[58 1395 0 R 60 ] >> endobj 1397 0 obj <> endobj 1396 0 obj <> /K[1397 0 R ] >> endobj 1399 0 obj <> endobj 1398 0 obj <> /K[1399 0 R ] >> endobj 1401 0 obj <> endobj 1400 0 obj <> /K[1401 0 R ] >> endobj 1403 0 obj <> endobj 1402 0 obj <> /K[1403 0 R ] >> endobj 1405 0 obj <> endobj 1404 0 obj <> /K[1405 0 R ] >> endobj 1407 0 obj <> endobj 1406 0 obj <> /K[1407 0 R ] >> endobj 1409 0 obj <> endobj 1408 0 obj <> /K[1409 0 R ] >> endobj 1411 0 obj <> endobj 1410 0 obj <> /K[1411 0 R ] >> endobj 1413 0 obj <> endobj 1412 0 obj <> /K[1413 0 R ] >> endobj 1415 0 obj <> endobj 1414 0 obj <> /K[1415 0 R ] >> endobj 1420 0 obj <> endobj 1421 0 obj <> endobj 1422 0 obj <> endobj 1423 0 obj <> endobj 1424 0 obj <> endobj 1425 0 obj <> endobj 1419 0 obj <> /K[0 1420 0 R 2 1421 0 R 4 5 1422 0 R 7 8 1423 0 R 10 11 12 1424 0 R 14 1425 0 R 16 17 ] >> endobj 1426 0 obj <> /K[18 ] >> endobj 1429 0 obj <> endobj 1432 0 obj <> endobj 1433 0 obj <> endobj 1434 0 obj <> ] >> endobj 1431 0 obj <> /K[20 21 1432 0 R 23 24 1433 0 R 27 1434 0 R 29 30 31 ] >> endobj 1430 0 obj <> endobj 1428 0 obj <> endobj 1436 0 obj <> endobj 1439 0 obj <> endobj 1440 0 obj <> ] >> endobj 1438 0 obj <> /K[33 1439 0 R 35 1440 0 R 37 38 39 ] >> endobj 1437 0 obj <> endobj 1435 0 obj <> endobj 1427 0 obj <> /K[1428 0 R 1435 0 R ] >> endobj 1441 0 obj <> /K[40 ] >> endobj 1442 0 obj <> /K[41 ] >> endobj 1444 0 obj <> endobj 1443 0 obj <> /K[1444 0 R ] >> endobj 1446 0 obj <> endobj 1445 0 obj <> /K[1446 0 R ] >> endobj 1448 0 obj <> endobj 1447 0 obj <> /K[1448 0 R ] >> endobj 1450 0 obj <> endobj 1449 0 obj <> /K[1450 0 R ] >> endobj 1452 0 obj <> endobj 1451 0 obj <> /K[1452 0 R ] >> endobj 1454 0 obj <> endobj 1453 0 obj <> /K[1454 0 R ] >> endobj 1456 0 obj <> endobj 1455 0 obj <> /K[1456 0 R ] >> endobj 1458 0 obj <> endobj 1457 0 obj <> /K[1458 0 R ] >> endobj 1460 0 obj <> endobj 1459 0 obj <> /K[1460 0 R ] >> endobj 1462 0 obj <> endobj 1461 0 obj <> /K[1462 0 R ] >> endobj 1464 0 obj <> endobj 1463 0 obj <> /K[1464 0 R ] >> endobj 1466 0 obj <> endobj 1465 0 obj <> /K[1466 0 R ] >> endobj 1468 0 obj <> endobj 1467 0 obj <> /K[1468 0 R ] >> endobj 1470 0 obj <> endobj 1469 0 obj <> /K[1470 0 R ] >> endobj 1472 0 obj <> endobj 1471 0 obj <> /K[1472 0 R ] >> endobj 1474 0 obj <> endobj 1473 0 obj <> /K[1474 0 R ] >> endobj 1476 0 obj <> endobj 1475 0 obj <> /K[1476 0 R ] >> endobj 1478 0 obj <> endobj 1477 0 obj <> /K[1478 0 R ] >> endobj 1480 0 obj <> endobj 1479 0 obj <> /K[1480 0 R ] >> endobj 1482 0 obj <> endobj 1481 0 obj <> /K[1482 0 R ] >> endobj 1484 0 obj <> endobj 1483 0 obj <> /K[1484 0 R ] >> endobj 1486 0 obj <> endobj 1485 0 obj <> /K[1486 0 R ] >> endobj 1488 0 obj <> endobj 1487 0 obj <> /K[1488 0 R ] >> endobj 1490 0 obj <> endobj 1489 0 obj <> /K[1490 0 R ] >> endobj 1492 0 obj <> endobj 1491 0 obj <> /K[1492 0 R ] >> endobj 1497 0 obj <> endobj 1496 0 obj <> /K[1497 0 R ] >> endobj 1499 0 obj <> endobj 1498 0 obj <> /K[1499 0 R ] >> endobj 1501 0 obj <> endobj 1500 0 obj <> /K[1501 0 R ] >> endobj 1503 0 obj <> endobj 1502 0 obj <> /K[1503 0 R ] >> endobj 1505 0 obj <> endobj 1504 0 obj <> /K[1505 0 R ] >> endobj 1507 0 obj <> endobj 1506 0 obj <> /K[1507 0 R ] >> endobj 1509 0 obj <> endobj 1508 0 obj <> /K[1509 0 R ] >> endobj 1511 0 obj <> endobj 1510 0 obj <> /K[1511 0 R ] >> endobj 1513 0 obj <> endobj 1512 0 obj <> /K[1513 0 R ] >> endobj 1515 0 obj <> endobj 1514 0 obj <> /K[1515 0 R ] >> endobj 1517 0 obj <> endobj 1516 0 obj <> /K[1517 0 R ] >> endobj 1520 0 obj <> endobj 1523 0 obj <> endobj 1524 0 obj <> endobj 1525 0 obj <> endobj 1526 0 obj <> ] >> endobj 1527 0 obj <> ] >> endobj 1522 0 obj <> /K[1523 0 R 24 1524 0 R 26 1525 0 R 28 1526 0 R 1527 0 R 31 ] >> endobj 1521 0 obj <> endobj 1519 0 obj <> endobj 1529 0 obj <> endobj 1532 0 obj <> endobj 1533 0 obj <> ] >> endobj 1534 0 obj <> ] >> endobj 1531 0 obj <> /K[1532 0 R 34 1533 0 R 1534 0 R 37 ] >> endobj 1530 0 obj <> endobj 1528 0 obj <> endobj 1518 0 obj <> /K[1519 0 R 1528 0 R ] >> endobj 1535 0 obj <> /K[38 ] >> endobj 1537 0 obj <> endobj 1536 0 obj <> /K[39 1537 0 R 41 42 43 44 45 ] >> endobj 1539 0 obj <> endobj 1540 0 obj <> endobj 1541 0 obj <> endobj 1542 0 obj <> endobj 1538 0 obj <> /K[46 1539 0 R 48 49 1540 0 R 51 52 1541 0 R 54 55 1542 0 R 57 58 ] >> endobj 1543 0 obj <> /K[59 ] >> endobj 1545 0 obj <> endobj 1544 0 obj <> /K[1545 0 R ] >> endobj 1547 0 obj <> endobj 1546 0 obj <> /K[61 1547 0 R 63 ] >> endobj 1549 0 obj <> ] >> endobj 1550 0 obj <> ] >> endobj 1548 0 obj <> /K[64 1549 0 R 66 1550 0 R 68 ] >> endobj 1551 0 obj <> /K[69 ] >> endobj 1553 0 obj <> endobj 1554 0 obj <> ] >> endobj 1552 0 obj <> /K[70 1553 0 R 72 1554 0 R 74 ] >> endobj 1556 0 obj <> endobj 1555 0 obj <> /K[1556 0 R ] >> endobj 1558 0 obj <> endobj 1557 0 obj <> /K[1558 0 R ] >> endobj 1560 0 obj <> endobj 1559 0 obj <> /K[1560 0 R ] >> endobj 1562 0 obj <> endobj 1561 0 obj <> /K[1562 0 R ] >> endobj 1564 0 obj <> endobj 1563 0 obj <> /K[1564 0 R ] >> endobj 1566 0 obj <> endobj 1565 0 obj <> /K[1566 0 R ] >> endobj 1571 0 obj <> endobj 1570 0 obj <> /K[1571 0 R ] >> endobj 1573 0 obj <> endobj 1572 0 obj <> /K[1573 0 R ] >> endobj 1575 0 obj <> endobj 1574 0 obj <> /K[1575 0 R ] >> endobj 1577 0 obj <> endobj 1576 0 obj <> /K[1577 0 R ] >> endobj 1579 0 obj <> endobj 1578 0 obj <> /K[1579 0 R ] >> endobj 1581 0 obj <> endobj 1580 0 obj <> /K[1581 0 R ] >> endobj 1583 0 obj <> endobj 1582 0 obj <> /K[1583 0 R ] >> endobj 1585 0 obj <> endobj 1584 0 obj <> /K[1585 0 R ] >> endobj 1587 0 obj <> endobj 1586 0 obj <> /K[1587 0 R ] >> endobj 1589 0 obj <> endobj 1588 0 obj <> /K[1589 0 R ] >> endobj 1591 0 obj <> endobj 1590 0 obj <> /K[1591 0 R ] >> endobj 1593 0 obj <> endobj 1592 0 obj <> /K[1593 0 R ] >> endobj 1595 0 obj <> endobj 1594 0 obj <> /K[1595 0 R ] >> endobj 1597 0 obj <> endobj 1596 0 obj <> /K[1597 0 R ] >> endobj 1599 0 obj <> endobj 1598 0 obj <> /K[1599 0 R ] >> endobj 1601 0 obj <> endobj 1600 0 obj <> /K[1601 0 R ] >> endobj 1603 0 obj <> endobj 1602 0 obj <> /K[1603 0 R ] >> endobj 1605 0 obj <> endobj 1604 0 obj <> /K[1605 0 R ] >> endobj 1607 0 obj <> endobj 1606 0 obj <> /K[1607 0 R ] >> endobj 1609 0 obj <> endobj 1608 0 obj <> /K[1609 0 R ] >> endobj 1611 0 obj <> endobj 1610 0 obj <> /K[1611 0 R ] >> endobj 1613 0 obj <> endobj 1612 0 obj <> /K[1613 0 R ] >> endobj 1615 0 obj <> endobj 1614 0 obj <> /K[1615 0 R ] >> endobj 1617 0 obj <> endobj 1616 0 obj <> /K[1617 0 R ] >> endobj 1619 0 obj <> endobj 1618 0 obj <> /K[1619 0 R ] >> endobj 1621 0 obj <> endobj 1620 0 obj <> /K[1621 0 R ] >> endobj 1623 0 obj <> endobj 1622 0 obj <> /K[1623 0 R ] >> endobj 1625 0 obj <> endobj 1624 0 obj <> /K[1625 0 R ] >> endobj 1627 0 obj <> endobj 1626 0 obj <> /K[1627 0 R ] >> endobj 1629 0 obj <> endobj 1628 0 obj <> /K[1629 0 R ] >> endobj 1631 0 obj <> endobj 1630 0 obj <> /K[1631 0 R ] >> endobj 1633 0 obj <> endobj 1632 0 obj <> /K[1633 0 R ] >> endobj 1635 0 obj <> endobj 1634 0 obj <> /K[1635 0 R ] >> endobj 1637 0 obj <> endobj 1636 0 obj <> /K[1637 0 R ] >> endobj 1639 0 obj <> endobj 1638 0 obj <> /K[1639 0 R ] >> endobj 1641 0 obj <> endobj 1640 0 obj <> /K[1641 0 R ] >> endobj 1643 0 obj <> endobj 1642 0 obj <> /K[1643 0 R ] >> endobj 1645 0 obj <> endobj 1644 0 obj <> /K[1645 0 R ] >> endobj 1647 0 obj <> endobj 1646 0 obj <> /K[1647 0 R ] >> endobj 1649 0 obj <> endobj 1648 0 obj <> /K[1649 0 R ] >> endobj 1651 0 obj <> endobj 1650 0 obj <> /K[1651 0 R ] >> endobj 1653 0 obj <> endobj 1652 0 obj <> /K[1653 0 R ] >> endobj 1655 0 obj <> endobj 1654 0 obj <> /K[1655 0 R ] >> endobj 1657 0 obj <> endobj 1656 0 obj <> /K[1657 0 R ] >> endobj 1659 0 obj <> endobj 1658 0 obj <> /K[1659 0 R ] >> endobj 1661 0 obj <> endobj 1660 0 obj <> /K[1661 0 R ] >> endobj 1663 0 obj <> endobj 1662 0 obj <> /K[1663 0 R ] >> endobj 1665 0 obj <> endobj 1664 0 obj <> /K[1665 0 R ] >> endobj 1667 0 obj <> endobj 1666 0 obj <> /K[1667 0 R ] >> endobj 1669 0 obj <> endobj 1668 0 obj <> /K[1669 0 R ] >> endobj 1671 0 obj <> endobj 1670 0 obj <> /K[1671 0 R ] >> endobj 1673 0 obj <> endobj 1672 0 obj <> /K[1673 0 R ] >> endobj 1675 0 obj <> endobj 1674 0 obj <> /K[1675 0 R ] >> endobj 1677 0 obj <> endobj 1676 0 obj <> /K[1677 0 R ] >> endobj 1679 0 obj <> endobj 1678 0 obj <> /K[1679 0 R ] >> endobj 1681 0 obj <> endobj 1680 0 obj <> /K[1681 0 R ] >> endobj 1683 0 obj <> endobj 1682 0 obj <> /K[1683 0 R ] >> endobj 1688 0 obj <> endobj 1687 0 obj <> /K[1688 0 R ] >> endobj 1690 0 obj <> endobj 1689 0 obj <> /K[1690 0 R ] >> endobj 1692 0 obj <> endobj 1691 0 obj <> /K[1692 0 R ] >> endobj 1694 0 obj <> endobj 1693 0 obj <> /K[1694 0 R ] >> endobj 1696 0 obj <> endobj 1695 0 obj <> /K[1696 0 R ] >> endobj 1698 0 obj <> endobj 1697 0 obj <> /K[1698 0 R ] >> endobj 1700 0 obj <> endobj 1699 0 obj <> /K[1700 0 R ] >> endobj 1702 0 obj <> endobj 1701 0 obj <> /K[1702 0 R ] >> endobj 1704 0 obj <> endobj 1703 0 obj <> /K[1704 0 R ] >> endobj 1706 0 obj <> endobj 1705 0 obj <> /K[1706 0 R ] >> endobj 1708 0 obj <> endobj 1707 0 obj <> /K[1708 0 R ] >> endobj 1710 0 obj <> endobj 1709 0 obj <> /K[1710 0 R ] >> endobj 1712 0 obj <> endobj 1711 0 obj <> /K[1712 0 R ] >> endobj 1714 0 obj <> endobj 1713 0 obj <> /K[1714 0 R ] >> endobj 1716 0 obj <> endobj 1715 0 obj <> /K[1716 0 R ] >> endobj 1718 0 obj <> endobj 1717 0 obj <> /K[1718 0 R ] >> endobj 1720 0 obj <> endobj 1719 0 obj <> /K[1720 0 R ] >> endobj 1722 0 obj <> endobj 1721 0 obj <> /K[1722 0 R ] >> endobj 1724 0 obj <> endobj 1723 0 obj <> /K[1724 0 R ] >> endobj 1726 0 obj <> endobj 1725 0 obj <> /K[1726 0 R ] >> endobj 1728 0 obj <> endobj 1727 0 obj <> /K[1728 0 R ] >> endobj 1730 0 obj <> endobj 1729 0 obj <> /K[1730 0 R ] >> endobj 1732 0 obj <> endobj 1731 0 obj <> /K[1732 0 R ] >> endobj 1734 0 obj <> endobj 1733 0 obj <> /K[1734 0 R ] >> endobj 1736 0 obj <> endobj 1735 0 obj <> /K[1736 0 R ] >> endobj 1738 0 obj <> endobj 1737 0 obj <> /K[1738 0 R ] >> endobj 1740 0 obj <> endobj 1739 0 obj <> /K[1740 0 R ] >> endobj 1742 0 obj <> endobj 1741 0 obj <> /K[1742 0 R ] >> endobj 1744 0 obj <> endobj 1743 0 obj <> /K[1744 0 R ] >> endobj 1746 0 obj <> endobj 1745 0 obj <> /K[1746 0 R ] >> endobj 1748 0 obj <> endobj 1747 0 obj <> /K[1748 0 R ] >> endobj 1750 0 obj <> endobj 1749 0 obj <> /K[1750 0 R ] >> endobj 1752 0 obj <> endobj 1751 0 obj <> /K[1752 0 R ] >> endobj 1754 0 obj <> endobj 1753 0 obj <> /K[1754 0 R ] >> endobj 1756 0 obj <> endobj 1755 0 obj <> /K[1756 0 R ] >> endobj 1758 0 obj <> endobj 1757 0 obj <> /K[1758 0 R ] >> endobj 1760 0 obj <> endobj 1759 0 obj <> /K[1760 0 R ] >> endobj 1761 0 obj <> /K[40 ] >> endobj 1763 0 obj <> endobj 1764 0 obj <> endobj 1762 0 obj <> /K[41 42 1763 0 R 44 1764 0 R 46 47 48 49 50 ] >> endobj 1766 0 obj <> endobj 1765 0 obj <> /K[51 1766 0 R 53 54 55 56 ] >> endobj 1767 0 obj <> /K[57 <> <> <> <> ] >> endobj 1771 0 obj <> /K[4 5 6 7 8 9 10 ] >> endobj 1772 0 obj <> /K[11 12 13 ] >> endobj 1774 0 obj <> endobj 1773 0 obj <> /K[1774 0 R ] >> endobj 1776 0 obj <> endobj 1775 0 obj <> /K[1776 0 R ] >> endobj 1778 0 obj <> endobj 1777 0 obj <> /K[1778 0 R ] >> endobj 1780 0 obj <> endobj 1779 0 obj <> /K[1780 0 R ] >> endobj 1782 0 obj <> endobj 1781 0 obj <> /K[1782 0 R ] >> endobj 1784 0 obj <> endobj 1783 0 obj <> /K[1784 0 R ] >> endobj 1786 0 obj <> endobj 1785 0 obj <> /K[1786 0 R ] >> endobj 1788 0 obj <> endobj 1787 0 obj <> /K[1788 0 R ] >> endobj 1790 0 obj <> endobj 1789 0 obj <> /K[1790 0 R ] >> endobj 1792 0 obj <> endobj 1791 0 obj <> /K[1792 0 R ] >> endobj 1794 0 obj <> endobj 1793 0 obj <> /K[1794 0 R ] >> endobj 1796 0 obj <> endobj 1795 0 obj <> /K[1796 0 R ] >> endobj 1798 0 obj <> endobj 1797 0 obj <> /K[1798 0 R ] >> endobj 1800 0 obj <> endobj 1799 0 obj <> /K[1800 0 R ] >> endobj 1802 0 obj <> endobj 1801 0 obj <> /K[1802 0 R ] >> endobj 1804 0 obj <> endobj 1803 0 obj <> /K[1804 0 R ] >> endobj 1806 0 obj <> endobj 1805 0 obj <> /K[1806 0 R ] >> endobj 1808 0 obj <> endobj 1807 0 obj <> /K[1808 0 R ] >> endobj 1810 0 obj <> endobj 1809 0 obj <> /K[1810 0 R ] >> endobj 1812 0 obj <> endobj 1811 0 obj <> /K[1812 0 R ] >> endobj 1814 0 obj <> endobj 1813 0 obj <> /K[1814 0 R ] >> endobj 1816 0 obj <> endobj 1815 0 obj <> /K[1816 0 R ] >> endobj 1818 0 obj <> endobj 1817 0 obj <> /K[1818 0 R ] >> endobj 1820 0 obj <> endobj 1819 0 obj <> /K[1820 0 R ] >> endobj 1822 0 obj <> endobj 1821 0 obj <> /K[1822 0 R ] >> endobj 1824 0 obj <> endobj 1823 0 obj <> /K[1824 0 R ] >> endobj 1826 0 obj <> endobj 1825 0 obj <> /K[1826 0 R ] >> endobj 1828 0 obj <> endobj 1827 0 obj <> /K[1828 0 R ] >> endobj 1830 0 obj <> endobj 1829 0 obj <> /K[1830 0 R ] >> endobj 1832 0 obj <> endobj 1831 0 obj <> /K[1832 0 R ] >> endobj 1834 0 obj <> endobj 1833 0 obj <> /K[1834 0 R ] >> endobj 1836 0 obj <> endobj 1835 0 obj <> /K[1836 0 R ] >> endobj 1838 0 obj <> endobj 1837 0 obj <> /K[1838 0 R ] >> endobj 1840 0 obj <> endobj 1839 0 obj <> /K[1840 0 R ] >> endobj 1842 0 obj <> endobj 1841 0 obj <> /K[1842 0 R ] >> endobj 1844 0 obj <> endobj 1843 0 obj <> /K[1844 0 R ] >> endobj 1846 0 obj <> endobj 1845 0 obj <> /K[1846 0 R ] >> endobj 1851 0 obj <> endobj 1850 0 obj <> /K[1851 0 R ] >> endobj 1853 0 obj <> endobj 1852 0 obj <> /K[1853 0 R ] >> endobj 1855 0 obj <> ] >> endobj 1856 0 obj <> ] >> endobj 1857 0 obj <> ] >> endobj 1858 0 obj <> ] >> endobj 1859 0 obj <> ] >> endobj 1860 0 obj <> ] >> endobj 1854 0 obj <> /K[2 1855 0 R 4 1856 0 R 6 1857 0 R 1858 0 R 9 1859 0 R 11 1860 0 R 13 ] >> endobj 1861 0 obj <> /K[14 ] >> endobj 1862 0 obj <> /K[15 16 ] >> endobj 1864 0 obj <> endobj 1865 0 obj <> ] >> endobj 1863 0 obj <> /K[17 1864 0 R 19 1865 0 R 21 ] >> endobj 1866 0 obj <> /K[22 23 ] >> endobj 1867 0 obj <> /K[24 ] >> endobj 1868 0 obj <> /K[25 ] >> endobj 1871 0 obj <> endobj 1874 0 obj <> ] >> endobj 1873 0 obj <> /K[1874 0 R 28 ] >> endobj 1872 0 obj <> endobj 1870 0 obj <> endobj 1876 0 obj <> endobj 1879 0 obj <> ] >> endobj 1878 0 obj <> /K[1879 0 R 31 ] >> endobj 1877 0 obj <> endobj 1875 0 obj <> endobj 1881 0 obj <> endobj 1884 0 obj <> ] >> endobj 1883 0 obj <> /K[1884 0 R 34 ] >> endobj 1882 0 obj <> endobj 1880 0 obj <> endobj 1869 0 obj <> /K[1870 0 R 1875 0 R 1880 0 R ] >> endobj 1885 0 obj <> /K[35 ] >> endobj 1887 0 obj <> /K[36 ] >> endobj 1886 0 obj <> /K[1887 0 R ] >> endobj 1889 0 obj <> endobj 1888 0 obj <> /K[1889 0 R ] >> endobj 1891 0 obj <> endobj 1890 0 obj <> /K[1891 0 R ] >> endobj 1893 0 obj <> endobj 1892 0 obj <> /K[1893 0 R ] >> endobj 1895 0 obj <> endobj 1894 0 obj <> /K[1895 0 R ] >> endobj 1897 0 obj <> endobj 1896 0 obj <> /K[1897 0 R ] >> endobj 1899 0 obj <> endobj 1898 0 obj <> /K[1899 0 R ] >> endobj 1901 0 obj <> endobj 1900 0 obj <> /K[1901 0 R ] >> endobj 1903 0 obj <> endobj 1902 0 obj <> /K[1903 0 R ] >> endobj 1905 0 obj <> endobj 1904 0 obj <> /K[1905 0 R ] >> endobj 1907 0 obj <> endobj 1908 0 obj <> endobj 1906 0 obj <> /K[46 47 1907 0 R 49 1908 0 R 51 52 ] >> endobj 1909 0 obj <> /K[53 ] >> endobj 1911 0 obj <> /K[54 ] >> endobj 1910 0 obj <> /K[1911 0 R ] >> endobj 1913 0 obj <> endobj 1912 0 obj <> /K[1913 0 R ] >> endobj 1915 0 obj <> endobj 1914 0 obj <> /K[1915 0 R ] >> endobj 1917 0 obj <> endobj 1916 0 obj <> /K[1917 0 R ] >> endobj 1922 0 obj <> endobj 1921 0 obj <> /K[1922 0 R ] >> endobj 1924 0 obj <> endobj 1923 0 obj <> /K[1924 0 R ] >> endobj 1926 0 obj <> endobj 1925 0 obj <> /K[1926 0 R ] >> endobj 1928 0 obj <> endobj 1927 0 obj <> /K[1928 0 R ] >> endobj 1930 0 obj <> endobj 1929 0 obj <> /K[1930 0 R ] >> endobj 1932 0 obj <> endobj 1931 0 obj <> /K[1932 0 R ] >> endobj 1934 0 obj <> endobj 1933 0 obj <> /K[1934 0 R ] >> endobj 1936 0 obj <> endobj 1935 0 obj <> /K[1936 0 R ] >> endobj 1938 0 obj <> endobj 1937 0 obj <> /K[1938 0 R ] >> endobj 1940 0 obj <> endobj 1939 0 obj <> /K[1940 0 R ] >> endobj 1942 0 obj <> endobj 1941 0 obj <> /K[1942 0 R ] >> endobj 1944 0 obj <> endobj 1943 0 obj <> /K[1944 0 R ] >> endobj 1946 0 obj <> endobj 1945 0 obj <> /K[1946 0 R ] >> endobj 1948 0 obj <> endobj 1949 0 obj <> ] >> endobj 1950 0 obj <> ] >> endobj 1947 0 obj <> /K[13 1948 0 R 15 1949 0 R 1950 0 R 18 ] >> endobj 1951 0 obj <> /K[19 ] >> endobj 1953 0 obj <> /K[20 ] >> endobj 1952 0 obj <> /K[1953 0 R ] >> endobj 1955 0 obj <> endobj 1954 0 obj <> /K[1955 0 R ] >> endobj 1957 0 obj <> endobj 1956 0 obj <> /K[1957 0 R ] >> endobj 1959 0 obj <> endobj 1958 0 obj <> /K[1959 0 R ] >> endobj 1961 0 obj <> endobj 1960 0 obj <> /K[1961 0 R ] >> endobj 1963 0 obj <> endobj 1962 0 obj <> /K[1963 0 R ] >> endobj 1965 0 obj <> endobj 1964 0 obj <> /K[1965 0 R ] >> endobj 1967 0 obj <> endobj 1966 0 obj <> /K[1967 0 R ] >> endobj 1969 0 obj <> endobj 1968 0 obj <> /K[1969 0 R ] >> endobj 1971 0 obj <> endobj 1972 0 obj <> ] >> endobj 1973 0 obj <> ] >> endobj 1970 0 obj <> /K[29 1971 0 R 31 1972 0 R 1973 0 R 34 ] >> endobj 1974 0 obj <> /K[35 ] >> endobj 1975 0 obj <> /K[36 ] >> endobj 1976 0 obj <> /K[37 ] >> endobj 1977 0 obj <> /K[38 39 40 41 ] >> endobj 1979 0 obj <> /K[42 ] >> endobj 1978 0 obj <> /K[1979 0 R ] >> endobj 1980 0 obj <> /K[43 44 45 ] >> endobj 1982 0 obj <> endobj 1983 0 obj <> ] >> endobj 1981 0 obj <> /K[46 47 1982 0 R 49 1983 0 R 51 52 ] >> endobj 1988 0 obj <> endobj 1987 0 obj <> /K[1988 0 R ] >> endobj 1989 0 obj <> /K[1 2 ] >> endobj 1991 0 obj <> endobj 1990 0 obj <> /K[1991 0 R ] >> endobj 1993 0 obj <> endobj 1992 0 obj <> /K[1993 0 R ] >> endobj 1995 0 obj <> endobj 1994 0 obj <> /K[1995 0 R ] >> endobj 1997 0 obj <> endobj 1996 0 obj <> /K[1997 0 R ] >> endobj 1999 0 obj <> endobj 1998 0 obj <> /K[1999 0 R ] >> endobj 2001 0 obj <> endobj 2000 0 obj <> /K[2001 0 R ] >> endobj 2003 0 obj <> endobj 2002 0 obj <> /K[2003 0 R ] >> endobj 2005 0 obj <> /K[10 ] >> endobj 2004 0 obj <> /K[2005 0 R ] >> endobj 2007 0 obj <> endobj 2008 0 obj <> ] >> endobj 2006 0 obj <> /K[11 12 13 14 15 16 17 18 19 2007 0 R 22 23 2008 0 R 25 ] >> endobj 2010 0 obj <> /K[26 ] >> endobj 2009 0 obj <> /K[2010 0 R ] >> endobj 2012 0 obj <> endobj 2013 0 obj <> ] >> endobj 2014 0 obj <> endobj 2011 0 obj <> /K[27 2012 0 R 30 31 32 2013 0 R 34 2014 0 R 36 37 38 ] >> endobj 2016 0 obj <> /K[39 ] >> endobj 2015 0 obj <> /K[2016 0 R ] >> endobj 2020 0 obj <> /K[40 ] >> endobj 2019 0 obj <> <> ] /K[2020 0 R ] >> endobj 2022 0 obj <> /K[41 ] >> endobj 2021 0 obj <> <> ] /K[2022 0 R ] >> endobj 2018 0 obj <> /K[2019 0 R 2021 0 R ] >> endobj 2025 0 obj <> /K[42 ] >> endobj 2024 0 obj <> /K[2025 0 R ] >> endobj 2027 0 obj <> /K[43 ] >> endobj 2026 0 obj <> /K[2027 0 R ] >> endobj 2023 0 obj <> /K[2024 0 R 2026 0 R ] >> endobj 2029 0 obj <> >> endobj 2031 0 obj <> /K[44 ] >> endobj 2030 0 obj <> /K[2031 0 R ] >> endobj 2028 0 obj <> /K[2029 0 R 2030 0 R ] >> endobj 2033 0 obj <> >> endobj 2035 0 obj <> /K[45 ] >> endobj 2034 0 obj <> /K[2035 0 R ] >> endobj 2032 0 obj <> /K[2033 0 R 2034 0 R ] >> endobj 2037 0 obj <> >> endobj 2039 0 obj <> /K[46 ] >> endobj 2038 0 obj <> /K[2039 0 R ] >> endobj 2036 0 obj <> /K[2037 0 R 2038 0 R ] >> endobj 2044 0 obj <> >> endobj 2046 0 obj <> /K[0 ] >> endobj 2045 0 obj <> /K[2046 0 R ] >> endobj 2043 0 obj <> /K[2044 0 R 2045 0 R ] >> endobj 2048 0 obj <> >> endobj 2050 0 obj <> /K[1 ] >> endobj 2049 0 obj <> /K[2050 0 R ] >> endobj 2047 0 obj <> /K[2048 0 R 2049 0 R ] >> endobj 2052 0 obj <> >> endobj 2054 0 obj <> /K[2 ] >> endobj 2053 0 obj <> /K[2054 0 R ] >> endobj 2051 0 obj <> /K[2052 0 R 2053 0 R ] >> endobj 2056 0 obj <> >> endobj 2058 0 obj <> /K[3 ] >> endobj 2057 0 obj <> /K[2058 0 R ] >> endobj 2055 0 obj <> /K[2056 0 R 2057 0 R ] >> endobj 2060 0 obj <> >> endobj 2062 0 obj <> /K[4 ] >> endobj 2061 0 obj <> /K[2062 0 R ] >> endobj 2059 0 obj <> /K[2060 0 R 2061 0 R ] >> endobj 2065 0 obj <> /K[5 ] >> endobj 2064 0 obj <> /K[2065 0 R ] >> endobj 2067 0 obj <> /K[6 ] >> endobj 2066 0 obj <> /K[2067 0 R ] >> endobj 2063 0 obj <> /K[2064 0 R 2066 0 R ] >> endobj 2070 0 obj <> /K[7 ] >> endobj 2069 0 obj <> /K[2070 0 R ] >> endobj 2072 0 obj <> /K[8 ] >> endobj 2071 0 obj <> /K[2072 0 R ] >> endobj 2068 0 obj <> /K[2069 0 R 2071 0 R ] >> endobj 2017 0 obj <> /K[2018 0 R 2023 0 R 2028 0 R 2032 0 R 2036 0 R 2043 0 R 2047 0 R 2051 0 R 2055 0 R 2059 0 R 2063 0 R 2068 0 R ] >> endobj 2074 0 obj <> /K[9 ] >> endobj 2073 0 obj <> /K[2074 0 R ] >> endobj 2078 0 obj <> /K[10 ] >> endobj 2077 0 obj <> <> ] /K[2078 0 R ] >> endobj 2080 0 obj <> /K[11 ] >> endobj 2079 0 obj <> <> ] /K[2080 0 R ] >> endobj 2076 0 obj <> /K[2077 0 R 2079 0 R ] >> endobj 2083 0 obj <> /K[12 ] >> endobj 2082 0 obj <> /K[2083 0 R ] >> endobj 2085 0 obj <> /K[13 ] >> endobj 2084 0 obj <> /K[2085 0 R ] >> endobj 2081 0 obj <> /K[2082 0 R 2084 0 R ] >> endobj 2087 0 obj <> >> endobj 2089 0 obj <> /K[14 ] >> endobj 2088 0 obj <> /K[2089 0 R ] >> endobj 2086 0 obj <> /K[2087 0 R 2088 0 R ] >> endobj 2091 0 obj <> >> endobj 2093 0 obj <> /K[15 ] >> endobj 2092 0 obj <> /K[2093 0 R ] >> endobj 2090 0 obj <> /K[2091 0 R 2092 0 R ] >> endobj 2095 0 obj <> >> endobj 2097 0 obj <> /K[16 ] >> endobj 2096 0 obj <> /K[2097 0 R ] >> endobj 2094 0 obj <> /K[2095 0 R 2096 0 R ] >> endobj 2099 0 obj <> >> endobj 2101 0 obj <> /K[17 ] >> endobj 2100 0 obj <> /K[2101 0 R ] >> endobj 2098 0 obj <> /K[2099 0 R 2100 0 R ] >> endobj 2103 0 obj <> >> endobj 2105 0 obj <> /K[18 ] >> endobj 2104 0 obj <> /K[2105 0 R ] >> endobj 2102 0 obj <> /K[2103 0 R 2104 0 R ] >> endobj 2107 0 obj <> >> endobj 2109 0 obj <> /K[19 ] >> endobj 2108 0 obj <> /K[2109 0 R ] >> endobj 2106 0 obj <> /K[2107 0 R 2108 0 R ] >> endobj 2111 0 obj <> >> endobj 2113 0 obj <> /K[20 ] >> endobj 2112 0 obj <> /K[2113 0 R ] >> endobj 2110 0 obj <> /K[2111 0 R 2112 0 R ] >> endobj 2075 0 obj <> /K[2076 0 R 2081 0 R 2086 0 R 2090 0 R 2094 0 R 2098 0 R 2102 0 R 2106 0 R 2110 0 R ] >> endobj 2115 0 obj <> /K[21 ] >> endobj 2114 0 obj <> /K[2115 0 R ] >> endobj 2119 0 obj <> /K[22 ] >> endobj 2118 0 obj <> <> ] /K[2119 0 R ] >> endobj 2121 0 obj <> /K[23 ] >> endobj 2120 0 obj <> <> ] /K[2121 0 R ] >> endobj 2117 0 obj <> /K[2118 0 R 2120 0 R ] >> endobj 2124 0 obj <> /K[24 ] >> endobj 2123 0 obj <> /K[2124 0 R ] >> endobj 2126 0 obj <> /K[25 ] >> endobj 2125 0 obj <> /K[2126 0 R ] >> endobj 2122 0 obj <> /K[2123 0 R 2125 0 R ] >> endobj 2128 0 obj <> >> endobj 2130 0 obj <> /K[26 ] >> endobj 2129 0 obj <> /K[2130 0 R ] >> endobj 2127 0 obj <> /K[2128 0 R 2129 0 R ] >> endobj 2132 0 obj <> >> endobj 2134 0 obj <> /K[27 ] >> endobj 2133 0 obj <> /K[2134 0 R ] >> endobj 2131 0 obj <> /K[2132 0 R 2133 0 R ] >> endobj 2136 0 obj <> >> endobj 2138 0 obj <> /K[28 ] >> endobj 2137 0 obj <> /K[2138 0 R ] >> endobj 2135 0 obj <> /K[2136 0 R 2137 0 R ] >> endobj 2143 0 obj <> >> endobj 2145 0 obj <> /K[0 ] >> endobj 2144 0 obj <> /K[2145 0 R ] >> endobj 2142 0 obj <> /K[2143 0 R 2144 0 R ] >> endobj 2147 0 obj <> >> endobj 2149 0 obj <> /K[1 ] >> endobj 2148 0 obj <> /K[2149 0 R ] >> endobj 2146 0 obj <> /K[2147 0 R 2148 0 R ] >> endobj 2116 0 obj <> /K[2117 0 R 2122 0 R 2127 0 R 2131 0 R 2135 0 R 2142 0 R 2146 0 R ] >> endobj 2151 0 obj <> /K[2 ] >> endobj 2150 0 obj <> /K[2151 0 R ] >> endobj 2155 0 obj <> /K[3 ] >> endobj 2154 0 obj <> /K[2155 0 R ] >> endobj 2157 0 obj <> /K[4 ] >> endobj 2156 0 obj <> /K[2157 0 R ] >> endobj 2153 0 obj <> /K[2154 0 R 2156 0 R ] >> endobj 2160 0 obj <> /K[5 ] >> endobj 2159 0 obj <> /K[2160 0 R ] >> endobj 2162 0 obj <> /K[6 ] >> endobj 2161 0 obj <> /K[2162 0 R ] >> endobj 2158 0 obj <> /K[2159 0 R 2161 0 R ] >> endobj 2165 0 obj <> /K[7 ] >> endobj 2164 0 obj <> /K[2165 0 R ] >> endobj 2167 0 obj <> /K[8 ] >> endobj 2166 0 obj <> /K[2167 0 R ] >> endobj 2163 0 obj <> /K[2164 0 R 2166 0 R ] >> endobj 2170 0 obj <> /K[9 ] >> endobj 2169 0 obj <> /K[2170 0 R ] >> endobj 2172 0 obj <> /K[10 ] >> endobj 2171 0 obj <> /K[2172 0 R ] >> endobj 2168 0 obj <> /K[2169 0 R 2171 0 R ] >> endobj 2175 0 obj <> /K[11 ] >> endobj 2174 0 obj <> /K[2175 0 R ] >> endobj 2177 0 obj <> /K[12 ] >> endobj 2176 0 obj <> /K[2177 0 R ] >> endobj 2173 0 obj <> /K[2174 0 R 2176 0 R ] >> endobj 2180 0 obj <> /K[13 ] >> endobj 2179 0 obj <> /K[2180 0 R ] >> endobj 2182 0 obj <> /K[14 ] >> endobj 2181 0 obj <> /K[2182 0 R ] >> endobj 2178 0 obj <> /K[2179 0 R 2181 0 R ] >> endobj 2185 0 obj <> /K[15 ] >> endobj 2184 0 obj <> /K[2185 0 R ] >> endobj 2187 0 obj <> /K[16 ] >> endobj 2186 0 obj <> /K[2187 0 R ] >> endobj 2183 0 obj <> /K[2184 0 R 2186 0 R ] >> endobj 2190 0 obj <> /K[17 ] >> endobj 2189 0 obj <> /K[2190 0 R ] >> endobj 2192 0 obj <> /K[18 ] >> endobj 2191 0 obj <> /K[2192 0 R ] >> endobj 2188 0 obj <> /K[2189 0 R 2191 0 R ] >> endobj 2195 0 obj <> /K[19 ] >> endobj 2194 0 obj <> /K[2195 0 R ] >> endobj 2197 0 obj <> /K[20 ] >> endobj 2196 0 obj <> /K[2197 0 R ] >> endobj 2193 0 obj <> /K[2194 0 R 2196 0 R ] >> endobj 2200 0 obj <> /K[21 ] >> endobj 2199 0 obj <> /K[2200 0 R ] >> endobj 2202 0 obj <> /K[22 ] >> endobj 2201 0 obj <> /K[2202 0 R ] >> endobj 2198 0 obj <> /K[2199 0 R 2201 0 R ] >> endobj 2205 0 obj <> /K[23 ] >> endobj 2204 0 obj <> /K[2205 0 R ] >> endobj 2207 0 obj <> /K[24 ] >> endobj 2206 0 obj <> /K[2207 0 R ] >> endobj 2203 0 obj <> /K[2204 0 R 2206 0 R ] >> endobj 2210 0 obj <> /K[25 ] >> endobj 2209 0 obj <> /K[2210 0 R ] >> endobj 2212 0 obj <> /K[26 ] >> endobj 2211 0 obj <> /K[2212 0 R ] >> endobj 2208 0 obj <> /K[2209 0 R 2211 0 R ] >> endobj 2215 0 obj <> /K[27 ] >> endobj 2214 0 obj <> /K[2215 0 R ] >> endobj 2217 0 obj <> /K[28 ] >> endobj 2216 0 obj <> /K[2217 0 R ] >> endobj 2213 0 obj <> /K[2214 0 R 2216 0 R ] >> endobj 2220 0 obj <> /K[29 ] >> endobj 2219 0 obj <> /K[2220 0 R ] >> endobj 2222 0 obj <> /K[30 ] >> endobj 2221 0 obj <> /K[2222 0 R ] >> endobj 2218 0 obj <> /K[2219 0 R 2221 0 R ] >> endobj 2225 0 obj <> /K[31 ] >> endobj 2224 0 obj <> /K[2225 0 R ] >> endobj 2227 0 obj <> /K[32 ] >> endobj 2226 0 obj <> /K[2227 0 R ] >> endobj 2223 0 obj <> /K[2224 0 R 2226 0 R ] >> endobj 2230 0 obj <> /K[33 ] >> endobj 2229 0 obj <> /K[2230 0 R ] >> endobj 2232 0 obj <> /K[34 ] >> endobj 2231 0 obj <> /K[2232 0 R ] >> endobj 2228 0 obj <> /K[2229 0 R 2231 0 R ] >> endobj 2235 0 obj <> /K[35 ] >> endobj 2234 0 obj <> /K[2235 0 R ] >> endobj 2237 0 obj <> /K[36 ] >> endobj 2236 0 obj <> /K[2237 0 R ] >> endobj 2233 0 obj <> /K[2234 0 R 2236 0 R ] >> endobj 2240 0 obj <> /K[37 ] >> endobj 2239 0 obj <> /K[2240 0 R ] >> endobj 2242 0 obj <> /K[38 ] >> endobj 2241 0 obj <> /K[2242 0 R ] >> endobj 2238 0 obj <> /K[2239 0 R 2241 0 R ] >> endobj 2245 0 obj <> /K[39 ] >> endobj 2244 0 obj <> /K[2245 0 R ] >> endobj 2247 0 obj <> /K[40 ] >> endobj 2246 0 obj <> /K[2247 0 R ] >> endobj 2243 0 obj <> /K[2244 0 R 2246 0 R ] >> endobj 2253 0 obj <> /K[0 ] >> endobj 2252 0 obj <> /K[2253 0 R ] >> endobj 2255 0 obj <> /K[1 ] >> endobj 2254 0 obj <> /K[2255 0 R ] >> endobj 2251 0 obj <> /K[2252 0 R 2254 0 R ] >> endobj 2258 0 obj <> /K[2 ] >> endobj 2257 0 obj <> /K[2258 0 R ] >> endobj 2260 0 obj <> /K[3 ] >> endobj 2259 0 obj <> /K[2260 0 R ] >> endobj 2256 0 obj <> /K[2257 0 R 2259 0 R ] >> endobj 2263 0 obj <> /K[4 ] >> endobj 2262 0 obj <> /K[2263 0 R ] >> endobj 2265 0 obj <> /K[5 ] >> endobj 2264 0 obj <> /K[2265 0 R ] >> endobj 2261 0 obj <> /K[2262 0 R 2264 0 R ] >> endobj 2268 0 obj <> /K[6 ] >> endobj 2267 0 obj <> /K[2268 0 R ] >> endobj 2270 0 obj <> /K[7 ] >> endobj 2269 0 obj <> /K[2270 0 R ] >> endobj 2266 0 obj <> /K[2267 0 R 2269 0 R ] >> endobj 2273 0 obj <> /K[8 ] >> endobj 2272 0 obj <> /K[2273 0 R ] >> endobj 2275 0 obj <> /K[9 ] >> endobj 2274 0 obj <> /K[2275 0 R ] >> endobj 2271 0 obj <> /K[2272 0 R 2274 0 R ] >> endobj 2278 0 obj <> /K[10 ] >> endobj 2277 0 obj <> /K[2278 0 R ] >> endobj 2280 0 obj <> /K[11 ] >> endobj 2279 0 obj <> /K[2280 0 R ] >> endobj 2276 0 obj <> /K[2277 0 R 2279 0 R ] >> endobj 2283 0 obj <> /K[12 ] >> endobj 2282 0 obj <> /K[2283 0 R ] >> endobj 2285 0 obj <> /K[13 ] >> endobj 2284 0 obj <> /K[2285 0 R ] >> endobj 2281 0 obj <> /K[2282 0 R 2284 0 R ] >> endobj 2288 0 obj <> /K[14 ] >> endobj 2287 0 obj <> /K[2288 0 R ] >> endobj 2290 0 obj <> /K[15 ] >> endobj 2289 0 obj <> /K[2290 0 R ] >> endobj 2286 0 obj <> /K[2287 0 R 2289 0 R ] >> endobj 2293 0 obj <> /K[16 ] >> endobj 2292 0 obj <> /K[2293 0 R ] >> endobj 2295 0 obj <> /K[17 ] >> endobj 2294 0 obj <> /K[2295 0 R ] >> endobj 2291 0 obj <> /K[2292 0 R 2294 0 R ] >> endobj 2152 0 obj <> /K[2153 0 R 2158 0 R 2163 0 R 2168 0 R 2173 0 R 2178 0 R 2183 0 R 2188 0 R 2193 0 R 2198 0 R 2203 0 R 2208 0 R 2213 0 R 2218 0 R 2223 0 R 2228 0 R 2233 0 R 2238 0 R 2243 0 R 2251 0 R 2256 0 R 2261 0 R 2266 0 R 2271 0 R 2276 0 R 2281 0 R 2286 0 R 2291 0 R ] >> endobj 2296 0 obj <> /K[18 ] >> endobj 2298 0 obj <> /K[19 ] >> endobj 2297 0 obj <> /K[2298 0 R ] >> endobj 2301 0 obj <> endobj 2304 0 obj <> endobj 2303 0 obj <> /K[2304 0 R 22 23 ] >> endobj 2302 0 obj <> endobj 2300 0 obj <> endobj 2306 0 obj <> endobj 2309 0 obj <> endobj 2308 0 obj <> /K[2309 0 R 26 ] >> endobj 2307 0 obj <> endobj 2305 0 obj <> endobj 2311 0 obj <> endobj 2314 0 obj <> endobj 2313 0 obj <> /K[2314 0 R 29 ] >> endobj 2312 0 obj <> endobj 2310 0 obj <> endobj 2316 0 obj <> endobj 2319 0 obj <> endobj 2318 0 obj <> /K[2319 0 R 32 ] >> endobj 2317 0 obj <> endobj 2315 0 obj <> endobj 2321 0 obj <> endobj 2324 0 obj <> endobj 2325 0 obj <> endobj 2323 0 obj <> /K[2324 0 R 35 2325 0 R 38 39 ] >> endobj 2322 0 obj <> endobj 2320 0 obj <> endobj 2327 0 obj <> endobj 2330 0 obj <> endobj 2329 0 obj <> /K[2330 0 R 42 ] >> endobj 2328 0 obj <> endobj 2326 0 obj <> endobj 2332 0 obj <> endobj 2335 0 obj <> endobj 2334 0 obj <> /K[2335 0 R 45 ] >> endobj 2333 0 obj <> endobj 2331 0 obj <> endobj 2337 0 obj <> endobj 2340 0 obj <> endobj 2339 0 obj <> /K[2340 0 R 48 ] >> endobj 2338 0 obj <> endobj 2336 0 obj <> endobj 2342 0 obj <> endobj 2345 0 obj <> endobj 2346 0 obj <> endobj 2347 0 obj <> endobj 2348 0 obj <> endobj 2344 0 obj <> /K[2345 0 R 51 2346 0 R 53 2347 0 R 55 2348 0 R 57 ] >> endobj 2343 0 obj <> endobj 2341 0 obj <> endobj 2350 0 obj <> endobj 2353 0 obj <> endobj 2354 0 obj <> endobj 2355 0 obj <> endobj 2352 0 obj <> /K[2353 0 R 60 2354 0 R 62 63 2355 0 R 65 ] >> endobj 2351 0 obj <> endobj 2349 0 obj <> endobj 2357 0 obj <> endobj 2360 0 obj <> endobj 2359 0 obj <> /K[2360 0 R 68 ] >> endobj 2358 0 obj <> endobj 2356 0 obj <> endobj 2362 0 obj <> endobj 2365 0 obj <> endobj 2364 0 obj <> /K[2365 0 R 71 ] >> endobj 2363 0 obj <> endobj 2361 0 obj <> endobj 2367 0 obj <> endobj 2370 0 obj <> endobj 2369 0 obj <> /K[2370 0 R 74 ] >> endobj 2368 0 obj <> endobj 2366 0 obj <> endobj 2372 0 obj <> endobj 2375 0 obj <> endobj 2374 0 obj <> /K[2375 0 R 77 ] >> endobj 2373 0 obj <> endobj 2371 0 obj <> endobj 2299 0 obj <> /K[2300 0 R 2305 0 R 2310 0 R 2315 0 R 2320 0 R 2326 0 R 2331 0 R 2336 0 R 2341 0 R 2349 0 R 2356 0 R 2361 0 R 2366 0 R 2371 0 R ] >> endobj 2377 0 obj <> endobj 2378 0 obj <> endobj 2379 0 obj <> endobj 2380 0 obj <> endobj 2381 0 obj <> endobj 2376 0 obj <> /K[2377 0 R 79 2378 0 R 81 2379 0 R 83 84 2380 0 R 86 2381 0 R 88 89 ] >> endobj 2386 0 obj <> endobj 2387 0 obj <> endobj 2388 0 obj <> endobj 2385 0 obj <> /K[2386 0 R 1 2387 0 R 3 2388 0 R 5 6 ] >> endobj 2390 0 obj <> endobj 2389 0 obj <> /K[2390 0 R 8 9 10 ] >> endobj 2392 0 obj <> /K[11 ] >> endobj 2391 0 obj <> /K[2392 0 R ] >> endobj 2395 0 obj <> endobj 2398 0 obj <> endobj 2399 0 obj <> endobj 2400 0 obj <> endobj 2401 0 obj <> endobj 2397 0 obj <> /K[2398 0 R 14 2399 0 R 16 17 2400 0 R 19 2401 0 R ] >> endobj 2396 0 obj <> endobj 2394 0 obj <> endobj 2403 0 obj <> endobj 2406 0 obj <> endobj 2407 0 obj <> endobj 2408 0 obj <> endobj 2409 0 obj <> endobj 2410 0 obj <> endobj 2411 0 obj <> endobj 2412 0 obj <> endobj 2413 0 obj <> endobj 2405 0 obj <> /K[2406 0 R 23 2407 0 R 25 26 2408 0 R 28 2409 0 R 30 31 2410 0 R 33 2411 0 R 36 2412 0 R 38 2413 0 R 40 ] >> endobj 2404 0 obj <> endobj 2402 0 obj <> endobj 2393 0 obj <> /K[2394 0 R 2402 0 R ] >> endobj 2415 0 obj <> endobj 2416 0 obj <> ] >> endobj 2417 0 obj <> ] >> endobj 2418 0 obj <> ] >> endobj 2414 0 obj <> /K[2415 0 R 42 2416 0 R 2417 0 R 45 2418 0 R 47 ] >> endobj 2419 0 obj <> /K[48 ] >> endobj 2421 0 obj <> ] >> endobj 2420 0 obj <> /K[49 50 2421 0 R 52 53 ] >> endobj 2423 0 obj <> /K[54 ] >> endobj 2422 0 obj <> /K[2423 0 R ] >> endobj 2428 0 obj <> endobj 2427 0 obj <> /K[2428 0 R ] >> endobj 2426 0 obj <> /K[2427 0 R ] >> endobj 2430 0 obj <> /K[56 ] >> endobj 2429 0 obj <> /K[2430 0 R ] >> endobj 2425 0 obj <> /K[2426 0 R 2429 0 R ] >> endobj 2434 0 obj <> endobj 2433 0 obj <> /K[2434 0 R ] >> endobj 2432 0 obj <> /K[2433 0 R ] >> endobj 2436 0 obj <> /K[58 ] >> endobj 2435 0 obj <> /K[2436 0 R ] >> endobj 2431 0 obj <> /K[2432 0 R 2435 0 R ] >> endobj 2440 0 obj <> endobj 2439 0 obj <> /K[2440 0 R ] >> endobj 2438 0 obj <> /K[2439 0 R ] >> endobj 2442 0 obj <> /K[60 ] >> endobj 2441 0 obj <> /K[2442 0 R ] >> endobj 2437 0 obj <> /K[2438 0 R 2441 0 R ] >> endobj 2446 0 obj <> endobj 2445 0 obj <> /K[2446 0 R ] >> endobj 2444 0 obj <> /K[2445 0 R ] >> endobj 2448 0 obj <> /K[62 ] >> endobj 2447 0 obj <> /K[2448 0 R ] >> endobj 2443 0 obj <> /K[2444 0 R 2447 0 R ] >> endobj 2452 0 obj <> endobj 2451 0 obj <> /K[2452 0 R ] >> endobj 2450 0 obj <> /K[2451 0 R ] >> endobj 2454 0 obj <> /K[64 ] >> endobj 2453 0 obj <> /K[2454 0 R ] >> endobj 2449 0 obj <> /K[2450 0 R 2453 0 R ] >> endobj 2458 0 obj <> endobj 2457 0 obj <> /K[2458 0 R ] >> endobj 2456 0 obj <> /K[2457 0 R ] >> endobj 2461 0 obj <> endobj 2462 0 obj <> endobj 2463 0 obj <> endobj 2464 0 obj <> endobj 2465 0 obj <> endobj 2466 0 obj <> endobj 2460 0 obj <> /K[66 2461 0 R 68 2462 0 R 70 2463 0 R 72 2464 0 R 74 75 76 2465 0 R 78 79 2466 0 R 81 ] >> endobj 2459 0 obj <> /K[2460 0 R ] >> endobj 2455 0 obj <> /K[2456 0 R 2459 0 R ] >> endobj 2470 0 obj <> endobj 2469 0 obj <> /K[2470 0 R ] >> endobj 2468 0 obj <> /K[2469 0 R ] >> endobj 2472 0 obj <> /K[83 ] >> endobj 2471 0 obj <> /K[2472 0 R ] >> endobj 2467 0 obj <> /K[2468 0 R 2471 0 R ] >> endobj 2479 0 obj <> endobj 2478 0 obj <> /K[2479 0 R ] >> endobj 2477 0 obj <> /K[2478 0 R ] >> endobj 2481 0 obj <> /K[1 ] >> endobj 2480 0 obj <> /K[2481 0 R ] >> endobj 2476 0 obj <> /K[2477 0 R 2480 0 R ] >> endobj 2485 0 obj <> endobj 2484 0 obj <> /K[2485 0 R ] >> endobj 2483 0 obj <> /K[2484 0 R ] >> endobj 2487 0 obj <> /K[3 4 5 6 ] >> endobj 2486 0 obj <> /K[2487 0 R ] >> endobj 2482 0 obj <> /K[2483 0 R 2486 0 R ] >> endobj 2491 0 obj <> endobj 2490 0 obj <> /K[2491 0 R ] >> endobj 2489 0 obj <> /K[2490 0 R ] >> endobj 2494 0 obj <> endobj 2495 0 obj <> endobj 2496 0 obj <> endobj 2493 0 obj <> /K[8 9 2494 0 R 11 12 2495 0 R 14 15 2496 0 R 17 ] >> endobj 2492 0 obj <> /K[2493 0 R ] >> endobj 2488 0 obj <> /K[2489 0 R 2492 0 R ] >> endobj 2424 0 obj <> /K[2425 0 R 2431 0 R 2437 0 R 2443 0 R 2449 0 R 2455 0 R 2467 0 R 2476 0 R 2482 0 R 2488 0 R ] >> endobj 2498 0 obj <> /K[18 ] >> endobj 2497 0 obj <> /K[2498 0 R ] >> endobj 2503 0 obj <> endobj 2502 0 obj <> /K[2503 0 R ] >> endobj 2501 0 obj <> /K[2502 0 R ] >> endobj 2506 0 obj <> endobj 2505 0 obj <> /K[20 2506 0 R 22 23 24 25 ] >> endobj 2504 0 obj <> /K[2505 0 R ] >> endobj 2500 0 obj <> /K[2501 0 R 2504 0 R ] >> endobj 2510 0 obj <> endobj 2509 0 obj <> /K[2510 0 R ] >> endobj 2508 0 obj <> /K[2509 0 R ] >> endobj 2512 0 obj <> /K[27 28 ] >> endobj 2511 0 obj <> /K[2512 0 R ] >> endobj 2507 0 obj <> /K[2508 0 R 2511 0 R ] >> endobj 2516 0 obj <> endobj 2515 0 obj <> /K[2516 0 R ] >> endobj 2514 0 obj <> /K[2515 0 R ] >> endobj 2519 0 obj <> endobj 2518 0 obj <> /K[30 31 2519 0 R 33 ] >> endobj 2517 0 obj <> /K[2518 0 R ] >> endobj 2513 0 obj <> /K[2514 0 R 2517 0 R ] >> endobj 2523 0 obj <> endobj 2522 0 obj <> /K[2523 0 R ] >> endobj 2521 0 obj <> /K[2522 0 R ] >> endobj 2525 0 obj <> /K[35 ] >> endobj 2524 0 obj <> /K[2525 0 R ] >> endobj 2520 0 obj <> /K[2521 0 R 2524 0 R ] >> endobj 2529 0 obj <> endobj 2528 0 obj <> /K[2529 0 R ] >> endobj 2527 0 obj <> /K[2528 0 R ] >> endobj 2531 0 obj <> /K[37 38 ] >> endobj 2530 0 obj <> /K[2531 0 R ] >> endobj 2526 0 obj <> /K[2527 0 R 2530 0 R ] >> endobj 2535 0 obj <> endobj 2534 0 obj <> /K[2535 0 R ] >> endobj 2533 0 obj <> /K[2534 0 R ] >> endobj 2537 0 obj <> /K[40 41 42 ] >> endobj 2536 0 obj <> /K[2537 0 R ] >> endobj 2532 0 obj <> /K[2533 0 R 2536 0 R ] >> endobj 2541 0 obj <> endobj 2540 0 obj <> /K[2541 0 R ] >> endobj 2539 0 obj <> /K[2540 0 R ] >> endobj 2544 0 obj <> endobj 2545 0 obj <> endobj 2543 0 obj <> /K[44 45 2544 0 R 47 2545 0 R 49 50 ] >> endobj 2542 0 obj <> /K[2543 0 R ] >> endobj 2538 0 obj <> /K[2539 0 R 2542 0 R ] >> endobj 2549 0 obj <> endobj 2548 0 obj <> /K[2549 0 R ] >> endobj 2547 0 obj <> /K[2548 0 R ] >> endobj 2551 0 obj <> /K[52 ] >> endobj 2550 0 obj <> /K[2551 0 R ] >> endobj 2546 0 obj <> /K[2547 0 R 2550 0 R ] >> endobj 2555 0 obj <> endobj 2554 0 obj <> /K[2555 0 R ] >> endobj 2553 0 obj <> /K[2554 0 R ] >> endobj 2557 0 obj <> /K[54 ] >> endobj 2556 0 obj <> /K[2557 0 R ] >> endobj 2552 0 obj <> /K[2553 0 R 2556 0 R ] >> endobj 2561 0 obj <> endobj 2560 0 obj <> /K[2561 0 R ] >> endobj 2559 0 obj <> /K[2560 0 R ] >> endobj 2563 0 obj <> /K[56 ] >> endobj 2562 0 obj <> /K[2563 0 R ] >> endobj 2558 0 obj <> /K[2559 0 R 2562 0 R ] >> endobj 2567 0 obj <> endobj 2566 0 obj <> /K[2567 0 R ] >> endobj 2565 0 obj <> /K[2566 0 R ] >> endobj 2569 0 obj <> /K[58 ] >> endobj 2568 0 obj <> /K[2569 0 R ] >> endobj 2564 0 obj <> /K[2565 0 R 2568 0 R ] >> endobj 2573 0 obj <> endobj 2572 0 obj <> /K[2573 0 R ] >> endobj 2571 0 obj <> /K[2572 0 R ] >> endobj 2575 0 obj <> /K[60 <> <> ] >> endobj 2574 0 obj <> /K[2575 0 R ] >> endobj 2570 0 obj <> /K[2571 0 R 2574 0 R ] >> endobj 2582 0 obj <> endobj 2581 0 obj <> /K[2582 0 R ] >> endobj 2580 0 obj <> /K[2581 0 R ] >> endobj 2584 0 obj <> /K[3 4 ] >> endobj 2583 0 obj <> /K[2584 0 R ] >> endobj 2579 0 obj <> /K[2580 0 R 2583 0 R ] >> endobj 2588 0 obj <> endobj 2587 0 obj <> /K[2588 0 R ] >> endobj 2586 0 obj <> /K[2587 0 R ] >> endobj 2591 0 obj <> endobj 2590 0 obj <> /K[6 2591 0 R 8 ] >> endobj 2589 0 obj <> /K[2590 0 R ] >> endobj 2585 0 obj <> /K[2586 0 R 2589 0 R ] >> endobj 2595 0 obj <> endobj 2594 0 obj <> /K[2595 0 R ] >> endobj 2593 0 obj <> /K[2594 0 R ] >> endobj 2597 0 obj <> /K[10 ] >> endobj 2596 0 obj <> /K[2597 0 R ] >> endobj 2592 0 obj <> /K[2593 0 R 2596 0 R ] >> endobj 2601 0 obj <> endobj 2600 0 obj <> /K[2601 0 R ] >> endobj 2599 0 obj <> /K[2600 0 R ] >> endobj 2603 0 obj <> /K[12 ] >> endobj 2602 0 obj <> /K[2603 0 R ] >> endobj 2598 0 obj <> /K[2599 0 R 2602 0 R ] >> endobj 2607 0 obj <> endobj 2606 0 obj <> /K[2607 0 R ] >> endobj 2605 0 obj <> /K[2606 0 R ] >> endobj 2610 0 obj <> endobj 2611 0 obj <> endobj 2609 0 obj <> /K[14 2610 0 R 16 2611 0 R 18 19 ] >> endobj 2608 0 obj <> /K[2609 0 R ] >> endobj 2604 0 obj <> /K[2605 0 R 2608 0 R ] >> endobj 2615 0 obj <> endobj 2614 0 obj <> /K[2615 0 R ] >> endobj 2613 0 obj <> /K[2614 0 R ] >> endobj 2617 0 obj <> /K[21 22 23 ] >> endobj 2616 0 obj <> /K[2617 0 R ] >> endobj 2612 0 obj <> /K[2613 0 R 2616 0 R ] >> endobj 2499 0 obj <> /K[2500 0 R 2507 0 R 2513 0 R 2520 0 R 2526 0 R 2532 0 R 2538 0 R 2546 0 R 2552 0 R 2558 0 R 2564 0 R 2570 0 R 2579 0 R 2585 0 R 2592 0 R 2598 0 R 2604 0 R 2612 0 R ] >> endobj 2618 0 obj <> /K[24 ] >> endobj 2620 0 obj <> /K[25 ] >> endobj 2619 0 obj <> /K[2620 0 R ] >> endobj 2621 0 obj <> /K[26 27 28 29 ] >> endobj 2623 0 obj <> endobj 2624 0 obj <> endobj 2622 0 obj <> /K[30 31 32 33 34 2623 0 R 36 37 2624 0 R 39 ] >> endobj 2625 0 obj <> /K[40 ] >> endobj 2627 0 obj <> endobj 2626 0 obj <> /K[2627 0 R ] >> endobj 2629 0 obj <> endobj 2628 0 obj <> /K[2629 0 R ] >> endobj 2631 0 obj <> endobj 2630 0 obj <> /K[2631 0 R ] >> endobj 2633 0 obj <> endobj 2632 0 obj <> /K[44 45 2633 0 R 47 48 49 50 <> ] >> endobj 2638 0 obj <> ] >> endobj 2639 0 obj <> ] >> endobj 2640 0 obj <> ] >> endobj 2641 0 obj <> ] >> endobj 2637 0 obj <> /K[1 2638 0 R 3 2639 0 R 5 2640 0 R 2641 0 R 8 ] >> endobj 2642 0 obj <> /K[9 ] >> endobj 2644 0 obj <> /K[10 ] >> endobj 2643 0 obj <> /K[2644 0 R ] >> endobj 2645 0 obj <> /K[11 12 13 ] >> endobj 2647 0 obj <> endobj 2646 0 obj <> /K[2647 0 R ] >> endobj 2649 0 obj <> endobj 2648 0 obj <> /K[2649 0 R ] >> endobj 2651 0 obj <> endobj 2650 0 obj <> /K[2651 0 R ] >> endobj 2653 0 obj <> endobj 2652 0 obj <> /K[2653 0 R ] >> endobj 2655 0 obj <> endobj 2654 0 obj <> /K[2655 0 R ] >> endobj 2657 0 obj <> endobj 2658 0 obj <> endobj 2656 0 obj <> /K[19 2657 0 R 21 2658 0 R 23 24 25 26 ] >> endobj 2660 0 obj <> ] >> endobj 2659 0 obj <> /K[27 28 2660 0 R 30 31 32 33 34 35 36 ] >> endobj 2662 0 obj <> ] >> endobj 2663 0 obj <> ] >> endobj 2661 0 obj <> /K[37 2662 0 R 39 2663 0 R 41 ] >> endobj 2664 0 obj <> /K[42 ] >> endobj 2666 0 obj <> /K[43 ] >> endobj 2665 0 obj <> /K[2666 0 R ] >> endobj 2668 0 obj <> ] >> endobj 2667 0 obj <> /K[44 45 46 47 48 2668 0 R 50 51 ] >> endobj 2670 0 obj <> ] >> endobj 2674 0 obj <> ] >> endobj 2675 0 obj <> ] >> endobj 2669 0 obj <> /K[52 53 54 2670 0 R 56 <> <> <> <> 2674 0 R 2675 0 R <> ] >> endobj 2677 0 obj <> ] >> endobj 2676 0 obj <> /K[7 8 9 10 2677 0 R 12 13 14 15 ] >> endobj 2679 0 obj <> ] >> endobj 2680 0 obj <> endobj 2681 0 obj <> endobj 2678 0 obj <> /K[16 17 2679 0 R 19 20 2680 0 R 22 2681 0 R 24 25 ] >> endobj 2682 0 obj <> /K[26 ] >> endobj 2685 0 obj <> endobj 2688 0 obj <> endobj 2689 0 obj <> endobj 2690 0 obj <> endobj 2691 0 obj <> endobj 2687 0 obj <> /K[2688 0 R 29 30 31 32 33 2689 0 R 35 2690 0 R 37 38 39 2691 0 R 41 42 43 ] >> endobj 2686 0 obj <> endobj 2684 0 obj <> endobj 2693 0 obj <> endobj 2696 0 obj <> endobj 2697 0 obj <> endobj 2698 0 obj <> endobj 2699 0 obj <> ] >> endobj 2700 0 obj <> endobj 2701 0 obj <> endobj 2695 0 obj <> /K[2696 0 R 46 47 2697 0 R 49 50 2698 0 R 52 53 54 55 56 57 58 2699 0 R 60 61 2700 0 R 63 2701 0 R 65 ] >> endobj 2694 0 obj <> endobj 2692 0 obj <> endobj 2683 0 obj <> /K[2684 0 R 2692 0 R ] >> endobj 2702 0 obj <> /K[66 ] >> endobj 2707 0 obj <> /K[0 ] >> endobj 2706 0 obj <> /K[2707 0 R ] >> endobj 2710 0 obj <> endobj 2713 0 obj <> endobj 2714 0 obj <> endobj 2715 0 obj <> endobj 2716 0 obj <> endobj 2712 0 obj <> /K[2713 0 R 3 4 5 6 7 8 9 2714 0 R 12 2715 0 R 14 2716 0 R 16 ] >> endobj 2711 0 obj <> endobj 2709 0 obj <> endobj 2718 0 obj <> endobj 2721 0 obj <> endobj 2722 0 obj <> endobj 2720 0 obj <> /K[2721 0 R 19 20 21 2722 0 R 23 24 25 26 ] >> endobj 2719 0 obj <> endobj 2717 0 obj <> endobj 2724 0 obj <> endobj 2727 0 obj <> endobj 2728 0 obj <> endobj 2729 0 obj <> endobj 2730 0 obj <> endobj 2731 0 obj <> ] >> endobj 2726 0 obj <> /K[2727 0 R 29 30 31 2728 0 R 33 34 2729 0 R 36 37 2730 0 R 39 40 2731 0 R 42 43 ] >> endobj 2725 0 obj <> endobj 2723 0 obj <> endobj 2733 0 obj <> endobj 2736 0 obj <> endobj 2737 0 obj <> endobj 2735 0 obj <> /K[2736 0 R 46 47 48 49 50 51 52 2737 0 R 55 ] >> endobj 2734 0 obj <> endobj 2732 0 obj <> endobj 2739 0 obj <> endobj 2742 0 obj <> endobj 2743 0 obj <> endobj 2744 0 obj <> endobj 2745 0 obj <> endobj 2746 0 obj <> endobj 2747 0 obj <> endobj 2748 0 obj <> endobj 2741 0 obj <> /K[2742 0 R 60 61 62 2743 0 R 64 65 2744 0 R 67 2745 0 R 69 70 2746 0 R 73 2747 0 R 75 76 2748 0 R 78 79 80 81 82 ] >> endobj 2740 0 obj <> endobj 2738 0 obj <> endobj 2753 0 obj <> endobj 2756 0 obj <> endobj 2757 0 obj <> endobj 2758 0 obj <> endobj 2755 0 obj <> /K[2756 0 R 2 3 4 5 6 7 2757 0 R 9 2758 0 R 11 ] >> endobj 2754 0 obj <> endobj 2752 0 obj <> endobj 2760 0 obj <> endobj 2763 0 obj <> endobj 2764 0 obj <> endobj 2765 0 obj <> endobj 2766 0 obj <> endobj 2762 0 obj <> /K[2763 0 R 14 15 2764 0 R 17 2765 0 R 19 20 21 2766 0 R 23 24 ] >> endobj 2761 0 obj <> endobj 2759 0 obj <> endobj 2768 0 obj <> endobj 2771 0 obj <> endobj 2772 0 obj <> endobj 2770 0 obj <> /K[2771 0 R 27 2772 0 R 29 30 31 32 33 34 ] >> endobj 2774 0 obj <> endobj 2773 0 obj <> /K[2774 0 R ] >> endobj 2776 0 obj <> endobj 2775 0 obj <> /K[2776 0 R ] >> endobj 2778 0 obj <> endobj 2777 0 obj <> /K[2778 0 R ] >> endobj 2780 0 obj <> endobj 2779 0 obj <> /K[2780 0 R ] >> endobj 2782 0 obj <> endobj 2781 0 obj <> /K[2782 0 R ] >> endobj 2784 0 obj <> endobj 2783 0 obj <> /K[2784 0 R ] >> endobj 2786 0 obj <> endobj 2785 0 obj <> /K[2786 0 R ] >> endobj 2788 0 obj <> endobj 2787 0 obj <> /K[2788 0 R ] >> endobj 2790 0 obj <> endobj 2789 0 obj <> /K[43 44 2790 0 R 46 47 48 49 50 51 52 53 54 ] >> endobj 2769 0 obj <> endobj 2767 0 obj <> endobj 2792 0 obj <> endobj 2795 0 obj <> endobj 2794 0 obj <> /K[2795 0 R 57 58 59 60 61 62 63 <> <> ] >> endobj 2793 0 obj <> endobj 2791 0 obj <> endobj 2800 0 obj <> endobj 2803 0 obj <> endobj 2802 0 obj <> /K[2803 0 R 4 5 6 ] >> endobj 2805 0 obj <> endobj 2804 0 obj <> /K[2805 0 R ] >> endobj 2806 0 obj <> /K[8 ] >> endobj 2808 0 obj <> endobj 2807 0 obj <> /K[2808 0 R ] >> endobj 2810 0 obj <> endobj 2809 0 obj <> /K[2810 0 R ] >> endobj 2812 0 obj <> endobj 2811 0 obj <> /K[11 2812 0 R 13 ] >> endobj 2814 0 obj <> endobj 2813 0 obj <> /K[2814 0 R ] >> endobj 2815 0 obj <> /K[15 ] >> endobj 2817 0 obj <> endobj 2816 0 obj <> /K[2817 0 R ] >> endobj 2819 0 obj <> endobj 2818 0 obj <> /K[2819 0 R ] >> endobj 2821 0 obj <> endobj 2822 0 obj <> endobj 2820 0 obj <> /K[18 2821 0 R 20 2822 0 R ] >> endobj 2801 0 obj <> endobj 2799 0 obj <> endobj 2708 0 obj <> /K[2709 0 R 2717 0 R 2723 0 R 2732 0 R 2738 0 R 2752 0 R 2759 0 R 2767 0 R 2791 0 R 2799 0 R ] >> endobj 2823 0 obj <> /K[22 ] >> endobj 2824 0 obj <> /K[23 ] >> endobj 2827 0 obj <> endobj 2830 0 obj <> ] >> endobj 2831 0 obj <> ] >> endobj 2829 0 obj <> /K[25 2830 0 R 2831 0 R 28 ] >> endobj 2828 0 obj <> endobj 2826 0 obj <> endobj 2833 0 obj <> endobj 2836 0 obj <> ] >> endobj 2835 0 obj <> /K[30 2836 0 R 32 ] >> endobj 2834 0 obj <> endobj 2832 0 obj <> endobj 2838 0 obj <> endobj 2840 0 obj <> /K[34 ] >> endobj 2839 0 obj <> endobj 2837 0 obj <> endobj 2842 0 obj <> endobj 2844 0 obj <> /K[36 37 ] >> endobj 2843 0 obj <> endobj 2841 0 obj <> endobj 2846 0 obj <> endobj 2848 0 obj <> /K[39 40 ] >> endobj 2847 0 obj <> endobj 2845 0 obj <> endobj 2825 0 obj <> /K[2826 0 R 2832 0 R 2837 0 R 2841 0 R 2845 0 R ] >> endobj 2849 0 obj <> /K[41 ] >> endobj 2852 0 obj <> endobj 2854 0 obj <> /K[43 44 45 ] >> endobj 2853 0 obj <> endobj 2851 0 obj <> endobj 2856 0 obj <> endobj 2858 0 obj <> /K[47 ] >> endobj 2857 0 obj <> endobj 2855 0 obj <> endobj 2860 0 obj <> endobj 2862 0 obj <> /K[49 ] >> endobj 2861 0 obj <> endobj 2859 0 obj <> endobj 2864 0 obj <> endobj 2867 0 obj <> endobj 2866 0 obj <> /K[51 2867 0 R 53 ] >> endobj 2865 0 obj <> endobj 2863 0 obj <> endobj 2869 0 obj <> endobj 2872 0 obj <> endobj 2871 0 obj <> /K[55 2872 0 R 57 ] >> endobj 2870 0 obj <> endobj 2868 0 obj <> endobj 2877 0 obj <> endobj 2879 0 obj <> /K[1 ] >> endobj 2878 0 obj <> endobj 2876 0 obj <> endobj 2881 0 obj <> endobj 2883 0 obj <> /K[3 ] >> endobj 2882 0 obj <> endobj 2880 0 obj <> endobj 2850 0 obj <> /K[2851 0 R 2855 0 R 2859 0 R 2863 0 R 2868 0 R 2876 0 R 2880 0 R ] >> endobj 2884 0 obj <> /K[4 5 ] >> endobj 2886 0 obj <> ] >> endobj 2887 0 obj <> ] >> endobj 2885 0 obj <> /K[6 2886 0 R 8 2887 0 R 10 ] >> endobj 2888 0 obj <> /K[11 ] >> endobj 2889 0 obj <> /K[12 13 14 ] >> endobj 2890 0 obj <> /K[15 ] >> endobj 2893 0 obj <> endobj 2895 0 obj <> /K[17 ] >> endobj 2894 0 obj <> endobj 2892 0 obj <> endobj 2897 0 obj <> endobj 2899 0 obj <> /K[19 ] >> endobj 2898 0 obj <> endobj 2896 0 obj <> endobj 2901 0 obj <> endobj 2904 0 obj <> endobj 2903 0 obj <> /K[21 2904 0 R 23 ] >> endobj 2902 0 obj <> endobj 2900 0 obj <> endobj 2906 0 obj <> endobj 2908 0 obj <> /K[25 ] >> endobj 2907 0 obj <> endobj 2905 0 obj <> endobj 2910 0 obj <> endobj 2913 0 obj <> endobj 2912 0 obj <> /K[27 2913 0 R 30 ] >> endobj 2911 0 obj <> endobj 2909 0 obj <> endobj 2915 0 obj <> endobj 2918 0 obj <> endobj 2917 0 obj <> /K[32 2918 0 R 34 ] >> endobj 2916 0 obj <> endobj 2914 0 obj <> endobj 2920 0 obj <> endobj 2923 0 obj <> endobj 2924 0 obj <> endobj 2925 0 obj <> endobj 2926 0 obj <> endobj 2922 0 obj <> /K[36 37 38 39 2923 0 R 41 42 2924 0 R 44 2925 0 R 46 2926 0 R 48 49 ] >> endobj 2921 0 obj <> endobj 2919 0 obj <> endobj 2891 0 obj <> /K[2892 0 R 2896 0 R 2900 0 R 2905 0 R 2909 0 R 2914 0 R 2919 0 R ] >> endobj 2927 0 obj <> /K[50 ] >> endobj 2930 0 obj <> endobj 2932 0 obj <> /K[52 ] >> endobj 2931 0 obj <> endobj 2929 0 obj <> endobj 2934 0 obj <> endobj 2937 0 obj <> endobj 2936 0 obj <> /K[54 2937 0 R 56 ] >> endobj 2935 0 obj <> endobj 2933 0 obj <> endobj 2939 0 obj <> endobj 2942 0 obj <> endobj 2941 0 obj <> /K[58 2942 0 R 60 ] >> endobj 2940 0 obj <> endobj 2938 0 obj <> endobj 2944 0 obj <> endobj 2946 0 obj <> /K[62 ] >> endobj 2945 0 obj <> endobj 2943 0 obj <> endobj 2948 0 obj <> endobj 2950 0 obj <> /K[64 ] >> endobj 2949 0 obj <> endobj 2947 0 obj <> endobj 2952 0 obj <> endobj 2954 0 obj <> /K[66 ] >> endobj 2953 0 obj <> endobj 2951 0 obj <> endobj 2928 0 obj <> /K[2929 0 R 2933 0 R 2938 0 R 2943 0 R 2947 0 R 2951 0 R ] >> endobj 2955 0 obj <> /K[67 ] >> endobj 2958 0 obj <> endobj 2960 0 obj <> /K[69 ] >> endobj 2959 0 obj <> endobj 2957 0 obj <> endobj 2962 0 obj <> endobj 2965 0 obj <> endobj 2964 0 obj <> /K[71 2965 0 R 73 ] >> endobj 2963 0 obj <> endobj 2961 0 obj <> endobj 2967 0 obj <> endobj 2970 0 obj <> endobj 2969 0 obj <> /K[75 2970 0 R 77 ] >> endobj 2968 0 obj <> endobj 2966 0 obj <> endobj 2972 0 obj <> endobj 2975 0 obj <> endobj 2974 0 obj <> /K[79 2975 0 R 81 ] >> endobj 2973 0 obj <> endobj 2971 0 obj <> endobj 2977 0 obj <> endobj 2980 0 obj <> endobj 2979 0 obj <> /K[83 2980 0 R 85 ] >> endobj 2978 0 obj <> endobj 2976 0 obj <> endobj 2982 0 obj <> endobj 2984 0 obj <> /K[87 ] >> endobj 2983 0 obj <> endobj 2981 0 obj <> endobj 2956 0 obj <> /K[2957 0 R 2961 0 R 2966 0 R 2971 0 R 2976 0 R 2981 0 R ] >> endobj 2988 0 obj <> /K[0 ] >> endobj 2990 0 obj <> endobj 2989 0 obj <> /K[1 2990 0 R 3 4 5 ] >> endobj 2992 0 obj <> endobj 2991 0 obj <> /K[6 2992 0 R 8 ] >> endobj 2994 0 obj <> endobj 2993 0 obj <> /K[2994 0 R ] >> endobj 2996 0 obj <> endobj 2995 0 obj <> /K[2996 0 R ] >> endobj 2997 0 obj <> /K[11 12 ] >> endobj 2999 0 obj <> endobj 2998 0 obj <> /K[13 14 15 2999 0 R 17 18 ] >> endobj 3000 0 obj <> /K[19 20 ] >> endobj 3001 0 obj <> /K[21 22 23 24 25 ] >> endobj 3002 0 obj <> /K[26 ] >> endobj 3004 0 obj <> endobj 3003 0 obj <> /K[27 28 3004 0 R 30 ] >> endobj 3005 0 obj <> /K[31 ] >> endobj 3008 0 obj <> endobj 3011 0 obj <> endobj 3010 0 obj <> /K[33 3011 0 R 35 ] >> endobj 3009 0 obj <> endobj 3007 0 obj <> endobj 3013 0 obj <> endobj 3015 0 obj <> /K[37 ] >> endobj 3014 0 obj <> endobj 3012 0 obj <> endobj 3017 0 obj <> endobj 3019 0 obj <> /K[39 ] >> endobj 3018 0 obj <> endobj 3016 0 obj <> endobj 3021 0 obj <> endobj 3024 0 obj <> endobj 3023 0 obj <> /K[3024 0 R 42 ] >> endobj 3022 0 obj <> endobj 3020 0 obj <> endobj 3006 0 obj <> /K[3007 0 R 3012 0 R 3016 0 R 3020 0 R ] >> endobj 3025 0 obj <> /K[43 ] >> endobj 3028 0 obj <> endobj 3031 0 obj <> endobj 3030 0 obj <> /K[45 3031 0 R 47 ] >> endobj 3029 0 obj <> endobj 3027 0 obj <> endobj 3033 0 obj <> endobj 3035 0 obj <> /K[49 ] >> endobj 3034 0 obj <> endobj 3032 0 obj <> endobj 3037 0 obj <> endobj 3039 0 obj <> /K[51 ] >> endobj 3038 0 obj <> endobj 3036 0 obj <> endobj 3041 0 obj <> endobj 3044 0 obj <> endobj 3043 0 obj <> /K[3044 0 R 54 ] >> endobj 3042 0 obj <> endobj 3040 0 obj <> endobj 3026 0 obj <> /K[3027 0 R 3032 0 R 3036 0 R 3040 0 R ] >> endobj 3045 0 obj <> /K[55 ] >> endobj 3050 0 obj <> ] >> endobj 3051 0 obj <> ] >> endobj 3052 0 obj <> ] >> endobj 3049 0 obj <> /K[0 3050 0 R 2 3051 0 R 4 3052 0 R 6 ] >> endobj 3053 0 obj <> /K[7 ] >> endobj 3056 0 obj <> endobj 3059 0 obj <> endobj 3058 0 obj <> /K[3059 0 R 10 ] >> endobj 3062 0 obj <> endobj 3065 0 obj <> endobj 3064 0 obj <> /K[12 3065 0 R 14 ] >> endobj 3063 0 obj <> endobj 3061 0 obj <> endobj 3067 0 obj <> endobj 3070 0 obj <> endobj 3069 0 obj <> /K[16 3070 0 R 18 ] >> endobj 3068 0 obj <> endobj 3066 0 obj <> endobj 3060 0 obj <> /K[3061 0 R 3066 0 R ] >> endobj 3057 0 obj <> endobj 3055 0 obj <> endobj 3072 0 obj <> endobj 3075 0 obj <> endobj 3074 0 obj <> /K[3075 0 R 21 ] >> endobj 3078 0 obj <> endobj 3081 0 obj <> ] >> endobj 3082 0 obj <> ] >> endobj 3080 0 obj <> /K[23 3081 0 R 3082 0 R 26 ] >> endobj 3079 0 obj <> endobj 3077 0 obj <> endobj 3076 0 obj <> /K[3077 0 R ] >> endobj 3073 0 obj <> endobj 3071 0 obj <> endobj 3084 0 obj <> endobj 3087 0 obj <> endobj 3086 0 obj <> /K[3087 0 R 29 ] >> endobj 3090 0 obj <> endobj 3093 0 obj <> endobj 3092 0 obj <> /K[31 3093 0 R 33 ] >> endobj 3091 0 obj <> endobj 3089 0 obj <> endobj 3088 0 obj <> /K[3089 0 R ] >> endobj 3085 0 obj <> endobj 3083 0 obj <> endobj 3095 0 obj <> endobj 3098 0 obj <> endobj 3097 0 obj <> /K[3098 0 R 36 ] >> endobj 3101 0 obj <> endobj 3104 0 obj <> endobj 3103 0 obj <> /K[38 3104 0 R 40 ] >> endobj 3102 0 obj <> endobj 3100 0 obj <> endobj 3106 0 obj <> endobj 3109 0 obj <> endobj 3108 0 obj <> /K[42 3109 0 R 44 ] >> endobj 3107 0 obj <> endobj 3105 0 obj <> endobj 3111 0 obj <> endobj 3114 0 obj <> endobj 3113 0 obj <> /K[46 3114 0 R 48 ] >> endobj 3112 0 obj <> endobj 3110 0 obj <> endobj 3116 0 obj <> endobj 3119 0 obj <> endobj 3118 0 obj <> /K[50 3119 0 R 52 ] >> endobj 3117 0 obj <> endobj 3115 0 obj <> endobj 3121 0 obj <> endobj 3124 0 obj <> endobj 3123 0 obj <> /K[54 3124 0 R 56 ] >> endobj 3122 0 obj <> endobj 3120 0 obj <> endobj 3099 0 obj <> /K[3100 0 R 3105 0 R 3110 0 R 3115 0 R 3120 0 R ] >> endobj 3096 0 obj <> endobj 3094 0 obj <> endobj 3126 0 obj <> endobj 3129 0 obj <> endobj 3128 0 obj <> /K[3129 0 R 59 ] >> endobj 3132 0 obj <> endobj 3135 0 obj <> endobj 3134 0 obj <> /K[61 3135 0 R 63 ] >> endobj 3133 0 obj <> endobj 3131 0 obj <> endobj 3137 0 obj <> endobj 3140 0 obj <> endobj 3139 0 obj <> /K[65 3140 0 R 67 ] >> endobj 3138 0 obj <> endobj 3136 0 obj <> endobj 3142 0 obj <> endobj 3145 0 obj <> endobj 3144 0 obj <> /K[69 3145 0 R 71 ] >> endobj 3143 0 obj <> endobj 3141 0 obj <> endobj 3147 0 obj <> endobj 3150 0 obj <> endobj 3149 0 obj <> /K[73 3150 0 R 75 ] >> endobj 3148 0 obj <> endobj 3146 0 obj <> endobj 3130 0 obj <> /K[3131 0 R 3136 0 R 3141 0 R 3146 0 R ] >> endobj 3127 0 obj <> endobj 3125 0 obj <> endobj 3152 0 obj <> endobj 3155 0 obj <> endobj 3154 0 obj <> /K[3155 0 R 78 ] >> endobj 3158 0 obj <> endobj 3161 0 obj <> endobj 3160 0 obj <> /K[80 3161 0 R 82 ] >> endobj 3159 0 obj <> endobj 3157 0 obj <> endobj 3163 0 obj <> endobj 3166 0 obj <> endobj 3165 0 obj <> /K[84 3166 0 R 86 ] >> endobj 3164 0 obj <> endobj 3162 0 obj <> endobj 3168 0 obj <> endobj 3171 0 obj <> endobj 3170 0 obj <> /K[88 3171 0 R 90 ] >> endobj 3169 0 obj <> endobj 3167 0 obj <> endobj 3173 0 obj <> endobj 3176 0 obj <> endobj 3175 0 obj <> /K[92 3176 0 R 94 ] >> endobj 3174 0 obj <> endobj 3172 0 obj <> endobj 3156 0 obj <> /K[3157 0 R 3162 0 R 3167 0 R 3172 0 R ] >> endobj 3153 0 obj <> endobj 3151 0 obj <> endobj 3178 0 obj <> endobj 3181 0 obj <> endobj 3180 0 obj <> /K[3181 0 R 97 ] >> endobj 3184 0 obj <> endobj 3187 0 obj <> endobj 3186 0 obj <> /K[99 3187 0 R 101 ] >> endobj 3185 0 obj <> endobj 3183 0 obj <> endobj 3182 0 obj <> /K[3183 0 R ] >> endobj 3179 0 obj <> endobj 3177 0 obj <> endobj 3189 0 obj <> endobj 3192 0 obj <> endobj 3191 0 obj <> /K[3192 0 R 104 ] >> endobj 3195 0 obj <> endobj 3198 0 obj <> endobj 3197 0 obj <> /K[106 3198 0 R 108 ] >> endobj 3196 0 obj <> endobj 3194 0 obj <> endobj 3193 0 obj <> /K[3194 0 R ] >> endobj 3190 0 obj <> endobj 3188 0 obj <> endobj 3200 0 obj <> endobj 3203 0 obj <> endobj 3202 0 obj <> /K[3203 0 R 111 ] >> endobj 3206 0 obj <> endobj 3209 0 obj <> endobj 3208 0 obj <> /K[113 3209 0 R 115 116 ] >> endobj 3207 0 obj <> endobj 3205 0 obj <> endobj 3211 0 obj <> endobj 3214 0 obj <> endobj 3213 0 obj <> /K[118 3214 0 R 120 ] >> endobj 3212 0 obj <> endobj 3210 0 obj <> endobj 3204 0 obj <> /K[3205 0 R 3210 0 R ] >> endobj 3201 0 obj <> endobj 3199 0 obj <> endobj 3216 0 obj <> endobj 3219 0 obj <> endobj 3218 0 obj <> /K[3219 0 R 123 ] >> endobj 3222 0 obj <> endobj 3224 0 obj <> /K[125 ] >> endobj 3223 0 obj <> endobj 3221 0 obj <> endobj 3220 0 obj <> /K[3221 0 R ] >> endobj 3217 0 obj <> endobj 3215 0 obj <> endobj 3054 0 obj <> /K[3055 0 R 3071 0 R 3083 0 R 3094 0 R 3125 0 R 3151 0 R 3177 0 R 3188 0 R 3199 0 R 3215 0 R ] >> endobj 3225 0 obj <> /K[126 ] >> endobj 3227 0 obj <> ] >> endobj 3228 0 obj <> endobj 3226 0 obj <> /K[127 128 3227 0 R 130 3228 0 R 132 133 ] >> endobj 3229 0 obj <> /K[134 135 ] >> endobj 3234 0 obj <> endobj 3233 0 obj <> /K[3234 0 R ] >> endobj 3236 0 obj <> endobj 3235 0 obj <> /K[3236 0 R ] >> endobj 3238 0 obj <> endobj 3237 0 obj <> /K[3238 0 R ] >> endobj 3240 0 obj <> endobj 3239 0 obj <> /K[3240 0 R ] >> endobj 3242 0 obj <> endobj 3241 0 obj <> /K[3242 0 R ] >> endobj 3244 0 obj <> endobj 3243 0 obj <> /K[3244 0 R ] >> endobj 3246 0 obj <> ] >> endobj 3245 0 obj <> /K[6 7 8 9 3246 0 R 11 ] >> endobj 3248 0 obj <> endobj 3247 0 obj <> /K[3248 0 R ] >> endobj 3251 0 obj <> endobj 3253 0 obj <> /K[14 15 ] >> endobj 3252 0 obj <> endobj 3250 0 obj <> endobj 3255 0 obj <> endobj 3257 0 obj <> /K[17 18 19 20 21 22 23 ] >> endobj 3256 0 obj <> endobj 3254 0 obj <> endobj 3259 0 obj <> endobj 3261 0 obj <> /K[25 26 27 ] >> endobj 3260 0 obj <> endobj 3258 0 obj <> endobj 3263 0 obj <> endobj 3266 0 obj <> endobj 3265 0 obj <> /K[29 30 3266 0 R 33 34 35 36 ] >> endobj 3264 0 obj <> endobj 3262 0 obj <> endobj 3268 0 obj <> endobj 3271 0 obj <> endobj 3272 0 obj <> endobj 3273 0 obj <> endobj 3274 0 obj <> endobj 3270 0 obj <> /K[3271 0 R 40 3272 0 R 42 3273 0 R 44 45 46 3274 0 R 48 ] >> endobj 3269 0 obj <> endobj 3267 0 obj <> endobj 3276 0 obj <> endobj 3279 0 obj <> endobj 3280 0 obj <> endobj 3278 0 obj <> /K[3279 0 R 52 53 54 3280 0 R 64 ] >> endobj 3277 0 obj <> endobj 3275 0 obj <> endobj 3282 0 obj <> endobj 3284 0 obj <> /K[66 67 ] >> endobj 3283 0 obj <> endobj 3281 0 obj <> endobj 3249 0 obj <> /K[3250 0 R 3254 0 R 3258 0 R 3262 0 R 3267 0 R 3275 0 R 3281 0 R ] >> endobj 3286 0 obj <> endobj 3285 0 obj <> /K[3286 0 R ] >> endobj 3288 0 obj <> endobj 3287 0 obj <> /K[3288 0 R ] >> endobj 3290 0 obj <> endobj 3289 0 obj <> /K[3290 0 R ] >> endobj 3292 0 obj <> endobj 3291 0 obj <> /K[3292 0 R ] >> endobj 3294 0 obj <> endobj 3293 0 obj <> /K[3294 0 R ] >> endobj 3300 0 obj <> endobj 3303 0 obj <> endobj 3302 0 obj <> /K[1 3303 0 R 3 ] >> endobj 3301 0 obj <> endobj 3299 0 obj <> endobj 3305 0 obj <> endobj 3307 0 obj <> /K[5 ] >> endobj 3306 0 obj <> endobj 3304 0 obj <> endobj 3298 0 obj <> /K[3299 0 R 3304 0 R ] >> endobj 3308 0 obj <> /K[6 ] >> endobj 3309 0 obj <> /K[7 ] >> endobj 3311 0 obj <> /K[8 ] >> endobj 3310 0 obj <> /K[3311 0 R ] >> endobj 3312 0 obj <> /K[9 10 ] >> endobj 3314 0 obj <> endobj 3315 0 obj <> endobj 3313 0 obj <> /K[11 3314 0 R 13 14 15 16 3315 0 R 18 ] >> endobj 3317 0 obj <> endobj 3316 0 obj <> /K[19 20 21 3317 0 R 23 24 ] >> endobj 3319 0 obj <> endobj 3320 0 obj <> endobj 3321 0 obj <> endobj 3322 0 obj <> endobj 3323 0 obj <> endobj 3318 0 obj <> /K[25 3319 0 R 27 3320 0 R 29 3321 0 R 31 3322 0 R 33 3323 0 R 35 36 ] >> endobj 3325 0 obj <> endobj 3326 0 obj <> endobj 3327 0 obj <> endobj 3324 0 obj <> /K[37 3325 0 R 39 40 41 3326 0 R 43 3327 0 R 45 46 ] >> endobj 3329 0 obj <> endobj 3328 0 obj <> /K[47 3329 0 R 49 50 ] >> endobj 3330 0 obj <> /K[51 ] >> endobj 3332 0 obj <> /K[52 ] >> endobj 3331 0 obj <> /K[3332 0 R ] >> endobj 3334 0 obj <> endobj 3335 0 obj <> endobj 3333 0 obj <> /K[53 54 55 56 57 58 3334 0 R 60 61 3335 0 R 63 ] >> endobj 3340 0 obj <> endobj 3336 0 obj <> /K[64 <> 3340 0 R <> ] >> endobj 3342 0 obj <> ] >> endobj 3343 0 obj <> ] >> endobj 3341 0 obj <> /K[4 5 3342 0 R 7 8 3343 0 R 10 ] >> endobj 3344 0 obj <> /K[11 ] >> endobj 3346 0 obj <> /K[12 ] >> endobj 3345 0 obj <> /K[3346 0 R ] >> endobj 3347 0 obj <> /K[13 14 15 ] >> endobj 3348 0 obj <> /K[16 17 18 ] >> endobj 3349 0 obj <> /K[19 20 21 22 ] >> endobj 3350 0 obj <> /K[23 ] >> endobj 3352 0 obj <> /K[24 ] >> endobj 3351 0 obj <> /K[3352 0 R ] >> endobj 3353 0 obj <> /K[25 26 27 ] >> endobj 3354 0 obj <> /K[28 29 30 ] >> endobj 3355 0 obj <> /K[31 32 33 34 ] >> endobj 3356 0 obj <> /K[35 ] >> endobj 3358 0 obj <> /K[36 ] >> endobj 3357 0 obj <> /K[3358 0 R ] >> endobj 3359 0 obj <> /K[37 38 39 40 ] >> endobj 3363 0 obj <> /K[0 1 2 ] >> endobj 3364 0 obj <> /K[3 4 5 6 7 ] >> endobj 3365 0 obj <> /K[8 ] >> endobj 3367 0 obj <> /K[9 ] >> endobj 3366 0 obj <> /K[3367 0 R ] >> endobj 3368 0 obj <> /K[10 11 12 13 14 ] >> endobj 3370 0 obj <> endobj 3371 0 obj <> endobj 3372 0 obj <> endobj 3373 0 obj <> endobj 3374 0 obj <> endobj 3369 0 obj <> /K[15 16 17 18 3370 0 R 20 21 3371 0 R 23 3372 0 R 25 26 3373 0 R 28 29 3374 0 R 32 33 ] >> endobj 3376 0 obj <> endobj 3375 0 obj <> /K[34 3376 0 R 36 37 38 39 40 41 42 ] >> endobj 3378 0 obj <> ] >> endobj 3379 0 obj <> ] >> endobj 3380 0 obj <> ] >> endobj 3377 0 obj <> /K[43 3378 0 R 45 3379 0 R 47 3380 0 R 49 ] >> endobj 3381 0 obj <> /K[50 ] >> endobj 3383 0 obj <> /K[51 ] >> endobj 3382 0 obj <> /K[3383 0 R ] >> endobj 3385 0 obj <> endobj 3384 0 obj <> /K[52 3385 0 R 54 55 56 57 ] >> endobj 3389 0 obj <> /K[0 1 2 3 4 ] >> endobj 3390 0 obj <> /K[5 6 7 8 9 ] >> endobj 3392 0 obj <> endobj 3391 0 obj <> /K[10 3392 0 R 12 13 14 15 16 17 ] >> endobj 3394 0 obj <> ] >> endobj 3393 0 obj <> /K[18 3394 0 R 20 ] >> endobj 3395 0 obj <> /K[21 ] >> endobj 3397 0 obj <> /K[22 ] >> endobj 3396 0 obj <> /K[3397 0 R ] >> endobj 3399 0 obj <> ] >> endobj 3400 0 obj <> ] >> endobj 3398 0 obj <> /K[23 3399 0 R 25 26 27 28 3400 0 R 30 31 32 33 ] >> endobj 3402 0 obj <> endobj 3403 0 obj <> endobj 3404 0 obj <> endobj 3405 0 obj <> endobj 3401 0 obj <> /K[34 3402 0 R 36 3403 0 R 38 39 40 41 42 3404 0 R 44 3405 0 R 46 47 ] >> endobj 3406 0 obj <> /K[48 49 50 51 52 53 54 ] >> endobj 3411 0 obj <> endobj 3410 0 obj <> /K[0 3411 0 R 2 3 4 5 6 ] >> endobj 3413 0 obj <> ] >> endobj 3414 0 obj <> ] >> endobj 3412 0 obj <> /K[7 3413 0 R 9 3414 0 R 11 ] >> endobj 3415 0 obj <> /K[12 ] >> endobj 3417 0 obj <> /K[13 ] >> endobj 3416 0 obj <> /K[3417 0 R ] >> endobj 3418 0 obj <> /K[14 15 16 17 18 19 ] >> endobj 3420 0 obj <> endobj 3421 0 obj <> endobj 3419 0 obj <> /K[20 21 22 23 24 3420 0 R 27 3421 0 R 29 ] >> endobj 3422 0 obj <> /K[30 31 32 33 34 ] >> endobj 3424 0 obj <> ] >> endobj 3423 0 obj <> /K[35 36 37 38 3424 0 R 40 ] >> endobj 3426 0 obj <> ] >> endobj 3427 0 obj <> ] >> endobj 3425 0 obj <> /K[41 3426 0 R 43 3427 0 R 45 ] >> endobj 3428 0 obj <> /K[46 ] >> endobj 3430 0 obj <> /K[47 ] >> endobj 3429 0 obj <> /K[3430 0 R ] >> endobj 3431 0 obj <> /K[48 49 50 51 52 ] >> endobj 3436 0 obj <> endobj 3435 0 obj <> /K[0 1 2 3 3436 0 R 5 6 ] >> endobj 3438 0 obj <> endobj 3439 0 obj <> endobj 3437 0 obj <> /K[7 3438 0 R 9 3439 0 R 11 12 13 14 15 16 ] >> endobj 3441 0 obj <> ] >> endobj 3440 0 obj <> /K[17 3441 0 R 19 ] >> endobj 3442 0 obj <> /K[20 ] >> endobj 3444 0 obj <> /K[21 ] >> endobj 3443 0 obj <> /K[3444 0 R ] >> endobj 3446 0 obj <> endobj 3445 0 obj <> /K[22 3446 0 R 25 26 27 28 29 ] >> endobj 3448 0 obj <> endobj 3447 0 obj <> /K[30 3448 0 R 33 34 35 36 ] >> endobj 3450 0 obj <> endobj 3449 0 obj <> /K[37 38 39 40 3450 0 R 42 ] >> endobj 3451 0 obj <> /K[43 ] >> endobj 3453 0 obj <> /K[44 ] >> endobj 3452 0 obj <> /K[3453 0 R ] >> endobj 3455 0 obj <> endobj 3456 0 obj <> endobj 3457 0 obj <> endobj 3454 0 obj <> /K[45 46 3455 0 R 48 49 3456 0 R 51 3457 0 R 53 54 ] >> endobj 3459 0 obj <> endobj 3463 0 obj <> endobj 3464 0 obj <> endobj 3465 0 obj <> endobj 3458 0 obj <> /K[55 3459 0 R 57 <> <> <> 3463 0 R <> 3464 0 R <> 3465 0 R <> <> <> <> <> ] >> endobj 3466 0 obj <> /K[13 14 15 16 17 ] >> endobj 3468 0 obj <> ] >> endobj 3467 0 obj <> /K[18 3468 0 R 20 ] >> endobj 3469 0 obj <> /K[21 ] >> endobj 3471 0 obj <> /K[22 ] >> endobj 3470 0 obj <> /K[3471 0 R ] >> endobj 3473 0 obj <> endobj 3472 0 obj <> /K[23 24 25 3473 0 R 27 28 ] >> endobj 3474 0 obj <> /K[29 30 31 32 ] >> endobj 3475 0 obj <> /K[33 34 35 36 ] >> endobj 3476 0 obj <> /K[37 ] >> endobj 3478 0 obj <> /K[38 ] >> endobj 3477 0 obj <> /K[3478 0 R ] >> endobj 3479 0 obj <> /K[39 40 41 42 43 ] >> endobj 3480 0 obj <> /K[44 45 46 <> ] >> endobj 3484 0 obj <> /K[1 2 3 4 5 ] >> endobj 3485 0 obj <> /K[6 ] >> endobj 3487 0 obj <> /K[7 ] >> endobj 3486 0 obj <> /K[3487 0 R ] >> endobj 3488 0 obj <> /K[8 9 10 11 12 ] >> endobj 3489 0 obj <> /K[13 14 15 16 17 ] >> endobj 3490 0 obj <> /K[18 ] >> endobj 3492 0 obj <> /K[19 ] >> endobj 3491 0 obj <> /K[3492 0 R ] >> endobj 3494 0 obj <> endobj 3493 0 obj <> /K[20 21 22 3494 0 R 24 25 26 27 28 ] >> endobj 3495 0 obj <> /K[29 ] >> endobj 3497 0 obj <> /K[30 ] >> endobj 3496 0 obj <> /K[3497 0 R ] >> endobj 3498 0 obj <> /K[31 32 33 34 ] >> endobj 3499 0 obj <> /K[35 36 37 38 39 <> <> ] >> endobj 3504 0 obj <> endobj 3505 0 obj <> endobj 3506 0 obj <> endobj 3507 0 obj <> endobj 3508 0 obj <> endobj 3509 0 obj <> endobj 3510 0 obj <> endobj 3511 0 obj <> endobj 3512 0 obj <> endobj 3513 0 obj <> endobj 3514 0 obj <> endobj 3515 0 obj <> endobj 3503 0 obj <> /K[2 3504 0 R 4 3505 0 R 6 3506 0 R 8 9 3507 0 R 11 3508 0 R 13 14 3509 0 R 16 3510 0 R 18 3511 0 R 20 21 3512 0 R 23 3513 0 R 25 3514 0 R 27 28 3515 0 R 30 ] >> endobj 3516 0 obj <> /K[31 ] >> endobj 3518 0 obj <> /K[32 ] >> endobj 3517 0 obj <> /K[3518 0 R ] >> endobj 3520 0 obj <> endobj 3521 0 obj <> endobj 3522 0 obj <> endobj 3523 0 obj <> endobj 3524 0 obj <> endobj 3519 0 obj <> /K[33 3520 0 R 35 3521 0 R 37 38 39 40 41 3522 0 R 43 3523 0 R 45 46 47 3524 0 R 49 50 ] >> endobj 3526 0 obj <> endobj 3525 0 obj <> /K[51 52 53 3526 0 R 55 56 57 ] >> endobj 3527 0 obj <> /K[58 59 60 61 62 63 ] >> endobj 3529 0 obj <> endobj 3530 0 obj <> endobj 3531 0 obj <> endobj 3532 0 obj <> endobj 3528 0 obj <> /K[64 3529 0 R 66 67 68 69 70 3530 0 R 72 73 3531 0 R 75 76 3532 0 R 78 79 ] >> endobj 3533 0 obj <> /K[80 81 82 83 84 ] >> endobj 3537 0 obj <> /K[0 ] >> endobj 3539 0 obj <> /K[1 ] >> endobj 3538 0 obj <> /K[3539 0 R ] >> endobj 3540 0 obj <> /K[2 3 ] >> endobj 3542 0 obj <> endobj 3541 0 obj <> /K[4 5 6 3542 0 R 8 9 ] >> endobj 3544 0 obj <> endobj 3545 0 obj <> endobj 3543 0 obj <> /K[10 11 3544 0 R 13 14 15 16 3545 0 R 18 ] >> endobj 3546 0 obj <> /K[19 ] >> endobj 3548 0 obj <> /K[20 ] >> endobj 3547 0 obj <> /K[3548 0 R ] >> endobj 3550 0 obj <> ] >> endobj 3551 0 obj <> ] >> endobj 3552 0 obj <> endobj 3553 0 obj <> endobj 3554 0 obj <> endobj 3549 0 obj <> /K[21 22 23 3550 0 R 3551 0 R 26 27 28 29 3552 0 R 31 32 33 34 3553 0 R 36 37 38 3554 0 R 40 ] >> endobj 3555 0 obj <> /K[41 ] >> endobj 3557 0 obj <> /K[42 ] >> endobj 3556 0 obj <> /K[3557 0 R ] >> endobj 3558 0 obj <> /K[43 44 45 46 47 ] >> endobj 3559 0 obj <> /K[48 49 50 51 <> ] >> endobj 3563 0 obj <> /K[1 2 3 4 5 ] >> endobj 3565 0 obj <> endobj 3566 0 obj <> endobj 3567 0 obj <> endobj 3568 0 obj <> endobj 3569 0 obj <> endobj 3570 0 obj <> endobj 3571 0 obj <> endobj 3572 0 obj <> endobj 3564 0 obj <> /K[6 3565 0 R 8 9 3566 0 R 11 12 3567 0 R 14 15 3568 0 R 3569 0 R 18 19 3570 0 R 21 22 3571 0 R 25 3572 0 R 27 28 ] >> endobj 3574 0 obj <> endobj 3573 0 obj <> /K[29 3574 0 R 31 32 33 ] >> endobj 3576 0 obj <> endobj 3577 0 obj <> endobj 3578 0 obj <> endobj 3575 0 obj <> /K[34 3576 0 R 36 37 38 3577 0 R 40 41 3578 0 R 43 44 ] >> endobj 3579 0 obj <> /K[45 ] >> endobj 3581 0 obj <> /K[46 ] >> endobj 3580 0 obj <> /K[3581 0 R ] >> endobj 3582 0 obj <> /K[47 48 49 50 ] >> endobj 3584 0 obj <> endobj 3585 0 obj <> endobj 3586 0 obj <> endobj 3583 0 obj <> /K[51 52 53 54 55 3584 0 R 57 58 3585 0 R 60 61 3586 0 R 63 ] >> endobj 3588 0 obj <> endobj 3587 0 obj <> /K[3588 0 R ] >> endobj 3590 0 obj <> endobj 3589 0 obj <> /K[3590 0 R ] >> endobj 3595 0 obj <> endobj 3594 0 obj <> /K[3595 0 R ] >> endobj 3597 0 obj <> endobj 3596 0 obj <> /K[3597 0 R ] >> endobj 3599 0 obj <> endobj 3598 0 obj <> /K[3599 0 R ] >> endobj 3601 0 obj <> endobj 3600 0 obj <> /K[3601 0 R ] >> endobj 3603 0 obj <> endobj 3602 0 obj <> /K[3603 0 R ] >> endobj 3605 0 obj <> endobj 3604 0 obj <> /K[3605 0 R ] >> endobj 3607 0 obj <> endobj 3606 0 obj <> /K[3607 0 R ] >> endobj 3609 0 obj <> endobj 3608 0 obj <> /K[3609 0 R ] >> endobj 3611 0 obj <> endobj 3612 0 obj <> endobj 3610 0 obj <> /K[8 3611 0 R 10 11 3612 0 R 13 14 15 16 17 ] >> endobj 3614 0 obj <> endobj 3615 0 obj <> endobj 3613 0 obj <> /K[18 3614 0 R 20 21 3615 0 R 23 24 ] >> endobj 3617 0 obj <> endobj 3618 0 obj <> endobj 3619 0 obj <> endobj 3620 0 obj <> endobj 3616 0 obj <> /K[25 3617 0 R 27 28 3618 0 R 30 31 32 3619 0 R 34 35 3620 0 R 37 ] >> endobj 3622 0 obj <> endobj 3623 0 obj <> endobj 3621 0 obj <> /K[38 3622 0 R 40 41 42 43 44 45 46 47 48 3623 0 R 50 51 ] >> endobj 3624 0 obj <> /K[52 ] >> endobj 3626 0 obj <> /K[53 ] >> endobj 3625 0 obj <> /K[3626 0 R ] >> endobj 3627 0 obj <> /K[54 55 56 ] >> endobj 3628 0 obj <> /K[57 58 59 <> <> <> ] >> endobj 3632 0 obj <> /K[3 4 5 6 7 8 9 10 11 ] >> endobj 3633 0 obj <> /K[12 13 14 ] >> endobj 3634 0 obj <> /K[15 ] >> endobj 3636 0 obj <> /K[16 ] >> endobj 3635 0 obj <> /K[3636 0 R ] >> endobj 3637 0 obj <> /K[17 18 19 ] >> endobj 3638 0 obj <> /K[20 21 22 23 24 ] >> endobj 3640 0 obj <> endobj 3641 0 obj <> endobj 3642 0 obj <> endobj 3639 0 obj <> /K[25 26 3640 0 R 28 29 3641 0 R 31 3642 0 R 33 34 ] >> endobj 3643 0 obj <> /K[35 ] >> endobj 4 0 obj <> endobj 4042 0 obj <> /K[4 0 R ] >> endobj 4043 0 obj <> endobj 3895 0 obj <> endobj 3644 0 obj <> endobj 3645 0 obj <> endobj 3646 0 obj <> endobj 3647 0 obj <> endobj 3648 0 obj <> endobj 3649 0 obj <> endobj 3650 0 obj <> endobj 3651 0 obj <> /StructParent 300>> endobj 3652 0 obj <> endobj 3653 0 obj <> endobj 3654 0 obj <> endobj 3655 0 obj <> endobj 3656 0 obj <> endobj 3657 0 obj <> endobj 3658 0 obj <> endobj 3659 0 obj <> endobj 3660 0 obj <> endobj 3661 0 obj <> endobj 3662 0 obj <> /StructParent 289>> endobj 3663 0 obj <> endobj 3664 0 obj <> /StructParent 287>> endobj 3665 0 obj <> /StructParent 286>> endobj 3666 0 obj <> endobj 3667 0 obj <> endobj 3668 0 obj <> endobj 3669 0 obj <> endobj 3670 0 obj <> endobj 3671 0 obj <> endobj 3672 0 obj <> endobj 3673 0 obj <> endobj 3674 0 obj <> endobj 3675 0 obj <> endobj 3676 0 obj <> endobj 3677 0 obj <> /StructParent 274>> endobj 3678 0 obj <> endobj 3679 0 obj <> endobj 3680 0 obj <> endobj 3681 0 obj <> endobj 3682 0 obj <> endobj 3683 0 obj <> endobj 3684 0 obj <> /StructParent 267>> endobj 3685 0 obj <> endobj 3686 0 obj <> endobj 3687 0 obj <> endobj 3688 0 obj <> endobj 3689 0 obj <> /StructParent 262>> endobj 3690 0 obj <> /StructParent 261>> endobj 3691 0 obj <> /StructParent 260>> endobj 3692 0 obj <> /StructParent 259>> endobj 3693 0 obj <> endobj 3694 0 obj <> endobj 3695 0 obj <> endobj 3696 0 obj <> endobj 3697 0 obj <> endobj 3698 0 obj <> endobj 3699 0 obj <> endobj 3700 0 obj <> endobj 3701 0 obj <> endobj 3702 0 obj <> endobj 3703 0 obj <> endobj 3704 0 obj <> endobj 3705 0 obj <> endobj 3706 0 obj <> endobj 3707 0 obj <> endobj 3708 0 obj <> endobj 3709 0 obj <> endobj 3710 0 obj <> /StructParent 241>> endobj 3711 0 obj <> endobj 3712 0 obj <> endobj 3713 0 obj <> endobj 3714 0 obj <> endobj 3715 0 obj <> endobj 3716 0 obj <> endobj 3717 0 obj <> /StructParent 234>> endobj 3718 0 obj <> endobj 3719 0 obj <> endobj 3720 0 obj <> /StructParent 231>> endobj 3721 0 obj <> endobj 3722 0 obj <> endobj 3723 0 obj <> endobj 3724 0 obj <> /StructParent 227>> endobj 3725 0 obj <> endobj 3726 0 obj <> endobj 3727 0 obj <> endobj 3728 0 obj <> endobj 3729 0 obj <> endobj 3730 0 obj <> endobj 3731 0 obj <> endobj 3732 0 obj <> endobj 3733 0 obj <> endobj 3734 0 obj <> endobj 3735 0 obj <> endobj 3736 0 obj <> endobj 3737 0 obj <> endobj 3738 0 obj <> /StructParent 213>> endobj 3739 0 obj <> endobj 3740 0 obj <> endobj 3741 0 obj <> endobj 3742 0 obj <> endobj 3743 0 obj <> endobj 3744 0 obj <> /StructParent 207>> endobj 3745 0 obj <> endobj 3746 0 obj <> endobj 3747 0 obj <> endobj 3748 0 obj <> /StructParent 203>> endobj 3749 0 obj <> endobj 3750 0 obj <> endobj 3751 0 obj <> /StructParent 200>> endobj 3752 0 obj <> /StructParent 199>> endobj 3753 0 obj <> /StructParent 198>> endobj 3754 0 obj <> endobj 3755 0 obj <> /StructParent 196>> endobj 3756 0 obj <> /StructParent 195>> endobj 3757 0 obj <> endobj 3758 0 obj <> /StructParent 193>> endobj 3759 0 obj <> /StructParent 192>> endobj 3760 0 obj <> /StructParent 191>> endobj 3761 0 obj <> /StructParent 190>> endobj 3762 0 obj <> /StructParent 189>> endobj 3763 0 obj <> /StructParent 188>> endobj 3764 0 obj <> endobj 3765 0 obj <> endobj 3766 0 obj <> /StructParent 185>> endobj 3767 0 obj <> /StructParent 184>> endobj 3768 0 obj <> /StructParent 183>> endobj 3769 0 obj <> /StructParent 182>> endobj 3770 0 obj <> /StructParent 181>> endobj 3771 0 obj <> endobj 3772 0 obj <> endobj 3773 0 obj <> endobj 3774 0 obj <> endobj 3775 0 obj <> endobj 3776 0 obj <> endobj 3777 0 obj <> endobj 3778 0 obj <> endobj 3779 0 obj <> endobj 3780 0 obj <> endobj 3781 0 obj <> endobj 3782 0 obj <> endobj 3783 0 obj <> endobj 3784 0 obj <> endobj 3785 0 obj <> endobj 3786 0 obj <> endobj 3787 0 obj <> /StructParent 164>> endobj 3788 0 obj <> endobj 3789 0 obj <> endobj 3790 0 obj <> endobj 3791 0 obj <> endobj 3792 0 obj <> endobj 3793 0 obj <> endobj 3794 0 obj <> endobj 3795 0 obj <> endobj 3796 0 obj <> endobj 3797 0 obj <> endobj 3798 0 obj <> endobj 3799 0 obj <> endobj 3800 0 obj <> endobj 3801 0 obj <> endobj 3802 0 obj <> endobj 3803 0 obj <> endobj 3804 0 obj <> endobj 3805 0 obj <> endobj 3806 0 obj <> endobj 3807 0 obj <> endobj 3808 0 obj <> endobj 3809 0 obj <> endobj 3810 0 obj <> endobj 3811 0 obj <> endobj 3812 0 obj <> endobj 3813 0 obj <> endobj 3814 0 obj <> endobj 3815 0 obj <> endobj 3816 0 obj <> endobj 3817 0 obj <> endobj 3818 0 obj <> endobj 3819 0 obj <> endobj 3820 0 obj <> endobj 3821 0 obj <> endobj 3822 0 obj <> endobj 3823 0 obj <> endobj 3824 0 obj <> endobj 3825 0 obj <> endobj 3826 0 obj <> endobj 3827 0 obj <> endobj 3828 0 obj <> /StructParent 123>> endobj 3829 0 obj <> endobj 3830 0 obj <> endobj 3831 0 obj <> endobj 3832 0 obj <> endobj 3833 0 obj <> endobj 3834 0 obj <> endobj 3835 0 obj <> endobj 3836 0 obj <> endobj 3837 0 obj <> endobj 3838 0 obj <> endobj 3839 0 obj <> endobj 3840 0 obj <> endobj 3841 0 obj <> endobj 3842 0 obj <> endobj 3843 0 obj <> endobj 3844 0 obj <> endobj 3845 0 obj <> endobj 3846 0 obj <> endobj 3847 0 obj <> endobj 3848 0 obj <> endobj 3849 0 obj <> endobj 3850 0 obj <> endobj 3851 0 obj <> endobj 3852 0 obj <> endobj 3853 0 obj <> endobj 3854 0 obj <> endobj 3855 0 obj <> endobj 3856 0 obj <> endobj 3857 0 obj <> endobj 3858 0 obj <> endobj 3859 0 obj <> endobj 3860 0 obj <> endobj 3861 0 obj <> endobj 3862 0 obj <> endobj 3863 0 obj <> endobj 3864 0 obj <> endobj 3865 0 obj <> endobj 3866 0 obj <> endobj 3867 0 obj <> endobj 3868 0 obj <> endobj 3869 0 obj <> endobj 3870 0 obj <> endobj 3871 0 obj <> endobj 3872 0 obj <> endobj 3873 0 obj <> endobj 3874 0 obj <> endobj 3875 0 obj <> endobj 3876 0 obj <> endobj 3877 0 obj <> endobj 3878 0 obj <> endobj 3879 0 obj <> endobj 3880 0 obj <> endobj 3881 0 obj <> endobj 3882 0 obj <> endobj 3883 0 obj <> endobj 3884 0 obj <> endobj 3885 0 obj <> endobj 3886 0 obj <> endobj 3887 0 obj <> endobj 3888 0 obj <> endobj 3889 0 obj <> endobj 3890 0 obj <> endobj 3891 0 obj <> endobj 3892 0 obj <> endobj 3893 0 obj <> endobj 3894 0 obj <> endobj 4044 0 obj <> /Outlines 3948 0 R /StructTreeRoot 4042 0 R /Lang(ca-AD) /MarkInfo<> >> endobj 4045 0 obj < /Author /Keywords /Producer /CreationDate(D:20251110231327+01'00')>> endobj xref 0 4046 0000000000 65535 f 0000311718 00000 n 0000000019 00000 n 0000000507 00000 n 0000766755 00000 n 0000343200 00000 n 0000343030 00000 n 0000000527 00000 n 0000343320 00000 n 0000343452 00000 n 0000343665 00000 n 0000343584 00000 n 0000311872 00000 n 0000054162 00000 n 0000056206 00000 n 0000343806 00000 n 0000380048 00000 n 0000349694 00000 n 0000343929 00000 n 0000349604 00000 n 0000344107 00000 n 0000344003 00000 n 0000349459 00000 n 0000344672 00000 n 0000344269 00000 n 0000344590 00000 n 0000344447 00000 n 0000344343 00000 n 0000346778 00000 n 0000344759 00000 n 0000346688 00000 n 0000344937 00000 n 0000344833 00000 n 0000346559 00000 n 0000345486 00000 n 0000345080 00000 n 0000345404 00000 n 0000345260 00000 n 0000345155 00000 n 0000345979 00000 n 0000345573 00000 n 0000345897 00000 n 0000345753 00000 n 0000345648 00000 n 0000346472 00000 n 0000346066 00000 n 0000346390 00000 n 0000346246 00000 n 0000346141 00000 n 0000347271 00000 n 0000346865 00000 n 0000347189 00000 n 0000347045 00000 n 0000346940 00000 n 0000348879 00000 n 0000347358 00000 n 0000348789 00000 n 0000347538 00000 n 0000347433 00000 n 0000348668 00000 n 0000348088 00000 n 0000347682 00000 n 0000348006 00000 n 0000347862 00000 n 0000347757 00000 n 0000348581 00000 n 0000348175 00000 n 0000348499 00000 n 0000348355 00000 n 0000348250 00000 n 0000349372 00000 n 0000348966 00000 n 0000349290 00000 n 0000349146 00000 n 0000349041 00000 n 0000352821 00000 n 0000349781 00000 n 0000352731 00000 n 0000349961 00000 n 0000349856 00000 n 0000352585 00000 n 0000350511 00000 n 0000350105 00000 n 0000350429 00000 n 0000350285 00000 n 0000350180 00000 n 0000351004 00000 n 0000350598 00000 n 0000350922 00000 n 0000350778 00000 n 0000350673 00000 n 0000351497 00000 n 0000351091 00000 n 0000351415 00000 n 0000351271 00000 n 0000351166 00000 n 0000351992 00000 n 0000351584 00000 n 0000351910 00000 n 0000351765 00000 n 0000351659 00000 n 0000352495 00000 n 0000352079 00000 n 0000352410 00000 n 0000352263 00000 n 0000352156 00000 n 0000358084 00000 n 0000352908 00000 n 0000357990 00000 n 0000353092 00000 n 0000352985 00000 n 0000357802 00000 n 0000353655 00000 n 0000353239 00000 n 0000353570 00000 n 0000353423 00000 n 0000353316 00000 n 0000354162 00000 n 0000353746 00000 n 0000354077 00000 n 0000353930 00000 n 0000353823 00000 n 0000354669 00000 n 0000354253 00000 n 0000354584 00000 n 0000354437 00000 n 0000354330 00000 n 0000355176 00000 n 0000354760 00000 n 0000355091 00000 n 0000354944 00000 n 0000354837 00000 n 0000355683 00000 n 0000355267 00000 n 0000355598 00000 n 0000355451 00000 n 0000355344 00000 n 0000356190 00000 n 0000355774 00000 n 0000356105 00000 n 0000355958 00000 n 0000355851 00000 n 0000356697 00000 n 0000356281 00000 n 0000356612 00000 n 0000356465 00000 n 0000356358 00000 n 0000357204 00000 n 0000356788 00000 n 0000357119 00000 n 0000356972 00000 n 0000356865 00000 n 0000357711 00000 n 0000357295 00000 n 0000357626 00000 n 0000357479 00000 n 0000357372 00000 n 0000360254 00000 n 0000358174 00000 n 0000360160 00000 n 0000358358 00000 n 0000358251 00000 n 0000360026 00000 n 0000358921 00000 n 0000358505 00000 n 0000358836 00000 n 0000358689 00000 n 0000358582 00000 n 0000359428 00000 n 0000359012 00000 n 0000359343 00000 n 0000359196 00000 n 0000359089 00000 n 0000359935 00000 n 0000359519 00000 n 0000359850 00000 n 0000359703 00000 n 0000359596 00000 n 0000360760 00000 n 0000360344 00000 n 0000360675 00000 n 0000360528 00000 n 0000360421 00000 n 0000361901 00000 n 0000360850 00000 n 0000361807 00000 n 0000361034 00000 n 0000360927 00000 n 0000361691 00000 n 0000361600 00000 n 0000361181 00000 n 0000361515 00000 n 0000361367 00000 n 0000361259 00000 n 0000362410 00000 n 0000361991 00000 n 0000362325 00000 n 0000362177 00000 n 0000362069 00000 n 0000365227 00000 n 0000362500 00000 n 0000365133 00000 n 0000362686 00000 n 0000362578 00000 n 0000365017 00000 n 0000364926 00000 n 0000362834 00000 n 0000364832 00000 n 0000363020 00000 n 0000362912 00000 n 0000364698 00000 n 0000363587 00000 n 0000363168 00000 n 0000363502 00000 n 0000363354 00000 n 0000363246 00000 n 0000364097 00000 n 0000363678 00000 n 0000364012 00000 n 0000363864 00000 n 0000363756 00000 n 0000364607 00000 n 0000364188 00000 n 0000364522 00000 n 0000364374 00000 n 0000364266 00000 n 0000379447 00000 n 0000365317 00000 n 0000379353 00000 n 0000365503 00000 n 0000365395 00000 n 0000379156 00000 n 0000369821 00000 n 0000365651 00000 n 0000369727 00000 n 0000365837 00000 n 0000365729 00000 n 0000369557 00000 n 0000366404 00000 n 0000365985 00000 n 0000366319 00000 n 0000366171 00000 n 0000366063 00000 n 0000312426 00000 n 0000056228 00000 n 0000057679 00000 n 0000366912 00000 n 0000366495 00000 n 0000366826 00000 n 0000366679 00000 n 0000366572 00000 n 0000367421 00000 n 0000367004 00000 n 0000367335 00000 n 0000367188 00000 n 0000367081 00000 n 0000367930 00000 n 0000367513 00000 n 0000367844 00000 n 0000367697 00000 n 0000367590 00000 n 0000368441 00000 n 0000368022 00000 n 0000368355 00000 n 0000368207 00000 n 0000368099 00000 n 0000368953 00000 n 0000368533 00000 n 0000368867 00000 n 0000368719 00000 n 0000368611 00000 n 0000369465 00000 n 0000369045 00000 n 0000369379 00000 n 0000369231 00000 n 0000369123 00000 n 0000371491 00000 n 0000369912 00000 n 0000371396 00000 n 0000370098 00000 n 0000369990 00000 n 0000371270 00000 n 0000370666 00000 n 0000370246 00000 n 0000370580 00000 n 0000370432 00000 n 0000370324 00000 n 0000371178 00000 n 0000370758 00000 n 0000371092 00000 n 0000370944 00000 n 0000370836 00000 n 0000373162 00000 n 0000371583 00000 n 0000373067 00000 n 0000371769 00000 n 0000371661 00000 n 0000372941 00000 n 0000372337 00000 n 0000371917 00000 n 0000372251 00000 n 0000372103 00000 n 0000371995 00000 n 0000372849 00000 n 0000372429 00000 n 0000372763 00000 n 0000372615 00000 n 0000372507 00000 n 0000374833 00000 n 0000373254 00000 n 0000374738 00000 n 0000373440 00000 n 0000373332 00000 n 0000374612 00000 n 0000374008 00000 n 0000373588 00000 n 0000373922 00000 n 0000373774 00000 n 0000373666 00000 n 0000374520 00000 n 0000374100 00000 n 0000374434 00000 n 0000374286 00000 n 0000374178 00000 n 0000376504 00000 n 0000374925 00000 n 0000376409 00000 n 0000375111 00000 n 0000375003 00000 n 0000376283 00000 n 0000375679 00000 n 0000375259 00000 n 0000375593 00000 n 0000375445 00000 n 0000375337 00000 n 0000376191 00000 n 0000375771 00000 n 0000376105 00000 n 0000375957 00000 n 0000375849 00000 n 0000377016 00000 n 0000376596 00000 n 0000376930 00000 n 0000376782 00000 n 0000376674 00000 n 0000377528 00000 n 0000377108 00000 n 0000377442 00000 n 0000377294 00000 n 0000377186 00000 n 0000378040 00000 n 0000377620 00000 n 0000377954 00000 n 0000377806 00000 n 0000377698 00000 n 0000378552 00000 n 0000378132 00000 n 0000378466 00000 n 0000378318 00000 n 0000378210 00000 n 0000379064 00000 n 0000378644 00000 n 0000378978 00000 n 0000378830 00000 n 0000378722 00000 n 0000379957 00000 n 0000379537 00000 n 0000379871 00000 n 0000379723 00000 n 0000379615 00000 n 0000312811 00000 n 0000057702 00000 n 0000059943 00000 n 0000380240 00000 n 0000380365 00000 n 0000380537 00000 n 0000381025 00000 n 0000380716 00000 n 0000380809 00000 n 0000380917 00000 n 0000381339 00000 n 0000381231 00000 n 0000381521 00000 n 0000381691 00000 n 0000381861 00000 n 0000381989 00000 n 0000382164 00000 n 0000382451 00000 n 0000382343 00000 n 0000382753 00000 n 0000382645 00000 n 0000382944 00000 n 0000313025 00000 n 0000059966 00000 n 0000063572 00000 n 0000383114 00000 n 0000383347 00000 n 0000383222 00000 n 0000390677 00000 n 0000383904 00000 n 0000383480 00000 n 0000383818 00000 n 0000383649 00000 n 0000383557 00000 n 0000384625 00000 n 0000383996 00000 n 0000384539 00000 n 0000384359 00000 n 0000384073 00000 n 0000384165 00000 n 0000384251 00000 n 0000385712 00000 n 0000384717 00000 n 0000385626 00000 n 0000385394 00000 n 0000384795 00000 n 0000384888 00000 n 0000384996 00000 n 0000385082 00000 n 0000385178 00000 n 0000385286 00000 n 0000386993 00000 n 0000385804 00000 n 0000386907 00000 n 0000386657 00000 n 0000385882 00000 n 0000385975 00000 n 0000386068 00000 n 0000386176 00000 n 0000386284 00000 n 0000386377 00000 n 0000386485 00000 n 0000386571 00000 n 0000387834 00000 n 0000387085 00000 n 0000387748 00000 n 0000387546 00000 n 0000387163 00000 n 0000387256 00000 n 0000387364 00000 n 0000387450 00000 n 0000388583 00000 n 0000387926 00000 n 0000388497 00000 n 0000388204 00000 n 0000388004 00000 n 0000313266 00000 n 0000063595 00000 n 0000066815 00000 n 0000388097 00000 n 0000389833 00000 n 0000388675 00000 n 0000389747 00000 n 0000389511 00000 n 0000388752 00000 n 0000388844 00000 n 0000388929 00000 n 0000389015 00000 n 0000389101 00000 n 0000389209 00000 n 0000389317 00000 n 0000389403 00000 n 0000390585 00000 n 0000389925 00000 n 0000390499 00000 n 0000390312 00000 n 0000390003 00000 n 0000390096 00000 n 0000390204 00000 n 0000390981 00000 n 0000390855 00000 n 0000397664 00000 n 0000391538 00000 n 0000391115 00000 n 0000391452 00000 n 0000391286 00000 n 0000391193 00000 n 0000392155 00000 n 0000391630 00000 n 0000392069 00000 n 0000391909 00000 n 0000391708 00000 n 0000391801 00000 n 0000393018 00000 n 0000392247 00000 n 0000392932 00000 n 0000392742 00000 n 0000392325 00000 n 0000392418 00000 n 0000392526 00000 n 0000392634 00000 n 0000393644 00000 n 0000393110 00000 n 0000393558 00000 n 0000393389 00000 n 0000393188 00000 n 0000393281 00000 n 0000394141 00000 n 0000393736 00000 n 0000394055 00000 n 0000393907 00000 n 0000393814 00000 n 0000395004 00000 n 0000394233 00000 n 0000394918 00000 n 0000394728 00000 n 0000394311 00000 n 0000394404 00000 n 0000394512 00000 n 0000394620 00000 n 0000395959 00000 n 0000395096 00000 n 0000395873 00000 n 0000395677 00000 n 0000395174 00000 n 0000395267 00000 n 0000395375 00000 n 0000395483 00000 n 0000395569 00000 n 0000313588 00000 n 0000066838 00000 n 0000070047 00000 n 0000396455 00000 n 0000396051 00000 n 0000396369 00000 n 0000396220 00000 n 0000396128 00000 n 0000396953 00000 n 0000396547 00000 n 0000396867 00000 n 0000396716 00000 n 0000396624 00000 n 0000397572 00000 n 0000397045 00000 n 0000397486 00000 n 0000397323 00000 n 0000397122 00000 n 0000397215 00000 n 0000397986 00000 n 0000397860 00000 n 0000398228 00000 n 0000398120 00000 n 0000409172 00000 n 0000399091 00000 n 0000398412 00000 n 0000399005 00000 n 0000398799 00000 n 0000398490 00000 n 0000398583 00000 n 0000398691 00000 n 0000399686 00000 n 0000399183 00000 n 0000399600 00000 n 0000399440 00000 n 0000399261 00000 n 0000399354 00000 n 0000400634 00000 n 0000399778 00000 n 0000400548 00000 n 0000400337 00000 n 0000399856 00000 n 0000399949 00000 n 0000400035 00000 n 0000400121 00000 n 0000400229 00000 n 0000401248 00000 n 0000400726 00000 n 0000401162 00000 n 0000400990 00000 n 0000400804 00000 n 0000400897 00000 n 0000401856 00000 n 0000401340 00000 n 0000401770 00000 n 0000401604 00000 n 0000401418 00000 n 0000401511 00000 n 0000402954 00000 n 0000401948 00000 n 0000402868 00000 n 0000402511 00000 n 0000402026 00000 n 0000402119 00000 n 0000313811 00000 n 0000070070 00000 n 0000073213 00000 n 0000402205 00000 n 0000402312 00000 n 0000402419 00000 n 0000403689 00000 n 0000403046 00000 n 0000403603 00000 n 0000403431 00000 n 0000403123 00000 n 0000403215 00000 n 0000403323 00000 n 0000404186 00000 n 0000403781 00000 n 0000404100 00000 n 0000403952 00000 n 0000403859 00000 n 0000404892 00000 n 0000404278 00000 n 0000404806 00000 n 0000404628 00000 n 0000404356 00000 n 0000404449 00000 n 0000404542 00000 n 0000406112 00000 n 0000404984 00000 n 0000406026 00000 n 0000405779 00000 n 0000405062 00000 n 0000405155 00000 n 0000405241 00000 n 0000405327 00000 n 0000405413 00000 n 0000405499 00000 n 0000405585 00000 n 0000405671 00000 n 0000406618 00000 n 0000406204 00000 n 0000406532 00000 n 0000406375 00000 n 0000406282 00000 n 0000407121 00000 n 0000406710 00000 n 0000407035 00000 n 0000406881 00000 n 0000406788 00000 n 0000407867 00000 n 0000407213 00000 n 0000407781 00000 n 0000407600 00000 n 0000407291 00000 n 0000407384 00000 n 0000407492 00000 n 0000408364 00000 n 0000407959 00000 n 0000408278 00000 n 0000408130 00000 n 0000408037 00000 n 0000409080 00000 n 0000408456 00000 n 0000408994 00000 n 0000408813 00000 n 0000408534 00000 n 0000408627 00000 n 0000408720 00000 n 0000409413 00000 n 0000409583 00000 n 0000409711 00000 n 0000314043 00000 n 0000073236 00000 n 0000076167 00000 n 0000412996 00000 n 0000410350 00000 n 0000409914 00000 n 0000410264 00000 n 0000410098 00000 n 0000409991 00000 n 0000410859 00000 n 0000410442 00000 n 0000410773 00000 n 0000410626 00000 n 0000410519 00000 n 0000411368 00000 n 0000410951 00000 n 0000411282 00000 n 0000411135 00000 n 0000411028 00000 n 0000411880 00000 n 0000411460 00000 n 0000411794 00000 n 0000411646 00000 n 0000411538 00000 n 0000412392 00000 n 0000411972 00000 n 0000412306 00000 n 0000412158 00000 n 0000412050 00000 n 0000412904 00000 n 0000412484 00000 n 0000412818 00000 n 0000412670 00000 n 0000412562 00000 n 0000413156 00000 n 0000414369 00000 n 0000413765 00000 n 0000413326 00000 n 0000413679 00000 n 0000413512 00000 n 0000413404 00000 n 0000414277 00000 n 0000413857 00000 n 0000414191 00000 n 0000414043 00000 n 0000413935 00000 n 0000414493 00000 n 0000418266 00000 n 0000415102 00000 n 0000414663 00000 n 0000415016 00000 n 0000414849 00000 n 0000414741 00000 n 0000415614 00000 n 0000415194 00000 n 0000415528 00000 n 0000415380 00000 n 0000415272 00000 n 0000416126 00000 n 0000415706 00000 n 0000416040 00000 n 0000415892 00000 n 0000415784 00000 n 0000416638 00000 n 0000416218 00000 n 0000416552 00000 n 0000416404 00000 n 0000416296 00000 n 0000417150 00000 n 0000416730 00000 n 0000417064 00000 n 0000416916 00000 n 0000416808 00000 n 0000417662 00000 n 0000417242 00000 n 0000417576 00000 n 0000417428 00000 n 0000417320 00000 n 0000418174 00000 n 0000417754 00000 n 0000418088 00000 n 0000417940 00000 n 0000417832 00000 n 0000418435 00000 n 0000418605 00000 n 0000418859 00000 n 0000418733 00000 n 0000418992 00000 n 0000423230 00000 n 0000419704 00000 n 0000419161 00000 n 0000419618 00000 n 0000419433 00000 n 0000419239 00000 n 0000419347 00000 n 0000420102 00000 n 0000419796 00000 n 0000420016 00000 n 0000419874 00000 n 0000421255 00000 n 0000420194 00000 n 0000421169 00000 n 0000420940 00000 n 0000420272 00000 n 0000420380 00000 n 0000420488 00000 n 0000420574 00000 n 0000420660 00000 n 0000420768 00000 n 0000420854 00000 n 0000421751 00000 n 0000421347 00000 n 0000421665 00000 n 0000421511 00000 n 0000421425 00000 n 0000422345 00000 n 0000421843 00000 n 0000422259 00000 n 0000422093 00000 n 0000421921 00000 n 0000422007 00000 n 0000423138 00000 n 0000422437 00000 n 0000423052 00000 n 0000422860 00000 n 0000422515 00000 n 0000422601 00000 n 0000422687 00000 n 0000422773 00000 n 0000314383 00000 n 0000076190 00000 n 0000078864 00000 n 0000423515 00000 n 0000423390 00000 n 0000423630 00000 n 0000427288 00000 n 0000424567 00000 n 0000423798 00000 n 0000424481 00000 n 0000424281 00000 n 0000423875 00000 n 0000423960 00000 n 0000424067 00000 n 0000424174 00000 n 0000425180 00000 n 0000424659 00000 n 0000425094 00000 n 0000424931 00000 n 0000424737 00000 n 0000424823 00000 n 0000425888 00000 n 0000425272 00000 n 0000425802 00000 n 0000425630 00000 n 0000425350 00000 n 0000425436 00000 n 0000425522 00000 n 0000426700 00000 n 0000425980 00000 n 0000426614 00000 n 0000426424 00000 n 0000426058 00000 n 0000426144 00000 n 0000426230 00000 n 0000426338 00000 n 0000427196 00000 n 0000426792 00000 n 0000427110 00000 n 0000426956 00000 n 0000426870 00000 n 0000427439 00000 n 0000427609 00000 n 0000428211 00000 n 0000427737 00000 n 0000427823 00000 n 0000427909 00000 n 0000427995 00000 n 0000428103 00000 n 0000428554 00000 n 0000428446 00000 n 0000428739 00000 n 0000429174 00000 n 0000428909 00000 n 0000429002 00000 n 0000429088 00000 n 0000429407 00000 n 0000429535 00000 n 0000429704 00000 n 0000429832 00000 n 0000431715 00000 n 0000430418 00000 n 0000430001 00000 n 0000430332 00000 n 0000430165 00000 n 0000430079 00000 n 0000430927 00000 n 0000430510 00000 n 0000430841 00000 n 0000430674 00000 n 0000430588 00000 n 0000431623 00000 n 0000431019 00000 n 0000431537 00000 n 0000431352 00000 n 0000314633 00000 n 0000078887 00000 n 0000081145 00000 n 0000431097 00000 n 0000431182 00000 n 0000431267 00000 n 0000431848 00000 n 0000432102 00000 n 0000432017 00000 n 0000432631 00000 n 0000432282 00000 n 0000432374 00000 n 0000432459 00000 n 0000432545 00000 n 0000433030 00000 n 0000432851 00000 n 0000432944 00000 n 0000433230 00000 n 0000433400 00000 n 0000433528 00000 n 0000433783 00000 n 0000433697 00000 n 0000434325 00000 n 0000433959 00000 n 0000434045 00000 n 0000434131 00000 n 0000434239 00000 n 0000434552 00000 n 0000434808 00000 n 0000434722 00000 n 0000434984 00000 n 0000435240 00000 n 0000435154 00000 n 0000435416 00000 n 0000435586 00000 n 0000435800 00000 n 0000435714 00000 n 0000435984 00000 n 0000436240 00000 n 0000436154 00000 n 0000314812 00000 n 0000081168 00000 n 0000082825 00000 n 0000436501 00000 n 0000436416 00000 n 0000436658 00000 n 0000436827 00000 n 0000436996 00000 n 0000437123 00000 n 0000437376 00000 n 0000437291 00000 n 0000437552 00000 n 0000437721 00000 n 0000437890 00000 n 0000438017 00000 n 0000442526 00000 n 0000438627 00000 n 0000438188 00000 n 0000438541 00000 n 0000438374 00000 n 0000438266 00000 n 0000439158 00000 n 0000438719 00000 n 0000439072 00000 n 0000438905 00000 n 0000438797 00000 n 0000439572 00000 n 0000439250 00000 n 0000439486 00000 n 0000439328 00000 n 0000440566 00000 n 0000439664 00000 n 0000440480 00000 n 0000440268 00000 n 0000439742 00000 n 0000439835 00000 n 0000439921 00000 n 0000440007 00000 n 0000440096 00000 n 0000440182 00000 n 0000441560 00000 n 0000440658 00000 n 0000441474 00000 n 0000441259 00000 n 0000440736 00000 n 0000440829 00000 n 0000440915 00000 n 0000441001 00000 n 0000441087 00000 n 0000441173 00000 n 0000315000 00000 n 0000082848 00000 n 0000085555 00000 n 0000442434 00000 n 0000441652 00000 n 0000442348 00000 n 0000442161 00000 n 0000441729 00000 n 0000441821 00000 n 0000441906 00000 n 0000441991 00000 n 0000442076 00000 n 0000443122 00000 n 0000442686 00000 n 0000442778 00000 n 0000442864 00000 n 0000442950 00000 n 0000443036 00000 n 0000443466 00000 n 0000443358 00000 n 0000443648 00000 n 0000443776 00000 n 0000443945 00000 n 0000444115 00000 n 0000447334 00000 n 0000444770 00000 n 0000444243 00000 n 0000444684 00000 n 0000444500 00000 n 0000444321 00000 n 0000444414 00000 n 0000445737 00000 n 0000444862 00000 n 0000445651 00000 n 0000445443 00000 n 0000444940 00000 n 0000445033 00000 n 0000445141 00000 n 0000445249 00000 n 0000445335 00000 n 0000446237 00000 n 0000445829 00000 n 0000446151 00000 n 0000446000 00000 n 0000445907 00000 n 0000446734 00000 n 0000446329 00000 n 0000446648 00000 n 0000446500 00000 n 0000446407 00000 n 0000447242 00000 n 0000446826 00000 n 0000447156 00000 n 0000446998 00000 n 0000446904 00000 n 0000315206 00000 n 0000085578 00000 n 0000088927 00000 n 0000447485 00000 n 0000456291 00000 n 0000448157 00000 n 0000447595 00000 n 0000448067 00000 n 0000447880 00000 n 0000447675 00000 n 0000447770 00000 n 0000448672 00000 n 0000448254 00000 n 0000448582 00000 n 0000448430 00000 n 0000448334 00000 n 0000449417 00000 n 0000448769 00000 n 0000449327 00000 n 0000449146 00000 n 0000448850 00000 n 0000448946 00000 n 0000449035 00000 n 0000450341 00000 n 0000449514 00000 n 0000450251 00000 n 0000450047 00000 n 0000449595 00000 n 0000449691 00000 n 0000449780 00000 n 0000449869 00000 n 0000449958 00000 n 0000451232 00000 n 0000450438 00000 n 0000451142 00000 n 0000450948 00000 n 0000450519 00000 n 0000450615 00000 n 0000450726 00000 n 0000450837 00000 n 0000451757 00000 n 0000451329 00000 n 0000451667 00000 n 0000451506 00000 n 0000451410 00000 n 0000452276 00000 n 0000451854 00000 n 0000452186 00000 n 0000452031 00000 n 0000451935 00000 n 0000452798 00000 n 0000452373 00000 n 0000452708 00000 n 0000452550 00000 n 0000452454 00000 n 0000453441 00000 n 0000452895 00000 n 0000453351 00000 n 0000453183 00000 n 0000452976 00000 n 0000453072 00000 n 0000454660 00000 n 0000453538 00000 n 0000454570 00000 n 0000454325 00000 n 0000453619 00000 n 0000453715 00000 n 0000453826 00000 n 0000453925 00000 n 0000454014 00000 n 0000454103 00000 n 0000454214 00000 n 0000456194 00000 n 0000454757 00000 n 0000456104 00000 n 0000455405 00000 n 0000454838 00000 n 0000315459 00000 n 0000088951 00000 n 0000092737 00000 n 0000454934 00000 n 0000455022 00000 n 0000455110 00000 n 0000455205 00000 n 0000455294 00000 n 0000456509 00000 n 0000462026 00000 n 0000457645 00000 n 0000456639 00000 n 0000457555 00000 n 0000457305 00000 n 0000456720 00000 n 0000456816 00000 n 0000456905 00000 n 0000456994 00000 n 0000457083 00000 n 0000457194 00000 n 0000459105 00000 n 0000457742 00000 n 0000459015 00000 n 0000458744 00000 n 0000457823 00000 n 0000457919 00000 n 0000458011 00000 n 0000458100 00000 n 0000458189 00000 n 0000458300 00000 n 0000458411 00000 n 0000458522 00000 n 0000458633 00000 n 0000460087 00000 n 0000459202 00000 n 0000459997 00000 n 0000459763 00000 n 0000459283 00000 n 0000459379 00000 n 0000459475 00000 n 0000459571 00000 n 0000459667 00000 n 0000460606 00000 n 0000460184 00000 n 0000460516 00000 n 0000460361 00000 n 0000460265 00000 n 0000461929 00000 n 0000460703 00000 n 0000461839 00000 n 0000461292 00000 n 0000460784 00000 n 0000315703 00000 n 0000092761 00000 n 0000096313 00000 n 0000460880 00000 n 0000460975 00000 n 0000461070 00000 n 0000461181 00000 n 0000462184 00000 n 0000467524 00000 n 0000462964 00000 n 0000462314 00000 n 0000462874 00000 n 0000462669 00000 n 0000462395 00000 n 0000462491 00000 n 0000462580 00000 n 0000463592 00000 n 0000463061 00000 n 0000463502 00000 n 0000463334 00000 n 0000463142 00000 n 0000463238 00000 n 0000464922 00000 n 0000463689 00000 n 0000464832 00000 n 0000464562 00000 n 0000463770 00000 n 0000463866 00000 n 0000463962 00000 n 0000464051 00000 n 0000464140 00000 n 0000464229 00000 n 0000464340 00000 n 0000464451 00000 n 0000465686 00000 n 0000465019 00000 n 0000465596 00000 n 0000465418 00000 n 0000465100 00000 n 0000465196 00000 n 0000465307 00000 n 0000466453 00000 n 0000465783 00000 n 0000466363 00000 n 0000466182 00000 n 0000465864 00000 n 0000465960 00000 n 0000466071 00000 n 0000467427 00000 n 0000466550 00000 n 0000467337 00000 n 0000467130 00000 n 0000466631 00000 n 0000466727 00000 n 0000466838 00000 n 0000466930 00000 n 0000467019 00000 n 0000315974 00000 n 0000096337 00000 n 0000099678 00000 n 0000467692 00000 n 0000472251 00000 n 0000468803 00000 n 0000467802 00000 n 0000468713 00000 n 0000468471 00000 n 0000467882 00000 n 0000467977 00000 n 0000468065 00000 n 0000468153 00000 n 0000468249 00000 n 0000468360 00000 n 0000469649 00000 n 0000468900 00000 n 0000469559 00000 n 0000469344 00000 n 0000468981 00000 n 0000469077 00000 n 0000469166 00000 n 0000469255 00000 n 0000470279 00000 n 0000469746 00000 n 0000470189 00000 n 0000470012 00000 n 0000469827 00000 n 0000469923 00000 n 0000471002 00000 n 0000470376 00000 n 0000470912 00000 n 0000470731 00000 n 0000470457 00000 n 0000470553 00000 n 0000470642 00000 n 0000471626 00000 n 0000471099 00000 n 0000471536 00000 n 0000471365 00000 n 0000471180 00000 n 0000471276 00000 n 0000472154 00000 n 0000471723 00000 n 0000472064 00000 n 0000471900 00000 n 0000471804 00000 n 0000472419 00000 n 0000473742 00000 n 0000472986 00000 n 0000472549 00000 n 0000472896 00000 n 0000472726 00000 n 0000472630 00000 n 0000473645 00000 n 0000473083 00000 n 0000473555 00000 n 0000473260 00000 n 0000473164 00000 n 0000316164 00000 n 0000099702 00000 n 0000102804 00000 n 0000473870 00000 n 0000477358 00000 n 0000474749 00000 n 0000473999 00000 n 0000474659 00000 n 0000474444 00000 n 0000474079 00000 n 0000474174 00000 n 0000474263 00000 n 0000474355 00000 n 0000475271 00000 n 0000474846 00000 n 0000475181 00000 n 0000475023 00000 n 0000474927 00000 n 0000475796 00000 n 0000475368 00000 n 0000475706 00000 n 0000475545 00000 n 0000475449 00000 n 0000476637 00000 n 0000475893 00000 n 0000476547 00000 n 0000476347 00000 n 0000475974 00000 n 0000476070 00000 n 0000476169 00000 n 0000476258 00000 n 0000477261 00000 n 0000476734 00000 n 0000477171 00000 n 0000477000 00000 n 0000476815 00000 n 0000476911 00000 n 0000477516 00000 n 0000478092 00000 n 0000477995 00000 n 0000477646 00000 n 0000477905 00000 n 0000477727 00000 n 0000478210 00000 n 0000480100 00000 n 0000480003 00000 n 0000478340 00000 n 0000479913 00000 n 0000479137 00000 n 0000478421 00000 n 0000478517 00000 n 0000316325 00000 n 0000102828 00000 n 0000106791 00000 n 0000478606 00000 n 0000478694 00000 n 0000478782 00000 n 0000478870 00000 n 0000478959 00000 n 0000479048 00000 n 0000480307 00000 n 0000480218 00000 n 0000480586 00000 n 0000480497 00000 n 0000480846 00000 n 0000480757 00000 n 0000481106 00000 n 0000481017 00000 n 0000481366 00000 n 0000481277 00000 n 0000481626 00000 n 0000481537 00000 n 0000481886 00000 n 0000481797 00000 n 0000482146 00000 n 0000482057 00000 n 0000482406 00000 n 0000482317 00000 n 0000482666 00000 n 0000482577 00000 n 0000482926 00000 n 0000482837 00000 n 0000483186 00000 n 0000483097 00000 n 0000483446 00000 n 0000483357 00000 n 0000483706 00000 n 0000483617 00000 n 0000483966 00000 n 0000483877 00000 n 0000484226 00000 n 0000484137 00000 n 0000484486 00000 n 0000484397 00000 n 0000484675 00000 n 0000484847 00000 n 0000484977 00000 n 0000489552 00000 n 0000486921 00000 n 0000485106 00000 n 0000486831 00000 n 0000486462 00000 n 0000485187 00000 n 0000485283 00000 n 0000485394 00000 n 0000485483 00000 n 0000485572 00000 n 0000485661 00000 n 0000485750 00000 n 0000485839 00000 n 0000485928 00000 n 0000486017 00000 n 0000486106 00000 n 0000486195 00000 n 0000486284 00000 n 0000486373 00000 n 0000488354 00000 n 0000487018 00000 n 0000488264 00000 n 0000487764 00000 n 0000487099 00000 n 0000487195 00000 n 0000316506 00000 n 0000106815 00000 n 0000110530 00000 n 0000487294 00000 n 0000487389 00000 n 0000487477 00000 n 0000487565 00000 n 0000487653 00000 n 0000489455 00000 n 0000488451 00000 n 0000489365 00000 n 0000489115 00000 n 0000488532 00000 n 0000488628 00000 n 0000488727 00000 n 0000488816 00000 n 0000488905 00000 n 0000489026 00000 n 0000489690 00000 n 0000490357 00000 n 0000489820 00000 n 0000489912 00000 n 0000490001 00000 n 0000490090 00000 n 0000490179 00000 n 0000490268 00000 n 0000490710 00000 n 0000490621 00000 n 0000490984 00000 n 0000490895 00000 n 0000491263 00000 n 0000491174 00000 n 0000491523 00000 n 0000491434 00000 n 0000491783 00000 n 0000491694 00000 n 0000492043 00000 n 0000491954 00000 n 0000492303 00000 n 0000492214 00000 n 0000492563 00000 n 0000492474 00000 n 0000492823 00000 n 0000492734 00000 n 0000493083 00000 n 0000492994 00000 n 0000493343 00000 n 0000493254 00000 n 0000316687 00000 n 0000110554 00000 n 0000114948 00000 n 0000494062 00000 n 0000493532 00000 n 0000493620 00000 n 0000493708 00000 n 0000493796 00000 n 0000493884 00000 n 0000493973 00000 n 0000494302 00000 n 0000495859 00000 n 0000495113 00000 n 0000494432 00000 n 0000495023 00000 n 0000494812 00000 n 0000494513 00000 n 0000494602 00000 n 0000494701 00000 n 0000495762 00000 n 0000495210 00000 n 0000495672 00000 n 0000495498 00000 n 0000495291 00000 n 0000495387 00000 n 0000495987 00000 n 0000496117 00000 n 0000496380 00000 n 0000496288 00000 n 0000496662 00000 n 0000496570 00000 n 0000496925 00000 n 0000496833 00000 n 0000497188 00000 n 0000497096 00000 n 0000497451 00000 n 0000497359 00000 n 0000497714 00000 n 0000497622 00000 n 0000497977 00000 n 0000497885 00000 n 0000498240 00000 n 0000498148 00000 n 0000498503 00000 n 0000498411 00000 n 0000498766 00000 n 0000498674 00000 n 0000499029 00000 n 0000498937 00000 n 0000499292 00000 n 0000499200 00000 n 0000499555 00000 n 0000499463 00000 n 0000499818 00000 n 0000499726 00000 n 0000500081 00000 n 0000499989 00000 n 0000500344 00000 n 0000500252 00000 n 0000500607 00000 n 0000500515 00000 n 0000500870 00000 n 0000500778 00000 n 0000501133 00000 n 0000501041 00000 n 0000501396 00000 n 0000501304 00000 n 0000501659 00000 n 0000501567 00000 n 0000501922 00000 n 0000501830 00000 n 0000502185 00000 n 0000502093 00000 n 0000502448 00000 n 0000502356 00000 n 0000502711 00000 n 0000502619 00000 n 0000316877 00000 n 0000114972 00000 n 0000118901 00000 n 0000502990 00000 n 0000502900 00000 n 0000503270 00000 n 0000503180 00000 n 0000503531 00000 n 0000503441 00000 n 0000503792 00000 n 0000503702 00000 n 0000504053 00000 n 0000503963 00000 n 0000504316 00000 n 0000504224 00000 n 0000504579 00000 n 0000504487 00000 n 0000504842 00000 n 0000504750 00000 n 0000505105 00000 n 0000505013 00000 n 0000505368 00000 n 0000505276 00000 n 0000505631 00000 n 0000505539 00000 n 0000507565 00000 n 0000506707 00000 n 0000505820 00000 n 0000506617 00000 n 0000506397 00000 n 0000505901 00000 n 0000505997 00000 n 0000506086 00000 n 0000506175 00000 n 0000506286 00000 n 0000507468 00000 n 0000506804 00000 n 0000507378 00000 n 0000507203 00000 n 0000506885 00000 n 0000506981 00000 n 0000507092 00000 n 0000507693 00000 n 0000507912 00000 n 0000507823 00000 n 0000508464 00000 n 0000508108 00000 n 0000508197 00000 n 0000508286 00000 n 0000508375 00000 n 0000508700 00000 n 0000508961 00000 n 0000508872 00000 n 0000509258 00000 n 0000509169 00000 n 0000509665 00000 n 0000509443 00000 n 0000509554 00000 n 0000509863 00000 n 0000510193 00000 n 0000509993 00000 n 0000510082 00000 n 0000510479 00000 n 0000510390 00000 n 0000510758 00000 n 0000510669 00000 n 0000511018 00000 n 0000510929 00000 n 0000511278 00000 n 0000511189 00000 n 0000511538 00000 n 0000511449 00000 n 0000511798 00000 n 0000511709 00000 n 0000317112 00000 n 0000118925 00000 n 0000122497 00000 n 0000512057 00000 n 0000511969 00000 n 0000512335 00000 n 0000512247 00000 n 0000512594 00000 n 0000512506 00000 n 0000512853 00000 n 0000512765 00000 n 0000513112 00000 n 0000513024 00000 n 0000513371 00000 n 0000513283 00000 n 0000513630 00000 n 0000513542 00000 n 0000513889 00000 n 0000513801 00000 n 0000514148 00000 n 0000514060 00000 n 0000514407 00000 n 0000514319 00000 n 0000514667 00000 n 0000514578 00000 n 0000514927 00000 n 0000514838 00000 n 0000515187 00000 n 0000515098 00000 n 0000515447 00000 n 0000515358 00000 n 0000515707 00000 n 0000515618 00000 n 0000515967 00000 n 0000515878 00000 n 0000516227 00000 n 0000516138 00000 n 0000516487 00000 n 0000516398 00000 n 0000516747 00000 n 0000516658 00000 n 0000517007 00000 n 0000516918 00000 n 0000517267 00000 n 0000517178 00000 n 0000517530 00000 n 0000517438 00000 n 0000517793 00000 n 0000517701 00000 n 0000518056 00000 n 0000517964 00000 n 0000518316 00000 n 0000518227 00000 n 0000518576 00000 n 0000518487 00000 n 0000518836 00000 n 0000518747 00000 n 0000519096 00000 n 0000519007 00000 n 0000519356 00000 n 0000519267 00000 n 0000519619 00000 n 0000519527 00000 n 0000519879 00000 n 0000519790 00000 n 0000520139 00000 n 0000520050 00000 n 0000520399 00000 n 0000520310 00000 n 0000520659 00000 n 0000520570 00000 n 0000520919 00000 n 0000520830 00000 n 0000521179 00000 n 0000521090 00000 n 0000521439 00000 n 0000521350 00000 n 0000521699 00000 n 0000521610 00000 n 0000521959 00000 n 0000521870 00000 n 0000522219 00000 n 0000522130 00000 n 0000522479 00000 n 0000522390 00000 n 0000522739 00000 n 0000522650 00000 n 0000522999 00000 n 0000522910 00000 n 0000523259 00000 n 0000523170 00000 n 0000523519 00000 n 0000523430 00000 n 0000523779 00000 n 0000523690 00000 n 0000524039 00000 n 0000523950 00000 n 0000524299 00000 n 0000524210 00000 n 0000524559 00000 n 0000524470 00000 n 0000524819 00000 n 0000524730 00000 n 0000525082 00000 n 0000524990 00000 n 0000525342 00000 n 0000525253 00000 n 0000525602 00000 n 0000525513 00000 n 0000525862 00000 n 0000525773 00000 n 0000526122 00000 n 0000526033 00000 n 0000526382 00000 n 0000526293 00000 n 0000526642 00000 n 0000526553 00000 n 0000317273 00000 n 0000122521 00000 n 0000126161 00000 n 0000526919 00000 n 0000526831 00000 n 0000527197 00000 n 0000527109 00000 n 0000527456 00000 n 0000527368 00000 n 0000527715 00000 n 0000527627 00000 n 0000527974 00000 n 0000527886 00000 n 0000528233 00000 n 0000528145 00000 n 0000528492 00000 n 0000528404 00000 n 0000528751 00000 n 0000528663 00000 n 0000529010 00000 n 0000528922 00000 n 0000529269 00000 n 0000529181 00000 n 0000529529 00000 n 0000529440 00000 n 0000529789 00000 n 0000529700 00000 n 0000530049 00000 n 0000529960 00000 n 0000530309 00000 n 0000530220 00000 n 0000530569 00000 n 0000530480 00000 n 0000530829 00000 n 0000530740 00000 n 0000531089 00000 n 0000531000 00000 n 0000531349 00000 n 0000531260 00000 n 0000531609 00000 n 0000531520 00000 n 0000531869 00000 n 0000531780 00000 n 0000532129 00000 n 0000532040 00000 n 0000532392 00000 n 0000532300 00000 n 0000532652 00000 n 0000532563 00000 n 0000532912 00000 n 0000532823 00000 n 0000533172 00000 n 0000533083 00000 n 0000533435 00000 n 0000533343 00000 n 0000533695 00000 n 0000533606 00000 n 0000533955 00000 n 0000533866 00000 n 0000534215 00000 n 0000534126 00000 n 0000534475 00000 n 0000534386 00000 n 0000534735 00000 n 0000534646 00000 n 0000534995 00000 n 0000534906 00000 n 0000535255 00000 n 0000535166 00000 n 0000535515 00000 n 0000535426 00000 n 0000535778 00000 n 0000535686 00000 n 0000536038 00000 n 0000535949 00000 n 0000536298 00000 n 0000536209 00000 n 0000536469 00000 n 0000536777 00000 n 0000536599 00000 n 0000536688 00000 n 0000537078 00000 n 0000536989 00000 n 0000537272 00000 n 0000317434 00000 n 0000126185 00000 n 0000129616 00000 n 0000537584 00000 n 0000537768 00000 n 0000538035 00000 n 0000537946 00000 n 0000538314 00000 n 0000538225 00000 n 0000538574 00000 n 0000538485 00000 n 0000538853 00000 n 0000538764 00000 n 0000539113 00000 n 0000539024 00000 n 0000539373 00000 n 0000539284 00000 n 0000539633 00000 n 0000539544 00000 n 0000539893 00000 n 0000539804 00000 n 0000540153 00000 n 0000540064 00000 n 0000540432 00000 n 0000540343 00000 n 0000540692 00000 n 0000540603 00000 n 0000540952 00000 n 0000540863 00000 n 0000541212 00000 n 0000541123 00000 n 0000541472 00000 n 0000541383 00000 n 0000541732 00000 n 0000541643 00000 n 0000541992 00000 n 0000541903 00000 n 0000542252 00000 n 0000542163 00000 n 0000542531 00000 n 0000542442 00000 n 0000542791 00000 n 0000542702 00000 n 0000543051 00000 n 0000542962 00000 n 0000543311 00000 n 0000543222 00000 n 0000543571 00000 n 0000543482 00000 n 0000543831 00000 n 0000543742 00000 n 0000544091 00000 n 0000544002 00000 n 0000544351 00000 n 0000544262 00000 n 0000544611 00000 n 0000544522 00000 n 0000544871 00000 n 0000544782 00000 n 0000545131 00000 n 0000545042 00000 n 0000545391 00000 n 0000545302 00000 n 0000545670 00000 n 0000545581 00000 n 0000545930 00000 n 0000545841 00000 n 0000546190 00000 n 0000546101 00000 n 0000546450 00000 n 0000546361 00000 n 0000546710 00000 n 0000546621 00000 n 0000546970 00000 n 0000546881 00000 n 0000547230 00000 n 0000547141 00000 n 0000547490 00000 n 0000547401 00000 n 0000317595 00000 n 0000129640 00000 n 0000132331 00000 n 0000547767 00000 n 0000547679 00000 n 0000548045 00000 n 0000547957 00000 n 0000548896 00000 n 0000548234 00000 n 0000548344 00000 n 0000548454 00000 n 0000548564 00000 n 0000548674 00000 n 0000548785 00000 n 0000549139 00000 n 0000549269 00000 n 0000549643 00000 n 0000549443 00000 n 0000549532 00000 n 0000549841 00000 n 0000550016 00000 n 0000550188 00000 n 0000551929 00000 n 0000550770 00000 n 0000550318 00000 n 0000550680 00000 n 0000550510 00000 n 0000550399 00000 n 0000551301 00000 n 0000550867 00000 n 0000551211 00000 n 0000551059 00000 n 0000550948 00000 n 0000551832 00000 n 0000551398 00000 n 0000551742 00000 n 0000551590 00000 n 0000551479 00000 n 0000552067 00000 n 0000552368 00000 n 0000552239 00000 n 0000552594 00000 n 0000552505 00000 n 0000552873 00000 n 0000552784 00000 n 0000553133 00000 n 0000553044 00000 n 0000553393 00000 n 0000553304 00000 n 0000553653 00000 n 0000553564 00000 n 0000553913 00000 n 0000553824 00000 n 0000554173 00000 n 0000554084 00000 n 0000554433 00000 n 0000554344 00000 n 0000554693 00000 n 0000554604 00000 n 0000555060 00000 n 0000554882 00000 n 0000554971 00000 n 0000555264 00000 n 0000555565 00000 n 0000555436 00000 n 0000555791 00000 n 0000555702 00000 n 0000556070 00000 n 0000555981 00000 n 0000556330 00000 n 0000556241 00000 n 0000317857 00000 n 0000132355 00000 n 0000135196 00000 n 0000556607 00000 n 0000556519 00000 n 0000556885 00000 n 0000556797 00000 n 0000557144 00000 n 0000557056 00000 n 0000557403 00000 n 0000557315 00000 n 0000557662 00000 n 0000557574 00000 n 0000557921 00000 n 0000557833 00000 n 0000558180 00000 n 0000558092 00000 n 0000558439 00000 n 0000558351 00000 n 0000558698 00000 n 0000558610 00000 n 0000558957 00000 n 0000558869 00000 n 0000559217 00000 n 0000559128 00000 n 0000559477 00000 n 0000559388 00000 n 0000559737 00000 n 0000559648 00000 n 0000560237 00000 n 0000559926 00000 n 0000560015 00000 n 0000560126 00000 n 0000560445 00000 n 0000560746 00000 n 0000560617 00000 n 0000560972 00000 n 0000560883 00000 n 0000561251 00000 n 0000561162 00000 n 0000561511 00000 n 0000561422 00000 n 0000561771 00000 n 0000561682 00000 n 0000562031 00000 n 0000561942 00000 n 0000562291 00000 n 0000562202 00000 n 0000562551 00000 n 0000562462 00000 n 0000562811 00000 n 0000562722 00000 n 0000563311 00000 n 0000563000 00000 n 0000563089 00000 n 0000563200 00000 n 0000563519 00000 n 0000563691 00000 n 0000563821 00000 n 0000563950 00000 n 0000564259 00000 n 0000564130 00000 n 0000564396 00000 n 0000564773 00000 n 0000564573 00000 n 0000564662 00000 n 0000318074 00000 n 0000135220 00000 n 0000138283 00000 n 0000565065 00000 n 0000564977 00000 n 0000565273 00000 n 0000565534 00000 n 0000565446 00000 n 0000565812 00000 n 0000565724 00000 n 0000566071 00000 n 0000565983 00000 n 0000566330 00000 n 0000566242 00000 n 0000566589 00000 n 0000566501 00000 n 0000566848 00000 n 0000566760 00000 n 0000567107 00000 n 0000567019 00000 n 0000567425 00000 n 0000567296 00000 n 0000567772 00000 n 0000567562 00000 n 0000567661 00000 n 0000568125 00000 n 0000567996 00000 n 0000568561 00000 n 0000568262 00000 n 0000568354 00000 n 0000568465 00000 n 0000568912 00000 n 0000568783 00000 n 0000576500 00000 n 0000569735 00000 n 0000569212 00000 n 0000569049 00000 n 0000569555 00000 n 0000569392 00000 n 0000570456 00000 n 0000570012 00000 n 0000569866 00000 n 0000570307 00000 n 0000570161 00000 n 0000571016 00000 n 0000570587 00000 n 0000570867 00000 n 0000570721 00000 n 0000571576 00000 n 0000571147 00000 n 0000571427 00000 n 0000571281 00000 n 0000572136 00000 n 0000571707 00000 n 0000571987 00000 n 0000571841 00000 n 0000318264 00000 n 0000138307 00000 n 0000139645 00000 n 0000572695 00000 n 0000572267 00000 n 0000572546 00000 n 0000572401 00000 n 0000573254 00000 n 0000572826 00000 n 0000573105 00000 n 0000572960 00000 n 0000573813 00000 n 0000573385 00000 n 0000573664 00000 n 0000573519 00000 n 0000574372 00000 n 0000573944 00000 n 0000574223 00000 n 0000574078 00000 n 0000574931 00000 n 0000574503 00000 n 0000574782 00000 n 0000574637 00000 n 0000575650 00000 n 0000575207 00000 n 0000575062 00000 n 0000575501 00000 n 0000575356 00000 n 0000576369 00000 n 0000575926 00000 n 0000575781 00000 n 0000576220 00000 n 0000576075 00000 n 0000576920 00000 n 0000576792 00000 n 0000582514 00000 n 0000577742 00000 n 0000577219 00000 n 0000577056 00000 n 0000577562 00000 n 0000577399 00000 n 0000578463 00000 n 0000578019 00000 n 0000577873 00000 n 0000578314 00000 n 0000578168 00000 n 0000579023 00000 n 0000578594 00000 n 0000578874 00000 n 0000578728 00000 n 0000579583 00000 n 0000579154 00000 n 0000579434 00000 n 0000579288 00000 n 0000580143 00000 n 0000579714 00000 n 0000579994 00000 n 0000579848 00000 n 0000580703 00000 n 0000580274 00000 n 0000580554 00000 n 0000580408 00000 n 0000581263 00000 n 0000580834 00000 n 0000581114 00000 n 0000580968 00000 n 0000581823 00000 n 0000581394 00000 n 0000581674 00000 n 0000581528 00000 n 0000582383 00000 n 0000581954 00000 n 0000582234 00000 n 0000582088 00000 n 0000582942 00000 n 0000582813 00000 n 0000587396 00000 n 0000583764 00000 n 0000583241 00000 n 0000583078 00000 n 0000583584 00000 n 0000583421 00000 n 0000584485 00000 n 0000584041 00000 n 0000583895 00000 n 0000584336 00000 n 0000584190 00000 n 0000585045 00000 n 0000584616 00000 n 0000584896 00000 n 0000584750 00000 n 0000585605 00000 n 0000585176 00000 n 0000585456 00000 n 0000585310 00000 n 0000586147 00000 n 0000585736 00000 n 0000585998 00000 n 0000585870 00000 n 0000318425 00000 n 0000139669 00000 n 0000141068 00000 n 0000586706 00000 n 0000586278 00000 n 0000586557 00000 n 0000586412 00000 n 0000587265 00000 n 0000586837 00000 n 0000587116 00000 n 0000586971 00000 n 0000587768 00000 n 0000587640 00000 n 0000608039 00000 n 0000588492 00000 n 0000588049 00000 n 0000587904 00000 n 0000588343 00000 n 0000588198 00000 n 0000589211 00000 n 0000588768 00000 n 0000588623 00000 n 0000589062 00000 n 0000588917 00000 n 0000589930 00000 n 0000589487 00000 n 0000589342 00000 n 0000589781 00000 n 0000589636 00000 n 0000590650 00000 n 0000590206 00000 n 0000590061 00000 n 0000590501 00000 n 0000590355 00000 n 0000591371 00000 n 0000590927 00000 n 0000590781 00000 n 0000591222 00000 n 0000591076 00000 n 0000592092 00000 n 0000591648 00000 n 0000591502 00000 n 0000591943 00000 n 0000591797 00000 n 0000592813 00000 n 0000592369 00000 n 0000592223 00000 n 0000592664 00000 n 0000592518 00000 n 0000593534 00000 n 0000593090 00000 n 0000592944 00000 n 0000593385 00000 n 0000593239 00000 n 0000594255 00000 n 0000593811 00000 n 0000593665 00000 n 0000594106 00000 n 0000593960 00000 n 0000594976 00000 n 0000594532 00000 n 0000594386 00000 n 0000594827 00000 n 0000594681 00000 n 0000595697 00000 n 0000595253 00000 n 0000595107 00000 n 0000595548 00000 n 0000595402 00000 n 0000596418 00000 n 0000595974 00000 n 0000595828 00000 n 0000596269 00000 n 0000596123 00000 n 0000597139 00000 n 0000596695 00000 n 0000596549 00000 n 0000596990 00000 n 0000596844 00000 n 0000597860 00000 n 0000597416 00000 n 0000597270 00000 n 0000597711 00000 n 0000597565 00000 n 0000598581 00000 n 0000598137 00000 n 0000597991 00000 n 0000598432 00000 n 0000598286 00000 n 0000599302 00000 n 0000598858 00000 n 0000598712 00000 n 0000599153 00000 n 0000599007 00000 n 0000600023 00000 n 0000599579 00000 n 0000599433 00000 n 0000599874 00000 n 0000599728 00000 n 0000600744 00000 n 0000600300 00000 n 0000600154 00000 n 0000600595 00000 n 0000600449 00000 n 0000601429 00000 n 0000601003 00000 n 0000600875 00000 n 0000601280 00000 n 0000601152 00000 n 0000318586 00000 n 0000141092 00000 n 0000143867 00000 n 0000602148 00000 n 0000601705 00000 n 0000601560 00000 n 0000601999 00000 n 0000601854 00000 n 0000602867 00000 n 0000602424 00000 n 0000602279 00000 n 0000602718 00000 n 0000602573 00000 n 0000603586 00000 n 0000603143 00000 n 0000602998 00000 n 0000603437 00000 n 0000603292 00000 n 0000604305 00000 n 0000603862 00000 n 0000603717 00000 n 0000604156 00000 n 0000604011 00000 n 0000605024 00000 n 0000604581 00000 n 0000604436 00000 n 0000604875 00000 n 0000604730 00000 n 0000605745 00000 n 0000605301 00000 n 0000605155 00000 n 0000605596 00000 n 0000605450 00000 n 0000606466 00000 n 0000606022 00000 n 0000605876 00000 n 0000606317 00000 n 0000606171 00000 n 0000607187 00000 n 0000606743 00000 n 0000606597 00000 n 0000607038 00000 n 0000606892 00000 n 0000607908 00000 n 0000607464 00000 n 0000607318 00000 n 0000607759 00000 n 0000607613 00000 n 0000608494 00000 n 0000608752 00000 n 0000608623 00000 n 0000616663 00000 n 0000609321 00000 n 0000608888 00000 n 0000609231 00000 n 0000609058 00000 n 0000608969 00000 n 0000609830 00000 n 0000609418 00000 n 0000609740 00000 n 0000609588 00000 n 0000609499 00000 n 0000610339 00000 n 0000609927 00000 n 0000610249 00000 n 0000610097 00000 n 0000610008 00000 n 0000610848 00000 n 0000610436 00000 n 0000610758 00000 n 0000610606 00000 n 0000610517 00000 n 0000611472 00000 n 0000610945 00000 n 0000611382 00000 n 0000611214 00000 n 0000611026 00000 n 0000611115 00000 n 0000611981 00000 n 0000611569 00000 n 0000611891 00000 n 0000611739 00000 n 0000611650 00000 n 0000612490 00000 n 0000612078 00000 n 0000612400 00000 n 0000612248 00000 n 0000612159 00000 n 0000612999 00000 n 0000612587 00000 n 0000612909 00000 n 0000612757 00000 n 0000612668 00000 n 0000613814 00000 n 0000613096 00000 n 0000613724 00000 n 0000613533 00000 n 0000613177 00000 n 0000613266 00000 n 0000613355 00000 n 0000613444 00000 n 0000614530 00000 n 0000613911 00000 n 0000614440 00000 n 0000614259 00000 n 0000613992 00000 n 0000614081 00000 n 0000614170 00000 n 0000615039 00000 n 0000614627 00000 n 0000614949 00000 n 0000614797 00000 n 0000614708 00000 n 0000615548 00000 n 0000615136 00000 n 0000615458 00000 n 0000615306 00000 n 0000615217 00000 n 0000616057 00000 n 0000615645 00000 n 0000615967 00000 n 0000615815 00000 n 0000615726 00000 n 0000616566 00000 n 0000616154 00000 n 0000616476 00000 n 0000616324 00000 n 0000616235 00000 n 0000617363 00000 n 0000616911 00000 n 0000617007 00000 n 0000617096 00000 n 0000617185 00000 n 0000617274 00000 n 0000318747 00000 n 0000143891 00000 n 0000147272 00000 n 0000617874 00000 n 0000617603 00000 n 0000617698 00000 n 0000617786 00000 n 0000618157 00000 n 0000618062 00000 n 0000618472 00000 n 0000618343 00000 n 0000620674 00000 n 0000619345 00000 n 0000618609 00000 n 0000619255 00000 n 0000619046 00000 n 0000618690 00000 n 0000618779 00000 n 0000618868 00000 n 0000618957 00000 n 0000620577 00000 n 0000619442 00000 n 0000620487 00000 n 0000620238 00000 n 0000619523 00000 n 0000619612 00000 n 0000619701 00000 n 0000619790 00000 n 0000619879 00000 n 0000619968 00000 n 0000620060 00000 n 0000620149 00000 n 0000621231 00000 n 0000620802 00000 n 0000620898 00000 n 0000621009 00000 n 0000621120 00000 n 0000621449 00000 n 0000621690 00000 n 0000621579 00000 n 0000622009 00000 n 0000621880 00000 n 0000631251 00000 n 0000622832 00000 n 0000622388 00000 n 0000622235 00000 n 0000622146 00000 n 0000622683 00000 n 0000622537 00000 n 0000623649 00000 n 0000623205 00000 n 0000623052 00000 n 0000622963 00000 n 0000623500 00000 n 0000623354 00000 n 0000624466 00000 n 0000624022 00000 n 0000623869 00000 n 0000623780 00000 n 0000624317 00000 n 0000624171 00000 n 0000625283 00000 n 0000624839 00000 n 0000624686 00000 n 0000624597 00000 n 0000625134 00000 n 0000624988 00000 n 0000626100 00000 n 0000625656 00000 n 0000625503 00000 n 0000625414 00000 n 0000625951 00000 n 0000625805 00000 n 0000627538 00000 n 0000626473 00000 n 0000626320 00000 n 0000626231 00000 n 0000627389 00000 n 0000627156 00000 n 0000626622 00000 n 0000626711 00000 n 0000626800 00000 n 0000626889 00000 n 0000626978 00000 n 0000627067 00000 n 0000628355 00000 n 0000627911 00000 n 0000627758 00000 n 0000627669 00000 n 0000628206 00000 n 0000628060 00000 n 0000318955 00000 n 0000147296 00000 n 0000150173 00000 n 0000629170 00000 n 0000628727 00000 n 0000628574 00000 n 0000628486 00000 n 0000629021 00000 n 0000628876 00000 n 0000629991 00000 n 0000629542 00000 n 0000629389 00000 n 0000629301 00000 n 0000629842 00000 n 0000629691 00000 n 0000631120 00000 n 0000630363 00000 n 0000630210 00000 n 0000630122 00000 n 0000630971 00000 n 0000630779 00000 n 0000630512 00000 n 0000630601 00000 n 0000630690 00000 n 0000631637 00000 n 0000631508 00000 n 0000647257 00000 n 0000632570 00000 n 0000632015 00000 n 0000631862 00000 n 0000631773 00000 n 0000632421 00000 n 0000632253 00000 n 0000632164 00000 n 0000633390 00000 n 0000632943 00000 n 0000632790 00000 n 0000632701 00000 n 0000633241 00000 n 0000633092 00000 n 0000634312 00000 n 0000633763 00000 n 0000633610 00000 n 0000633521 00000 n 0000634163 00000 n 0000634001 00000 n 0000633912 00000 n 0000635129 00000 n 0000634685 00000 n 0000634532 00000 n 0000634443 00000 n 0000634980 00000 n 0000634834 00000 n 0000635949 00000 n 0000635502 00000 n 0000635349 00000 n 0000635260 00000 n 0000635800 00000 n 0000635651 00000 n 0000636770 00000 n 0000636322 00000 n 0000636169 00000 n 0000636080 00000 n 0000636622 00000 n 0000636470 00000 n 0000637797 00000 n 0000637143 00000 n 0000636990 00000 n 0000636901 00000 n 0000637648 00000 n 0000637470 00000 n 0000637292 00000 n 0000637381 00000 n 0000638614 00000 n 0000638170 00000 n 0000638017 00000 n 0000637928 00000 n 0000638465 00000 n 0000638319 00000 n 0000639431 00000 n 0000638987 00000 n 0000638834 00000 n 0000638745 00000 n 0000639282 00000 n 0000639136 00000 n 0000640248 00000 n 0000639804 00000 n 0000639651 00000 n 0000639562 00000 n 0000640099 00000 n 0000639953 00000 n 0000641065 00000 n 0000640621 00000 n 0000640468 00000 n 0000640379 00000 n 0000640916 00000 n 0000640770 00000 n 0000641916 00000 n 0000641420 00000 n 0000641285 00000 n 0000641196 00000 n 0000641767 00000 n 0000641569 00000 n 0000319116 00000 n 0000150197 00000 n 0000153286 00000 n 0000642733 00000 n 0000642288 00000 n 0000642135 00000 n 0000642047 00000 n 0000642584 00000 n 0000642437 00000 n 0000643648 00000 n 0000643105 00000 n 0000642952 00000 n 0000642864 00000 n 0000643499 00000 n 0000643342 00000 n 0000643254 00000 n 0000644464 00000 n 0000644020 00000 n 0000643867 00000 n 0000643779 00000 n 0000644315 00000 n 0000644169 00000 n 0000645281 00000 n 0000644837 00000 n 0000644684 00000 n 0000644595 00000 n 0000645132 00000 n 0000644986 00000 n 0000646305 00000 n 0000645654 00000 n 0000645501 00000 n 0000645412 00000 n 0000646156 00000 n 0000645981 00000 n 0000645803 00000 n 0000645892 00000 n 0000647126 00000 n 0000646678 00000 n 0000646525 00000 n 0000646436 00000 n 0000646978 00000 n 0000646826 00000 n 0000647595 00000 n 0000647853 00000 n 0000647724 00000 n 0000647989 00000 n 0000648347 00000 n 0000648169 00000 n 0000648258 00000 n 0000648560 00000 n 0000648821 00000 n 0000648732 00000 n 0000649100 00000 n 0000649011 00000 n 0000649360 00000 n 0000649271 00000 n 0000649638 00000 n 0000649549 00000 n 0000319277 00000 n 0000153310 00000 n 0000156309 00000 n 0000650310 00000 n 0000649870 00000 n 0000649980 00000 n 0000650090 00000 n 0000650200 00000 n 0000650527 00000 n 0000650827 00000 n 0000650698 00000 n 0000650964 00000 n 0000651230 00000 n 0000651141 00000 n 0000651509 00000 n 0000651420 00000 n 0000651769 00000 n 0000651680 00000 n 0000652029 00000 n 0000651940 00000 n 0000652289 00000 n 0000652200 00000 n 0000652656 00000 n 0000652478 00000 n 0000652567 00000 n 0000652974 00000 n 0000652863 00000 n 0000653402 00000 n 0000653180 00000 n 0000653291 00000 n 0000653600 00000 n 0000653859 00000 n 0000653730 00000 n 0000654106 00000 n 0000653995 00000 n 0000654636 00000 n 0000654305 00000 n 0000319530 00000 n 0000156333 00000 n 0000159646 00000 n 0000654416 00000 n 0000654526 00000 n 0000655133 00000 n 0000655022 00000 n 0000655629 00000 n 0000655333 00000 n 0000655444 00000 n 0000655533 00000 n 0000655849 00000 n 0000657982 00000 n 0000656796 00000 n 0000656021 00000 n 0000656706 00000 n 0000656472 00000 n 0000656102 00000 n 0000656198 00000 n 0000656287 00000 n 0000656383 00000 n 0000657885 00000 n 0000656893 00000 n 0000657795 00000 n 0000657551 00000 n 0000656974 00000 n 0000657070 00000 n 0000657166 00000 n 0000657262 00000 n 0000657373 00000 n 0000657462 00000 n 0000658110 00000 n 0000319747 00000 n 0000159670 00000 n 0000163420 00000 n 0000658410 00000 n 0000658282 00000 n 0000671683 00000 n 0000659283 00000 n 0000658528 00000 n 0000659193 00000 n 0000658973 00000 n 0000658608 00000 n 0000658703 00000 n 0000658795 00000 n 0000658884 00000 n 0000659916 00000 n 0000659380 00000 n 0000659826 00000 n 0000659646 00000 n 0000659461 00000 n 0000659557 00000 n 0000660880 00000 n 0000660013 00000 n 0000660790 00000 n 0000660568 00000 n 0000660094 00000 n 0000660190 00000 n 0000660279 00000 n 0000660368 00000 n 0000660457 00000 n 0000661526 00000 n 0000660977 00000 n 0000661436 00000 n 0000661253 00000 n 0000661058 00000 n 0000661154 00000 n 0000662732 00000 n 0000661623 00000 n 0000662642 00000 n 0000662385 00000 n 0000661704 00000 n 0000661806 00000 n 0000661902 00000 n 0000661998 00000 n 0000662094 00000 n 0000662193 00000 n 0000662289 00000 n 0000319928 00000 n 0000163444 00000 n 0000167042 00000 n 0000663457 00000 n 0000662829 00000 n 0000663367 00000 n 0000663181 00000 n 0000662909 00000 n 0000663004 00000 n 0000663092 00000 n 0000664291 00000 n 0000663554 00000 n 0000664201 00000 n 0000663998 00000 n 0000663635 00000 n 0000663731 00000 n 0000663820 00000 n 0000663909 00000 n 0000667511 00000 n 0000664388 00000 n 0000667331 00000 n 0000664654 00000 n 0000664469 00000 n 0000664565 00000 n 0000664956 00000 n 0000664867 00000 n 0000665238 00000 n 0000665149 00000 n 0000665501 00000 n 0000665412 00000 n 0000665764 00000 n 0000665675 00000 n 0000666027 00000 n 0000665938 00000 n 0000666290 00000 n 0000666201 00000 n 0000666553 00000 n 0000666464 00000 n 0000666816 00000 n 0000666727 00000 n 0000667097 00000 n 0000667008 00000 n 0000668134 00000 n 0000667608 00000 n 0000668044 00000 n 0000667785 00000 n 0000667689 00000 n 0000320089 00000 n 0000167066 00000 n 0000169810 00000 n 0000671586 00000 n 0000668231 00000 n 0000671396 00000 n 0000668406 00000 n 0000668311 00000 n 0000668682 00000 n 0000668594 00000 n 0000668893 00000 n 0000669174 00000 n 0000669086 00000 n 0000669456 00000 n 0000669367 00000 n 0000669737 00000 n 0000669648 00000 n 0000670033 00000 n 0000669944 00000 n 0000670244 00000 n 0000670527 00000 n 0000670438 00000 n 0000670809 00000 n 0000670720 00000 n 0000671179 00000 n 0000671001 00000 n 0000671090 00000 n 0000671891 00000 n 0000672021 00000 n 0000674636 00000 n 0000672769 00000 n 0000672192 00000 n 0000672679 00000 n 0000672495 00000 n 0000672273 00000 n 0000672384 00000 n 0000673303 00000 n 0000672866 00000 n 0000673213 00000 n 0000673058 00000 n 0000672947 00000 n 0000673713 00000 n 0000673400 00000 n 0000673623 00000 n 0000673481 00000 n 0000674126 00000 n 0000673810 00000 n 0000674036 00000 n 0000673891 00000 n 0000674539 00000 n 0000674223 00000 n 0000674449 00000 n 0000674304 00000 n 0000674794 00000 n 0000678061 00000 n 0000675304 00000 n 0000674966 00000 n 0000675214 00000 n 0000675047 00000 n 0000675714 00000 n 0000675401 00000 n 0000675624 00000 n 0000675482 00000 n 0000676124 00000 n 0000675811 00000 n 0000676034 00000 n 0000675892 00000 n 0000676636 00000 n 0000676221 00000 n 0000676546 00000 n 0000676391 00000 n 0000676302 00000 n 0000677148 00000 n 0000676733 00000 n 0000677058 00000 n 0000676903 00000 n 0000676814 00000 n 0000320288 00000 n 0000169834 00000 n 0000172501 00000 n 0000677556 00000 n 0000677245 00000 n 0000677466 00000 n 0000677325 00000 n 0000677964 00000 n 0000677653 00000 n 0000677874 00000 n 0000677733 00000 n 0000678239 00000 n 0000678632 00000 n 0000678412 00000 n 0000678522 00000 n 0000678828 00000 n 0000678958 00000 n 0000679135 00000 n 0000682942 00000 n 0000679639 00000 n 0000679307 00000 n 0000679549 00000 n 0000679388 00000 n 0000680049 00000 n 0000679736 00000 n 0000679959 00000 n 0000679817 00000 n 0000680561 00000 n 0000680146 00000 n 0000680471 00000 n 0000680316 00000 n 0000680227 00000 n 0000680971 00000 n 0000680658 00000 n 0000680881 00000 n 0000680739 00000 n 0000681486 00000 n 0000681068 00000 n 0000681396 00000 n 0000681241 00000 n 0000681149 00000 n 0000681998 00000 n 0000681583 00000 n 0000681908 00000 n 0000681753 00000 n 0000681664 00000 n 0000682845 00000 n 0000682095 00000 n 0000682755 00000 n 0000682546 00000 n 0000682176 00000 n 0000682272 00000 n 0000682361 00000 n 0000682450 00000 n 0000683120 00000 n 0000685975 00000 n 0000683624 00000 n 0000683292 00000 n 0000683534 00000 n 0000683373 00000 n 0000684136 00000 n 0000683721 00000 n 0000684046 00000 n 0000683891 00000 n 0000683802 00000 n 0000684648 00000 n 0000684233 00000 n 0000684558 00000 n 0000684403 00000 n 0000684314 00000 n 0000685058 00000 n 0000684745 00000 n 0000684968 00000 n 0000684826 00000 n 0000685468 00000 n 0000685155 00000 n 0000685378 00000 n 0000685236 00000 n 0000685878 00000 n 0000685565 00000 n 0000685788 00000 n 0000685646 00000 n 0000686143 00000 n 0000689202 00000 n 0000686647 00000 n 0000686315 00000 n 0000686557 00000 n 0000686396 00000 n 0000687159 00000 n 0000686744 00000 n 0000687069 00000 n 0000686914 00000 n 0000686825 00000 n 0000687671 00000 n 0000687256 00000 n 0000687581 00000 n 0000687426 00000 n 0000687337 00000 n 0000688183 00000 n 0000687768 00000 n 0000688093 00000 n 0000687938 00000 n 0000687849 00000 n 0000688695 00000 n 0000688280 00000 n 0000688605 00000 n 0000688450 00000 n 0000688361 00000 n 0000689105 00000 n 0000688792 00000 n 0000689015 00000 n 0000688873 00000 n 0000320478 00000 n 0000172525 00000 n 0000174958 00000 n 0000689370 00000 n 0000689568 00000 n 0000689480 00000 n 0000689842 00000 n 0000689754 00000 n 0000690113 00000 n 0000690025 00000 n 0000690392 00000 n 0000690303 00000 n 0000690581 00000 n 0000690845 00000 n 0000690756 00000 n 0000691039 00000 n 0000691214 00000 n 0000691398 00000 n 0000691659 00000 n 0000691570 00000 n 0000691847 00000 n 0000693893 00000 n 0000692460 00000 n 0000692019 00000 n 0000692370 00000 n 0000692196 00000 n 0000692100 00000 n 0000692870 00000 n 0000692557 00000 n 0000692780 00000 n 0000692638 00000 n 0000693280 00000 n 0000692967 00000 n 0000693190 00000 n 0000693048 00000 n 0000693796 00000 n 0000693377 00000 n 0000693706 00000 n 0000693554 00000 n 0000693458 00000 n 0000694041 00000 n 0000696087 00000 n 0000694654 00000 n 0000694213 00000 n 0000694564 00000 n 0000694390 00000 n 0000694294 00000 n 0000695064 00000 n 0000694751 00000 n 0000694974 00000 n 0000694832 00000 n 0000695474 00000 n 0000695161 00000 n 0000695384 00000 n 0000695242 00000 n 0000695990 00000 n 0000695571 00000 n 0000695900 00000 n 0000695748 00000 n 0000695652 00000 n 0000696235 00000 n 0000320639 00000 n 0000174982 00000 n 0000177943 00000 n 0000696737 00000 n 0000696407 00000 n 0000696517 00000 n 0000696627 00000 n 0000696925 00000 n 0000714994 00000 n 0000698654 00000 n 0000697054 00000 n 0000698554 00000 n 0000697229 00000 n 0000697134 00000 n 0000698423 00000 n 0000697814 00000 n 0000697399 00000 n 0000697724 00000 n 0000697569 00000 n 0000697480 00000 n 0000698326 00000 n 0000697911 00000 n 0000698236 00000 n 0000698081 00000 n 0000697992 00000 n 0000699956 00000 n 0000698751 00000 n 0000699856 00000 n 0000698928 00000 n 0000698832 00000 n 0000699735 00000 n 0000699638 00000 n 0000699080 00000 n 0000699548 00000 n 0000699383 00000 n 0000699161 00000 n 0000699272 00000 n 0000701115 00000 n 0000700053 00000 n 0000701015 00000 n 0000700230 00000 n 0000700134 00000 n 0000700894 00000 n 0000700797 00000 n 0000700382 00000 n 0000700707 00000 n 0000700552 00000 n 0000700463 00000 n 0000704362 00000 n 0000701212 00000 n 0000704262 00000 n 0000701389 00000 n 0000701293 00000 n 0000704101 00000 n 0000701956 00000 n 0000701541 00000 n 0000701866 00000 n 0000701711 00000 n 0000701622 00000 n 0000702468 00000 n 0000702053 00000 n 0000702378 00000 n 0000702223 00000 n 0000702134 00000 n 0000702980 00000 n 0000702565 00000 n 0000702890 00000 n 0000702735 00000 n 0000702646 00000 n 0000703492 00000 n 0000703077 00000 n 0000703402 00000 n 0000703247 00000 n 0000703158 00000 n 0000704004 00000 n 0000703589 00000 n 0000703914 00000 n 0000703759 00000 n 0000703670 00000 n 0000707087 00000 n 0000704459 00000 n 0000706987 00000 n 0000704636 00000 n 0000704540 00000 n 0000706836 00000 n 0000705203 00000 n 0000704788 00000 n 0000705113 00000 n 0000704958 00000 n 0000704869 00000 n 0000705715 00000 n 0000705300 00000 n 0000705625 00000 n 0000705470 00000 n 0000705381 00000 n 0000706227 00000 n 0000705812 00000 n 0000706137 00000 n 0000705982 00000 n 0000705893 00000 n 0000706739 00000 n 0000706324 00000 n 0000706649 00000 n 0000706494 00000 n 0000706405 00000 n 0000709812 00000 n 0000707184 00000 n 0000709712 00000 n 0000707361 00000 n 0000707265 00000 n 0000709561 00000 n 0000707928 00000 n 0000707513 00000 n 0000707838 00000 n 0000707683 00000 n 0000707594 00000 n 0000708440 00000 n 0000708025 00000 n 0000708350 00000 n 0000708195 00000 n 0000708106 00000 n 0000708952 00000 n 0000708537 00000 n 0000708862 00000 n 0000708707 00000 n 0000708618 00000 n 0000709464 00000 n 0000709049 00000 n 0000709374 00000 n 0000709219 00000 n 0000709130 00000 n 0000710973 00000 n 0000709909 00000 n 0000710873 00000 n 0000710086 00000 n 0000709990 00000 n 0000710752 00000 n 0000710655 00000 n 0000710238 00000 n 0000710565 00000 n 0000710409 00000 n 0000710319 00000 n 0000712139 00000 n 0000711070 00000 n 0000712039 00000 n 0000711249 00000 n 0000711152 00000 n 0000711918 00000 n 0000711821 00000 n 0000711402 00000 n 0000711731 00000 n 0000711574 00000 n 0000711484 00000 n 0000713835 00000 n 0000712236 00000 n 0000713735 00000 n 0000712415 00000 n 0000712318 00000 n 0000713604 00000 n 0000712991 00000 n 0000712568 00000 n 0000712901 00000 n 0000712740 00000 n 0000712650 00000 n 0000713507 00000 n 0000713088 00000 n 0000713417 00000 n 0000713260 00000 n 0000713170 00000 n 0000714897 00000 n 0000713932 00000 n 0000714797 00000 n 0000714111 00000 n 0000714014 00000 n 0000714676 00000 n 0000714579 00000 n 0000714264 00000 n 0000714489 00000 n 0000714346 00000 n 0000715202 00000 n 0000715542 00000 n 0000715333 00000 n 0000715445 00000 n 0000715750 00000 n 0000320865 00000 n 0000177967 00000 n 0000181711 00000 n 0000716015 00000 n 0000715927 00000 n 0000716293 00000 n 0000716205 00000 n 0000716552 00000 n 0000716464 00000 n 0000716811 00000 n 0000716723 00000 n 0000717070 00000 n 0000716982 00000 n 0000717329 00000 n 0000717241 00000 n 0000717629 00000 n 0000717518 00000 n 0000717915 00000 n 0000717819 00000 n 0000721806 00000 n 0000718429 00000 n 0000718094 00000 n 0000718339 00000 n 0000718175 00000 n 0000718857 00000 n 0000718526 00000 n 0000718767 00000 n 0000718607 00000 n 0000719273 00000 n 0000718954 00000 n 0000719183 00000 n 0000719035 00000 n 0000719807 00000 n 0000719370 00000 n 0000719717 00000 n 0000719550 00000 n 0000719451 00000 n 0000720638 00000 n 0000719904 00000 n 0000720548 00000 n 0000720351 00000 n 0000719985 00000 n 0000720084 00000 n 0000720173 00000 n 0000720262 00000 n 0000721296 00000 n 0000720735 00000 n 0000721206 00000 n 0000721035 00000 n 0000720816 00000 n 0000720915 00000 n 0000721709 00000 n 0000721393 00000 n 0000721619 00000 n 0000721474 00000 n 0000722073 00000 n 0000721984 00000 n 0000722352 00000 n 0000722263 00000 n 0000722612 00000 n 0000722523 00000 n 0000722872 00000 n 0000722783 00000 n 0000723132 00000 n 0000723043 00000 n 0000321046 00000 n 0000181735 00000 n 0000184742 00000 n 0000724237 00000 n 0000723732 00000 n 0000723321 00000 n 0000723642 00000 n 0000723489 00000 n 0000723401 00000 n 0000724140 00000 n 0000723829 00000 n 0000724050 00000 n 0000723909 00000 n 0000724365 00000 n 0000724494 00000 n 0000724750 00000 n 0000724622 00000 n 0000724886 00000 n 0000725251 00000 n 0000725059 00000 n 0000725155 00000 n 0000725554 00000 n 0000725458 00000 n 0000726193 00000 n 0000725748 00000 n 0000725837 00000 n 0000725926 00000 n 0000726015 00000 n 0000726104 00000 n 0000726700 00000 n 0000726433 00000 n 0000726522 00000 n 0000726611 00000 n 0000727009 00000 n 0000726920 00000 n 0000727197 00000 n 0000727498 00000 n 0000727369 00000 n 0000727827 00000 n 0000727635 00000 n 0000727731 00000 n 0000728139 00000 n 0000321207 00000 n 0000184766 00000 n 0000187311 00000 n 0000728042 00000 n 0000728611 00000 n 0000728391 00000 n 0000728501 00000 n 0000728811 00000 n 0000729112 00000 n 0000728983 00000 n 0000729249 00000 n 0000729426 00000 n 0000729604 00000 n 0000729785 00000 n 0000730086 00000 n 0000729957 00000 n 0000730223 00000 n 0000730400 00000 n 0000730578 00000 n 0000730759 00000 n 0000731060 00000 n 0000730931 00000 n 0000731197 00000 n 0000321397 00000 n 0000187335 00000 n 0000190348 00000 n 0000731377 00000 n 0000731533 00000 n 0000731712 00000 n 0000732011 00000 n 0000731883 00000 n 0000732148 00000 n 0000732779 00000 n 0000732331 00000 n 0000732420 00000 n 0000732509 00000 n 0000732598 00000 n 0000732687 00000 n 0000733126 00000 n 0000733037 00000 n 0000733662 00000 n 0000733329 00000 n 0000733440 00000 n 0000733551 00000 n 0000733873 00000 n 0000734174 00000 n 0000734045 00000 n 0000734400 00000 n 0000734311 00000 n 0000321596 00000 n 0000190372 00000 n 0000193600 00000 n 0000734593 00000 n 0000734753 00000 n 0000735021 00000 n 0000734932 00000 n 0000735332 00000 n 0000735221 00000 n 0000735517 00000 n 0000735818 00000 n 0000735689 00000 n 0000736177 00000 n 0000735955 00000 n 0000736066 00000 n 0000736748 00000 n 0000736392 00000 n 0000736481 00000 n 0000736570 00000 n 0000736659 00000 n 0000736987 00000 n 0000321795 00000 n 0000193624 00000 n 0000196484 00000 n 0000737265 00000 n 0000737177 00000 n 0000737658 00000 n 0000737437 00000 n 0000737547 00000 n 0000737854 00000 n 0000738155 00000 n 0000738026 00000 n 0000738292 00000 n 0000738659 00000 n 0000738478 00000 n 0000738570 00000 n 0000738869 00000 n 0000739164 00000 n 0000739053 00000 n 0000739580 00000 n 0000739358 00000 n 0000739469 00000 n 0000739778 00000 n 0000740079 00000 n 0000739950 00000 n 0000740216 00000 n 0000322012 00000 n 0000196508 00000 n 0000199578 00000 n 0000740487 00000 n 0000740399 00000 n 0000740836 00000 n 0000740659 00000 n 0000740747 00000 n 0000741158 00000 n 0000741047 00000 n 0000741343 00000 n 0000741644 00000 n 0000741515 00000 n 0000741873 00000 n 0000741781 00000 n 0000742161 00000 n 0000742069 00000 n 0000742444 00000 n 0000742355 00000 n 0000742638 00000 n 0000742939 00000 n 0000742810 00000 n 0000743343 00000 n 0000743076 00000 n 0000743165 00000 n 0000743254 00000 n 0000743915 00000 n 0000743562 00000 n 0000322193 00000 n 0000199602 00000 n 0000202540 00000 n 0000743651 00000 n 0000743739 00000 n 0000743827 00000 n 0000744483 00000 n 0000744778 00000 n 0000744667 00000 n 0000744963 00000 n 0000745264 00000 n 0000745135 00000 n 0000745490 00000 n 0000745401 00000 n 0000745683 00000 n 0000745864 00000 n 0000746045 00000 n 0000746346 00000 n 0000746217 00000 n 0000746483 00000 n 0000746666 00000 n 0000322374 00000 n 0000202564 00000 n 0000205296 00000 n 0000746879 00000 n 0000747058 00000 n 0000747357 00000 n 0000747229 00000 n 0000747494 00000 n 0000747675 00000 n 0000747859 00000 n 0000748160 00000 n 0000748031 00000 n 0000748386 00000 n 0000748297 00000 n 0000748588 00000 n 0000748889 00000 n 0000748760 00000 n 0000749026 00000 n 0000749206 00000 n 0000322535 00000 n 0000205320 00000 n 0000209100 00000 n 0000750525 00000 n 0000749460 00000 n 0000749548 00000 n 0000749636 00000 n 0000749724 00000 n 0000749813 00000 n 0000749902 00000 n 0000749991 00000 n 0000750080 00000 n 0000750169 00000 n 0000750258 00000 n 0000750347 00000 n 0000750436 00000 n 0000750860 00000 n 0000751161 00000 n 0000751032 00000 n 0000751743 00000 n 0000751298 00000 n 0000751387 00000 n 0000751476 00000 n 0000751565 00000 n 0000751654 00000 n 0000752089 00000 n 0000752000 00000 n 0000752286 00000 n 0000752836 00000 n 0000752473 00000 n 0000752569 00000 n 0000752658 00000 n 0000752747 00000 n 0000753081 00000 n 0000322696 00000 n 0000209124 00000 n 0000212142 00000 n 0000753265 00000 n 0000753545 00000 n 0000753417 00000 n 0000753682 00000 n 0000753942 00000 n 0000753854 00000 n 0000754309 00000 n 0000754131 00000 n 0000754220 00000 n 0000754519 00000 n 0000754820 00000 n 0000754691 00000 n 0000755446 00000 n 0000754957 00000 n 0000755068 00000 n 0000755179 00000 n 0000755268 00000 n 0000755357 00000 n 0000755709 00000 n 0000756010 00000 n 0000755881 00000 n 0000756147 00000 n 0000756330 00000 n 0000322886 00000 n 0000212166 00000 n 0000215834 00000 n 0000756546 00000 n 0000757439 00000 n 0000756725 00000 n 0000756813 00000 n 0000756902 00000 n 0000756991 00000 n 0000757080 00000 n 0000757169 00000 n 0000757258 00000 n 0000757350 00000 n 0000757816 00000 n 0000757727 00000 n 0000758281 00000 n 0000758007 00000 n 0000758096 00000 n 0000758192 00000 n 0000758504 00000 n 0000758805 00000 n 0000758676 00000 n 0000758942 00000 n 0000759389 00000 n 0000759122 00000 n 0000759211 00000 n 0000759300 00000 n 0000759707 00000 n 0000759618 00000 n 0000759986 00000 n 0000759897 00000 n 0000323047 00000 n 0000215858 00000 n 0000219416 00000 n 0000760245 00000 n 0000760157 00000 n 0000760523 00000 n 0000760435 00000 n 0000760782 00000 n 0000760694 00000 n 0000761041 00000 n 0000760953 00000 n 0000761300 00000 n 0000761212 00000 n 0000761559 00000 n 0000761471 00000 n 0000761818 00000 n 0000761730 00000 n 0000762077 00000 n 0000761989 00000 n 0000762443 00000 n 0000762266 00000 n 0000762354 00000 n 0000762833 00000 n 0000762655 00000 n 0000762744 00000 n 0000763393 00000 n 0000763037 00000 n 0000763126 00000 n 0000763215 00000 n 0000763304 00000 n 0000763807 00000 n 0000763629 00000 n 0000763718 00000 n 0000764032 00000 n 0000764333 00000 n 0000764204 00000 n 0000764470 00000 n 0000764647 00000 n 0000323208 00000 n 0000219440 00000 n 0000221838 00000 n 0000764930 00000 n 0000765119 00000 n 0000765297 00000 n 0000765598 00000 n 0000765469 00000 n 0000765735 00000 n 0000765912 00000 n 0000766363 00000 n 0000766096 00000 n 0000766185 00000 n 0000766274 00000 n 0000766583 00000 n 0000810242 00000 n 0000810390 00000 n 0000810540 00000 n 0000810691 00000 n 0000810841 00000 n 0000810992 00000 n 0000811143 00000 n 0000811294 00000 n 0000811482 00000 n 0000811633 00000 n 0000811784 00000 n 0000811935 00000 n 0000812086 00000 n 0000812237 00000 n 0000812388 00000 n 0000812539 00000 n 0000812690 00000 n 0000812841 00000 n 0000812992 00000 n 0000813198 00000 n 0000813347 00000 n 0000813526 00000 n 0000813705 00000 n 0000813856 00000 n 0000814007 00000 n 0000814157 00000 n 0000814308 00000 n 0000814459 00000 n 0000814610 00000 n 0000814760 00000 n 0000814911 00000 n 0000815061 00000 n 0000815212 00000 n 0000815363 00000 n 0000815550 00000 n 0000815699 00000 n 0000815850 00000 n 0000815998 00000 n 0000816148 00000 n 0000816299 00000 n 0000816450 00000 n 0000816619 00000 n 0000816768 00000 n 0000816919 00000 n 0000817070 00000 n 0000817221 00000 n 0000817452 00000 n 0000817640 00000 n 0000817846 00000 n 0000818053 00000 n 0000818203 00000 n 0000818354 00000 n 0000818503 00000 n 0000818653 00000 n 0000818804 00000 n 0000818954 00000 n 0000819105 00000 n 0000819255 00000 n 0000819405 00000 n 0000819555 00000 n 0000819703 00000 n 0000819854 00000 n 0000820004 00000 n 0000820153 00000 n 0000820304 00000 n 0000820455 00000 n 0000820606 00000 n 0000820816 00000 n 0000820967 00000 n 0000821117 00000 n 0000821267 00000 n 0000821418 00000 n 0000821568 00000 n 0000821719 00000 n 0000821897 00000 n 0000822048 00000 n 0000822198 00000 n 0000822377 00000 n 0000822527 00000 n 0000822678 00000 n 0000822827 00000 n 0000822994 00000 n 0000823143 00000 n 0000823294 00000 n 0000823444 00000 n 0000823595 00000 n 0000823746 00000 n 0000823896 00000 n 0000824047 00000 n 0000824197 00000 n 0000824348 00000 n 0000824499 00000 n 0000824650 00000 n 0000824801 00000 n 0000824950 00000 n 0000825126 00000 n 0000825276 00000 n 0000825427 00000 n 0000825577 00000 n 0000825724 00000 n 0000825873 00000 n 0000826052 00000 n 0000826203 00000 n 0000826353 00000 n 0000826504 00000 n 0000826692 00000 n 0000826842 00000 n 0000826993 00000 n 0000827189 00000 n 0000827377 00000 n 0000827549 00000 n 0000827699 00000 n 0000827880 00000 n 0000828057 00000 n 0000828208 00000 n 0000828397 00000 n 0000828592 00000 n 0000828755 00000 n 0000828931 00000 n 0000829118 00000 n 0000829287 00000 n 0000829436 00000 n 0000829586 00000 n 0000829758 00000 n 0000829943 00000 n 0000830132 00000 n 0000830296 00000 n 0000830474 00000 n 0000830624 00000 n 0000830774 00000 n 0000830924 00000 n 0000831074 00000 n 0000831224 00000 n 0000831374 00000 n 0000831524 00000 n 0000831674 00000 n 0000831823 00000 n 0000831973 00000 n 0000832123 00000 n 0000832273 00000 n 0000832423 00000 n 0000832573 00000 n 0000832723 00000 n 0000832874 00000 n 0000833053 00000 n 0000833204 00000 n 0000833355 00000 n 0000833505 00000 n 0000833655 00000 n 0000833806 00000 n 0000833956 00000 n 0000834107 00000 n 0000834257 00000 n 0000834408 00000 n 0000834559 00000 n 0000834710 00000 n 0000834859 00000 n 0000835007 00000 n 0000835156 00000 n 0000835306 00000 n 0000835457 00000 n 0000835608 00000 n 0000835759 00000 n 0000835909 00000 n 0000836059 00000 n 0000836210 00000 n 0000836360 00000 n 0000836510 00000 n 0000836661 00000 n 0000836812 00000 n 0000836962 00000 n 0000837113 00000 n 0000837264 00000 n 0000837415 00000 n 0000837565 00000 n 0000837714 00000 n 0000837864 00000 n 0000838014 00000 n 0000838165 00000 n 0000838315 00000 n 0000838465 00000 n 0000838616 00000 n 0000838767 00000 n 0000838918 00000 n 0000839069 00000 n 0000839264 00000 n 0000839414 00000 n 0000839565 00000 n 0000839716 00000 n 0000839867 00000 n 0000840018 00000 n 0000840169 00000 n 0000840320 00000 n 0000840471 00000 n 0000840622 00000 n 0000840773 00000 n 0000840924 00000 n 0000841075 00000 n 0000841226 00000 n 0000841377 00000 n 0000841528 00000 n 0000841679 00000 n 0000841830 00000 n 0000841981 00000 n 0000842132 00000 n 0000842283 00000 n 0000842434 00000 n 0000842585 00000 n 0000842736 00000 n 0000842886 00000 n 0000843034 00000 n 0000843182 00000 n 0000843329 00000 n 0000843478 00000 n 0000843628 00000 n 0000843778 00000 n 0000843928 00000 n 0000844077 00000 n 0000844226 00000 n 0000844376 00000 n 0000844525 00000 n 0000844674 00000 n 0000844824 00000 n 0000844974 00000 n 0000845124 00000 n 0000845273 00000 n 0000845422 00000 n 0000845572 00000 n 0000845722 00000 n 0000845872 00000 n 0000846022 00000 n 0000846172 00000 n 0000846322 00000 n 0000846472 00000 n 0000846621 00000 n 0000846769 00000 n 0000846918 00000 n 0000847067 00000 n 0000847216 00000 n 0000847365 00000 n 0000847514 00000 n 0000847662 00000 n 0000847811 00000 n 0000847960 00000 n 0000848109 00000 n 0000848258 00000 n 0000848406 00000 n 0000848555 00000 n 0000848704 00000 n 0000848853 00000 n 0000849002 00000 n 0000809680 00000 n 0000221862 00000 n 0000223816 00000 n 0000223840 00000 n 0000224036 00000 n 0000224329 00000 n 0000224494 00000 n 0000235540 00000 n 0000235565 00000 n 0000235762 00000 n 0000236477 00000 n 0000237021 00000 n 0000243757 00000 n 0000243781 00000 n 0000243988 00000 n 0000244474 00000 n 0000244817 00000 n 0000249276 00000 n 0000249300 00000 n 0000249511 00000 n 0000249901 00000 n 0000250156 00000 n 0000260170 00000 n 0000260194 00000 n 0000260396 00000 n 0000261018 00000 n 0000261487 00000 n 0000265609 00000 n 0000265633 00000 n 0000265840 00000 n 0000266203 00000 n 0000266432 00000 n 0000272266 00000 n 0000272290 00000 n 0000272500 00000 n 0000272892 00000 n 0000273151 00000 n 0000281349 00000 n 0000281373 00000 n 0000281576 00000 n 0000282011 00000 n 0000282310 00000 n 0000289754 00000 n 0000289778 00000 n 0000289986 00000 n 0000290374 00000 n 0000290627 00000 n 0000309975 00000 n 0000310000 00000 n 0000310198 00000 n 0000310909 00000 n 0000311467 00000 n 0000311614 00000 n 0000323369 00000 n 0000323432 00000 n 0000323571 00000 n 0000323756 00000 n 0000323936 00000 n 0000324136 00000 n 0000324280 00000 n 0000324486 00000 n 0000324726 00000 n 0000324915 00000 n 0000325115 00000 n 0000325267 00000 n 0000325415 00000 n 0000325599 00000 n 0000325799 00000 n 0000326051 00000 n 0000326301 00000 n 0000326559 00000 n 0000326797 00000 n 0000326993 00000 n 0000327197 00000 n 0000327377 00000 n 0000327572 00000 n 0000327779 00000 n 0000327986 00000 n 0000328177 00000 n 0000328368 00000 n 0000328567 00000 n 0000328774 00000 n 0000328966 00000 n 0000329263 00000 n 0000329452 00000 n 0000329643 00000 n 0000329772 00000 n 0000329971 00000 n 0000330176 00000 n 0000330323 00000 n 0000330494 00000 n 0000330679 00000 n 0000330876 00000 n 0000331009 00000 n 0000331212 00000 n 0000331401 00000 n 0000331631 00000 n 0000331850 00000 n 0000331995 00000 n 0000332218 00000 n 0000332433 00000 n 0000332676 00000 n 0000332979 00000 n 0000333282 00000 n 0000333487 00000 n 0000333732 00000 n 0000333973 00000 n 0000334182 00000 n 0000334515 00000 n 0000334668 00000 n 0000334825 00000 n 0000335146 00000 n 0000335319 00000 n 0000335492 00000 n 0000335725 00000 n 0000335882 00000 n 0000336163 00000 n 0000336422 00000 n 0000336649 00000 n 0000336880 00000 n 0000337095 00000 n 0000337304 00000 n 0000337520 00000 n 0000337698 00000 n 0000337907 00000 n 0000338130 00000 n 0000338353 00000 n 0000338576 00000 n 0000338799 00000 n 0000339022 00000 n 0000339245 00000 n 0000339468 00000 n 0000339691 00000 n 0000339914 00000 n 0000340137 00000 n 0000340360 00000 n 0000340583 00000 n 0000340806 00000 n 0000341029 00000 n 0000341256 00000 n 0000341483 00000 n 0000341706 00000 n 0000341929 00000 n 0000342152 00000 n 0000342375 00000 n 0000342598 00000 n 0000342821 00000 n 0000773343 00000 n 0000773617 00000 n 0000849151 00000 n 0000849390 00000 n trailer < ] /DocChecksum /6D10989D615E40EEADC90AD63DEBD3BC >> startxref 850223 %%EOF