summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Gallo <aamsgallo@gmail.com>2018-05-08 01:59:30 +0200
committerAlejandro Gallo <aamsgallo@gmail.com>2018-05-08 01:59:30 +0200
commit10296db2eb2737f0695ed812708f4e0ec68a32e4 (patch)
tree1ac4a9ab8239f88c61ee0148be26d5585fdc1824
parent7ddc9f57178423f7e1965d6bbbb197fa2e617a1a (diff)
parentb97d0e1ce54fcbe3bcdc6d6fe396ed4c9fc282ac (diff)
Merge branch 'master' into serve
-rw-r--r--.travis.yml2
-rw-r--r--README.md24
-rw-r--r--doc/build/man/papis-config.1775
-rw-r--r--doc/build/man/papis.11430
-rw-r--r--doc/source/commands.rst19
-rw-r--r--doc/source/conf.py1
-rw-r--r--doc/source/database_structure.rst185
-rw-r--r--doc/source/faq.rst5
-rw-r--r--doc/source/index.rst2
-rw-r--r--doc/source/install.rst26
-rw-r--r--doc/source/library_structure.rst61
-rw-r--r--doc/source/queries.rst27
-rw-r--r--doc/source/quick_start.rst6
-rw-r--r--papis/__init__.py2
-rw-r--r--papis/api.py16
-rw-r--r--papis/arxiv.py16
-rw-r--r--papis/bibtex.py181
-rw-r--r--papis/cache.py112
-rw-r--r--papis/commands/__init__.py14
-rw-r--r--papis/commands/add.py893
-rw-r--r--papis/commands/addto.py102
-rw-r--r--papis/commands/browse.py13
-rw-r--r--papis/commands/check.py60
-rw-r--r--papis/commands/config.py33
-rw-r--r--papis/commands/default.py7
-rw-r--r--papis/commands/edit.py73
-rw-r--r--papis/commands/explore.py12
-rw-r--r--papis/commands/export.py138
-rw-r--r--papis/commands/git.py17
-rw-r--r--papis/commands/gui.py7
-rw-r--r--papis/commands/list.py176
-rw-r--r--papis/commands/mv.py60
-rw-r--r--papis/commands/open.py176
-rw-r--r--papis/commands/rename.py70
-rw-r--r--papis/commands/rm.py42
-rw-r--r--papis/commands/run.py46
-rw-r--r--papis/commands/sync.py45
-rw-r--r--papis/commands/update.py121
-rw-r--r--papis/config.py501
-rw-r--r--papis/crossref.py279
-rw-r--r--papis/database/__init__.py29
-rw-r--r--papis/database/base.py16
-rw-r--r--papis/database/cache.py40
-rw-r--r--papis/database/tests/__init__.py120
-rw-r--r--papis/database/tests/test_papis.py14
-rw-r--r--papis/database/tests/test_whoosh.py43
-rw-r--r--papis/database/whoosh.py27
-rw-r--r--papis/docmatcher.py52
-rw-r--r--papis/document.py26
-rw-r--r--papis/gui/__init__.py159
-rw-r--r--papis/gui/rofi.py116
-rw-r--r--papis/gui/vim/main.py6
-rw-r--r--papis/isbn.py10
-rw-r--r--papis/main.py2
-rw-r--r--papis/tests/__init__.py40
-rw-r--r--papis/tests/resources/example_document.txt1
-rw-r--r--papis/tests/test_add.py127
-rw-r--r--papis/tests/test_addremove.py176
-rw-r--r--papis/tests/test_addto.py28
-rw-r--r--papis/tests/test_bibtex.py2
-rw-r--r--papis/tests/test_browse.py20
-rw-r--r--papis/tests/test_check.py40
-rw-r--r--papis/tests/test_config.py43
-rw-r--r--papis/tests/test_edit.py35
-rw-r--r--papis/tests/test_export.py54
-rw-r--r--papis/tests/test_list.py51
-rw-r--r--papis/tests/test_mv.py31
-rw-r--r--papis/tests/test_rename.py26
-rw-r--r--papis/tests/test_rm.py45
-rw-r--r--papis/tests/test_run.py22
-rw-r--r--papis/tests/test_update.py59
-rw-r--r--papis/tests/test_utils.py41
-rw-r--r--papis/utils.py13
-rw-r--r--scripts/shell_completion/build/bash/papis20
-rw-r--r--setup.py2
75 files changed, 5063 insertions, 2248 deletions
diff --git a/.travis.yml b/.travis.yml
index b655095d..5df54c8f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,3 +19,5 @@ install:
- pip install -e .[optional]
- pip install pytest
- make install
+ - sudo apt-get update -qq
+ - sudo apt-get install -y git
diff --git a/README.md b/README.md
index acb874eb..a549283c 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,8 @@
<img src="https://badge.fury.io/py/papis.svg" alt="PyPI version" height="18">
</a>
+[![Packaging status](https://repology.org/badge/vertical-allrepos/papis.svg)](https://repology.org/metapackage/papis)
+
## Description
Papis is a powerful and highly extensible command-line based document and
@@ -102,28 +104,6 @@ papis add -h
[![asciicast](https://asciinema.org/a/48Dv1rfX44yjJD6Sbc71gpXGr.png)](https://asciinema.org/a/48Dv1rfX44yjJD6Sbc71gpXGr)
AND MUCH, MUCH MORE!
-## Installing on Other Platforms
-
-### NixOS
-If you are running [NixOS](https://nixos.org/) or you have the [nix](https://nixos.org/nix/) package manager installed, you can install papis by running:
-
-```
-nix-env -i papis
-```
-
-If you like papis, just clone the repository
-```
-git clone git@github.com:papis/papis.git
-cd papis
-```
-
-and start hacking it with:
-
-```
-nix-shell --expr 'with import <nixpkgs> {}; papis.overrideDerivation (drv: { src = ./.; })'
-```
-This command will provide you a shell with all the dependencies required.
-
## Authors
See the ``AUTHORS`` list for a list of authored commits.
diff --git a/doc/build/man/papis-config.1 b/doc/build/man/papis-config.1
index 5b192ce6..abda2fb4 100644
--- a/doc/build/man/papis-config.1
+++ b/doc/build/man/papis-config.1
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "PAPIS-CONFIG" "1" "Jan 31, 2018" "0.5.2" "papis"
+.TH "PAPIS-CONFIG" "1" "May 08, 2018" "0.6" "papis"
.SH NAME
papis-config \- Papis Configuration
.
@@ -168,34 +168,40 @@ configuration file.
Name AND relative path of the local configuration file that papis
will additionally read if the file is present in the current
directory or in the base directory of a given library.
+.sp
+This is useful for instance if you have a library somewhere
+for which you want special configuration settings to be set
+but you do not want these settings to cluster in your configuration
+file. It is also useful if you\(aqre sharing a library with someone
+else and you want them to have the same settings in that library as
+you. Imagine you\(aqre sharing a library of datasheets with your friend
+Fulano. You have your library at
.INDENT 0.0
-.TP
-\fBmode\fP (\fI\%config\-settings\-mode\fP)
-.INDENT 7.0
-.IP \(bu 2
-\fBDefault\fP: \fBdocument\fP
+.INDENT 3.5
+.sp
+.nf
+.ft C
+~/Documents/lib\-with\-fulano
+.ft P
+.fi
.UNINDENT
.UNINDENT
.sp
-Papis is a modal program and it can be configured to support different
-operating modes. The default is considering that every papis document
-or entry is a \(aqdocument\(aq.
+and you\(aqve set a local configuration file there
.INDENT 0.0
-.TP
-\fBopentool\fP (\fI\%config\-settings\-opentool\fP)
-.INDENT 7.0
-.IP \(bu 2
-\fBDefault\fP: \fBxdg\-open\fP
+.INDENT 3.5
+.sp
+.nf
+.ft C
+~/Documents/lib\-with\-fulano/.papis.config
+.ft P
+.fi
.UNINDENT
.UNINDENT
.sp
-This is the general program that will be used to open documents.
-As for now papis is not intended to detect the type of document to be open
-and decide upon it how to open the document. You should set this
-to the right program for the tool. If you are in linux you might want
-to take a look at \fI\%ranger\fP or let
-the default handle it in your system.
-For mac users you might set this to \fBopen\fP\&.
+then whenever Fulano uses that library and the file is also present,
+his papis program will also read the configuration settings at
+the path above.
.INDENT 0.0
.TP
\fBdir\-umask\fP (\fI\%config\-settings\-dir\-umask\fP)
@@ -209,299 +215,251 @@ This is the default \fBumask\fP that will be used to create the new
documents\(aq directories.
.INDENT 0.0
.TP
-\fBbrowser\fP (\fI\%config\-settings\-browser\fP)
+\fBuse\-git\fP (\fI\%config\-settings\-use\-git\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fB$BROWSER\fP
+\fBDefault\fP: \fBFalse\fP
.UNINDENT
.UNINDENT
.sp
-Program to be used for opening websites, the default is the environment
-variable \fB$BROWSER\fP\&.
+Some commands will issue git commands if this option is set to \fBTrue\fP\&.
+For example in \fBmv\fP or \fBrename\fP\&.
.INDENT 0.0
.TP
-\fBpicktool\fP (\fI\%config\-settings\-picktool\fP)
+\fBbrowse\-query\-format\fP (\fI\%config\-settings\-browse\-query\-format\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBpapis.pick\fP
+\fBDefault\fP: \fB{doc[title]} {doc[author]}\fP
.UNINDENT
.UNINDENT
.sp
-This is the program used whenever papis asks you to pick a document
-or options in general.
-.INDENT 0.0
-.TP
-.B Possible options are:
-.INDENT 7.0
-.IP \(bu 2
-papis.pick
-.IP \(bu 2
-rofi
-.IP \(bu 2
-vim
-.UNINDENT
-.UNINDENT
+The query string that is to be searched for in the \fBbrowse\fP command
+whenever a search engine is used.
.INDENT 0.0
.TP
-\fBmvtool\fP (\fI\%config\-settings\-mvtool\fP)
+\fBsearch\-engine\fP (\fI\%config\-settings\-search\-engine\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBmv\fP
+\fBDefault\fP: \fBhttps://duckduckgo.com\fP
.UNINDENT
.UNINDENT
.sp
-Tool used to in the \fBpapis mv\fP command to move documents.
-If you are using \fBgit\fP to manage your documents, you might consider
-setting it to \fBmvtool = git mv\fP\&.
+Search engine to be used by some commands like \fBbrowse\fP\&.
.INDENT 0.0
.TP
-\fBeditor\fP (\fI\%config\-settings\-editor\fP)
+\fBuser\-agent\fP (\fI\%config\-settings\-user\-agent\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fB$EDITOR\fP
+\fBDefault\fP: \fBMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3)\fP
.UNINDENT
.UNINDENT
.sp
-Editor used to edit files in papis, for instance for the \fBpapis edit\fP
-command. It defaults to the \fB$EDITOR\fP environment variable, if this is
-not set then it will default to the \fB$VISUAL\fP environment variable.
-Otherwise the default editor in your system will be used.
+User agent used by papis whenever it obtains information from external
+servers.
.INDENT 0.0
.TP
-\fBxeditor\fP (\fI\%config\-settings\-xeditor\fP)
+\fBdefault\-gui\fP (\fI\%config\-settings\-default\-gui\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBxdg\-open\fP
+\fBDefault\fP: \fBvim\fP
.UNINDENT
.UNINDENT
.sp
-Sometimes papis might use an editor that uses a windowing system
-(GUI Editor), you can set this to your prefered gui based editor, e.g.:
-\fBgedit\fP, \fBxemacs\fP, \fBgvim\fP to name a few.
+Default gui to be used by papis, it can have the values given
+by \fBpapis gui \-\-help\fP\&.
.INDENT 0.0
.TP
-\fBsync\-command\fP (\fI\%config\-settings\-sync\-command\fP)
+\fBscripts\-short\-help\-regex\fP (\fI\%config\-settings\-scripts\-short\-help\-regex\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBgit \-C {lib[dir]} pull origin master\fP
+\fBDefault\fP: \fB\&.*papis\-short\-help: *(.*)\fP
.UNINDENT
.UNINDENT
.sp
-Command that is to be used when \fBpapis sync\fP is run.
+This is the format of the short help indicator in external papis
+commands.
.INDENT 0.0
.TP
-\fBnotes\-name\fP (\fI\%config\-settings\-notes\-name\fP)
+\fBinfo\-name\fP (\fI\%config\-settings\-info\-name\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBnotes.tex\fP
+\fBDefault\fP: \fBinfo.yaml\fP
.UNINDENT
.UNINDENT
.sp
-In \fBpapis edit\fP you can edit notes about the document. \fBnotes\-name\fP
-is the default name of the notes file, which by default is supposed
-to be a TeX file.
+The default name of the information files.
.INDENT 0.0
.TP
-\fBuse\-cache\fP (\fI\%config\-settings\-use\-cache\fP)
+\fBdoc\-url\-key\-name\fP (\fI\%config\-settings\-doc\-url\-key\-name\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBTrue\fP
+\fBDefault\fP: \fBdoc_url\fP
.UNINDENT
.UNINDENT
.sp
-Set to \fBFalse\fP if you do not want to use the \fBcache\fP
-for the given library.
-.INDENT 0.0
-.TP
-\fBcache\-dir\fP (\fI\%config\-settings\-cache\-dir\fP)
-.INDENT 7.0
-.IP \(bu 2
-\fBDefault\fP: \fB/home/gallo/.cache/papis\fP
-.UNINDENT
-.UNINDENT
+Some documents might have associated apart from an url also a file url,
+the key name appearing in the information file is defined by
+this setting.
.INDENT 0.0
.TP
-\fBuse\-git\fP (\fI\%config\-settings\-use\-git\fP)
+\fBdefault\-library\fP (\fI\%config\-settings\-default\-library\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBFalse\fP
+\fBDefault\fP: \fBpapers\fP
.UNINDENT
.UNINDENT
.sp
-Some commands will issue git commands if this option is set to \fBTrue\fP\&.
-For example in \fBmv\fP or \fBrename\fP\&.
+The name of the library that is to be searched when \fBpapis\fP
+is run without library arguments.
.INDENT 0.0
.TP
-\fBadd\-confirm\fP (\fI\%config\-settings\-add\-confirm\fP)
+\fBexport\-text\-format\fP (\fI\%config\-settings\-export\-text\-format\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBFalse\fP
+\fBDefault\fP: \fB{doc[author]}. {doc[title]}. {doc[journal]} {doc[pages]} {doc[month]} {doc[year]}\fP
.UNINDENT
.UNINDENT
.sp
-If set to \fBTrue\fP, everytime you run \fBpapis add\fP
-the flag \fB\-\-confirm\fP will be added automatically. If is set to \fBTrue\fP
-and you add it, i.e., you run \fBpapis add \-\-confirm\fP, then it will
-fave the contrary effect, i.e., it will not ask for confirmation.
+The default output papis format for \fBpapis export \-\-text\fP\&.
.INDENT 0.0
.TP
-\fBadd\-name\fP (\fI\%config\-settings\-add\-name\fP)
+\fBformat\-doc\-name\fP (\fI\%config\-settings\-format\-doc\-name\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP:
-.nf
-\(ga\(ga
-.fi
-
-.nf
-\(ga\(ga
-.fi
-
+\fBDefault\fP: \fBdoc\fP
.UNINDENT
.UNINDENT
.sp
-Default name for newly added documents. For example, if you want
-your documents to be \fBauthor\-title\fP then you should set it to
-the papis format: \fB{doc[author]}\-{doc[title]}\fP\&.
+This setting controls the name of the document in the papis format strings
+like in format strings such as \fBmatch\-format\fP or \fBheader\-format\fP\&.
+For instance, if you are managing videos, you might want to
+set this option to \fBvid\fP in order to set the \fBheader\-format\fP to
+\fB{doc[title]} \- {doc[director]} \- {doc[duration]}\fP\&.
.INDENT 0.0
.TP
-\fBfile\-name\fP (\fI\%config\-settings\-file\-name\fP)
+\fBmatch\-format\fP (\fI\%config\-settings\-match\-format\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBNone\fP
+\fBDefault\fP: \fB{doc[tags]}{doc.subfolder}{doc[title]}{doc[author]}{doc[year]}\fP
.UNINDENT
.UNINDENT
.sp
-Same as \fBadd\-name\fP, but for files, not folders. If it is not set,
-the names of the files will be cleaned and taken \fIas\-is\fP\&.
+Default format that is used to match a document against in order to select
+it. For example if the \fBmatch\-format\fP is equal to
+\fB{doc[year]} {doc[author]}\fP then title of a document will not work
+to match a document, only the year and author.
.INDENT 0.0
.TP
-\fBadd\-interactive\fP (\fI\%config\-settings\-add\-interactive\fP)
+\fBheader\-format\fP (\fI\%config\-settings\-header\-format\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBFalse\fP
+\fBDefault\fP: \fB{doc[title]:<70.70}|{doc[author]:<20.20} ({doc[year]:\-<4})\fP
.UNINDENT
.UNINDENT
.sp
-If set to \fBTrue\fP, everytime you run \fBpapis add\fP
-the flag \fB\-\-interactive\fP will be added automatically. If is set to
-\fBTrue\fP and you add it, i.e., you run \fBpapis add \-\-interactive\fP, then it
-will fave the contrary effect, i.e., it will not run in interactive mode.
+Default format that is used to show a document in order to select it.
.INDENT 0.0
.TP
-\fBadd\-edit\fP (\fI\%config\-settings\-add\-edit\fP)
+\fBinfo\-allow\-unicode\fP (\fI\%config\-settings\-info\-allow\-unicode\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBFalse\fP
+\fBDefault\fP: \fBTrue\fP
.UNINDENT
.UNINDENT
.sp
-If set to \fBTrue\fP, everytime you run \fBpapis add\fP
-the flag \fB\-\-edit\fP will be added automatically. If is set to
-\fBTrue\fP and you add it, i.e., you run \fBpapis add \-\-edit\fP, then it
-will fave the contrary effect, i.e., it will not prompt to edit the info
-file.
+This flag is to be set if you want to allow unicode characters
+in your info file or not. If it is set to false then a representation
+for the unicode characters will be written in its place.
+Since we should be living in an unicode world, it is set to \fBTrue\fP
+by default.
.INDENT 0.0
.TP
-\fBadd\-open\fP (\fI\%config\-settings\-add\-open\fP)
+\fBsync\-command\fP (\fI\%config\-settings\-sync\-command\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBFalse\fP
+\fBDefault\fP: \fBgit \-C {lib[dir]} pull origin master\fP
.UNINDENT
.UNINDENT
.sp
-If set to \fBTrue\fP, everytime you run \fBpapis add\fP
-the flag \fB\-\-open\fP will be added automatically. If is set to
-\fBTrue\fP and you add it, i.e., you run \fBpapis add \-\-open\fP, then it
-will fave the contrary effect, i.e., it will not open the attached files
-before adding the document to the library.
+Command that is to be used when \fBpapis sync\fP is run.
+.SS Tools options
.INDENT 0.0
.TP
-\fBcheck\-keys\fP (\fI\%config\-settings\-check\-keys\fP)
+\fBopentool\fP (\fI\%config\-settings\-opentool\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBfiles\fP
+\fBDefault\fP: \fBxdg\-open\fP
.UNINDENT
.UNINDENT
.sp
-Comma separated key values to be checked by default by the command
-\fBcheck\fP\&. E.g: \fBcheck\-keys = author, doi\fP\&.
+This is the general program that will be used to open documents.
+As for now papis is not intended to detect the type of document to be open
+and decide upon it how to open the document. You should set this
+to the right program for the tool. If you are in linux you might want
+to take a look at \fI\%ranger\fP or let
+the default handle it in your system.
+For mac users you might set this to \fBopen\fP\&.
.INDENT 0.0
.TP
-\fBbrowse\-query\-format\fP (\fI\%config\-settings\-browse\-query\-format\fP)
+\fBbrowser\fP (\fI\%config\-settings\-browser\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fB{doc[title]} {doc[author]}\fP
+\fBDefault\fP: \fB$BROWSER\fP
.UNINDENT
.UNINDENT
.sp
-The query string that is to be searched for in the \fBbrowse\fP command
-whenever a search engine is used.
+Program to be used for opening websites, the default is the environment
+variable \fB$BROWSER\fP\&.
.INDENT 0.0
.TP
-\fBsearch\-engine\fP (\fI\%config\-settings\-search\-engine\fP)
+\fBpicktool\fP (\fI\%config\-settings\-picktool\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBhttps://duckduckgo.com\fP
+\fBDefault\fP: \fBpapis.pick\fP
.UNINDENT
.UNINDENT
.sp
-Search engine to be used by some commands like \fBbrowse\fP\&.
+This is the program used whenever papis asks you to pick a document
+or options in general.
.INDENT 0.0
.TP
-\fBuser\-agent\fP (\fI\%config\-settings\-user\-agent\fP)
+.B Possible options are:
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3)\fP
-.UNINDENT
-.UNINDENT
-.sp
-User agent used by papis whenever it obtains information from external
-servers.
-.INDENT 0.0
-.TP
-\fBdefault\-gui\fP (\fI\%config\-settings\-default\-gui\fP)
-.INDENT 7.0
+papis.pick
.IP \(bu 2
-\fBDefault\fP: \fBvim\fP
-.UNINDENT
-.UNINDENT
-.sp
-Default gui to be used by papis, it can have the values given
-by \fBpapis gui \-\-help\fP\&.
-.INDENT 0.0
-.TP
-\fBscripts\-short\-help\-regex\fP (\fI\%config\-settings\-scripts\-short\-help\-regex\fP)
-.INDENT 7.0
+rofi
.IP \(bu 2
-\fBDefault\fP: \fB\&.*papis\-short\-help: *(.*)\fP
+vim
+.IP \(bu 2
+dmenu
.UNINDENT
.UNINDENT
-.sp
-This is the format of the short help indicator in external papis
-commands.
.INDENT 0.0
.TP
-\fBinfo\-name\fP (\fI\%config\-settings\-info\-name\fP)
+\fBeditor\fP (\fI\%config\-settings\-editor\fP)
.INDENT 7.0
.IP \(bu 2
-\fBDefault\fP: \fBinfo.yaml\fP
+\fBDefault\fP: \fB$EDITOR\fP
.UNINDENT
.UNINDENT
.sp
-The default name of the information files.
+Editor used to edit files in papis, for instance for the \fBpapis edit\fP
+command. It defaults to the \fB$EDITOR\fP environment variable, if this is
+not set then it will default to the \fB$VISUAL\fP environment variable.
+Otherwise the default editor in your system will be used.
.INDENT 0.0
.TP
-\fBdoc\-url\-key\-name\fP (\fI\%config\-settings\-doc\-url\-key\-name\fP)
+\fBxeditor\fP (\fI\%config\-settings\-xeditor\fP)
.INDENT 7.0
.IP \(bu 2