mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
MFH r338661 through r339200.
Sponsored by: The FreeBSD Foundation
This commit is contained in:
commit
01d4e2149e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/projects/openssl111/; revision=339201
23
UPDATING
23
UPDATING
|
@ -31,6 +31,21 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW:
|
||||||
disable the most expensive debugging functionality run
|
disable the most expensive debugging functionality run
|
||||||
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
||||||
|
|
||||||
|
20181002:
|
||||||
|
The cam(4) based nda(4) driver will be used over nvd(4) by default on
|
||||||
|
powerpc64. You may set 'options NVME_USE_NVD=1' in your kernel conf or
|
||||||
|
loader tunable 'hw.nvme.use_nvd=1' if you wish to use the existing
|
||||||
|
driver. Make sure to edit /boot/etc/kboot.conf and fstab to use the
|
||||||
|
nda device name.
|
||||||
|
|
||||||
|
20180913:
|
||||||
|
Reproducible build mode is now on by default, in preparation for
|
||||||
|
FreeBSD 12.0. This eliminates build metadata such as the user,
|
||||||
|
host, and time from the kernel (and uname), unless the working tree
|
||||||
|
corresponds to a modified checkout from a version control system.
|
||||||
|
The previous behavior can be obtained by setting the /etc/src.conf
|
||||||
|
knob WITHOUT_REPRODUCIBLE_BUILD.
|
||||||
|
|
||||||
20180826:
|
20180826:
|
||||||
The Yarrow CSPRNG has been removed from the kernel as it has not been
|
The Yarrow CSPRNG has been removed from the kernel as it has not been
|
||||||
supported by its designers since at least 2003. Fortuna has been the
|
supported by its designers since at least 2003. Fortuna has been the
|
||||||
|
@ -169,6 +184,11 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW:
|
||||||
r334930 changed the interface between the NFS modules, so they all
|
r334930 changed the interface between the NFS modules, so they all
|
||||||
need to be rebuilt. r335018 did a __FreeBSD_version bump for this.
|
need to be rebuilt. r335018 did a __FreeBSD_version bump for this.
|
||||||
|
|
||||||
|
20180530:
|
||||||
|
As of r334391 lld is the default amd64 system linker; it is installed
|
||||||
|
as /usr/bin/ld. Kernel build workarounds (see 20180510 entry) are no
|
||||||
|
longer necessary.
|
||||||
|
|
||||||
20180530:
|
20180530:
|
||||||
The kernel / userland interface for devinfo changed, so you'll
|
The kernel / userland interface for devinfo changed, so you'll
|
||||||
need a new kernel and userland as a pair for it to work (rebuilding
|
need a new kernel and userland as a pair for it to work (rebuilding
|
||||||
|
@ -196,6 +216,9 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW:
|
||||||
binutils port/package). lld will soon be default, and this requirement
|
binutils port/package). lld will soon be default, and this requirement
|
||||||
will go away.
|
will go away.
|
||||||
|
|
||||||
|
NOTE: As of r334391 lld is the default system linker on amd64, and no
|
||||||
|
workaround is necessary.
|
||||||
|
|
||||||
20180508:
|
20180508:
|
||||||
The nxge(4) driver has been removed. This driver was for PCI-X 10g
|
The nxge(4) driver has been removed. This driver was for PCI-X 10g
|
||||||
cards made by s2io/Neterion. The company was aquired by Exar and
|
cards made by s2io/Neterion. The company was aquired by Exar and
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd June 7, 2016
|
.Dd October 5, 2018
|
||||||
.Dt BLACKLISTD 8
|
.Dt BLACKLISTD 8
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -178,7 +178,7 @@ Specify the default rule name for the packet filter rules, usually
|
||||||
.It Fl r
|
.It Fl r
|
||||||
Re-read the firewall rules from the internal database, then
|
Re-read the firewall rules from the internal database, then
|
||||||
remove and re-add them.
|
remove and re-add them.
|
||||||
This helps for packet filters that don't retain state across reboots.
|
This helps for packet filters that do not retain state across reboots.
|
||||||
.It Fl s Ar sockpath
|
.It Fl s Ar sockpath
|
||||||
Add
|
Add
|
||||||
.Ar sockpath
|
.Ar sockpath
|
||||||
|
@ -198,6 +198,27 @@ diagnostic messages to
|
||||||
instead of
|
instead of
|
||||||
.Xr syslogd 8 .
|
.Xr syslogd 8 .
|
||||||
.El
|
.El
|
||||||
|
.Sh SIGNAL HANDLING
|
||||||
|
.Nm
|
||||||
|
deals with the following signals:
|
||||||
|
.Bl -tag -width "USR2"
|
||||||
|
.It HUP
|
||||||
|
Receipt of this signal causes
|
||||||
|
.Nm
|
||||||
|
to re-read the configuration file.
|
||||||
|
.It INT, TERM & QUIT
|
||||||
|
These signals tell
|
||||||
|
.Nm
|
||||||
|
to exit in an orderly fashion.
|
||||||
|
.It USR1
|
||||||
|
This signal tells
|
||||||
|
.Nm
|
||||||
|
to increase the internal debugging level by 1.
|
||||||
|
.It USR2
|
||||||
|
This signal tells
|
||||||
|
.Nm
|
||||||
|
to decrease the internal debugging level by 1.
|
||||||
|
.El
|
||||||
.Sh FILES
|
.Sh FILES
|
||||||
.Bl -tag -width /usr/libexec/blacklistd-helper -compact
|
.Bl -tag -width /usr/libexec/blacklistd-helper -compact
|
||||||
.It Pa /usr/libexec/blacklistd-helper
|
.It Pa /usr/libexec/blacklistd-helper
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
.\"
|
.\"
|
||||||
.\" from: @(#)make.1 8.4 (Berkeley) 3/19/94
|
.\" from: @(#)make.1 8.4 (Berkeley) 3/19/94
|
||||||
.\"
|
.\"
|
||||||
.Dd June 22, 2017
|
.Dd September 27, 2018
|
||||||
.Dt MAKE 1
|
.Dt MAKE 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -796,7 +796,7 @@ Tells
|
||||||
whether to pass the descriptors of the job token queue
|
whether to pass the descriptors of the job token queue
|
||||||
even if the target is not tagged with
|
even if the target is not tagged with
|
||||||
.Ic .MAKE
|
.Ic .MAKE
|
||||||
The default is
|
The default is
|
||||||
.Ql Pa yes
|
.Ql Pa yes
|
||||||
for backwards compatability with
|
for backwards compatability with
|
||||||
.Fx 9.0
|
.Fx 9.0
|
||||||
|
@ -2385,7 +2385,8 @@ Basic use of suffix rules (for files only in the current directory,
|
||||||
not trying to chain transformations together, etc.) is also reasonably
|
not trying to chain transformations together, etc.) is also reasonably
|
||||||
portable.
|
portable.
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr mkdep 1
|
.Xr mkdep 1 ,
|
||||||
|
.Xr style.Makefile 5
|
||||||
.Sh HISTORY
|
.Sh HISTORY
|
||||||
A
|
A
|
||||||
.Nm
|
.Nm
|
||||||
|
|
|
@ -34,8 +34,9 @@ int
|
||||||
_libelf_is_mips64el(Elf *e)
|
_libelf_is_mips64el(Elf *e)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (e->e_kind == ELF_K_ELF && e->e_byteorder == ELFDATA2LSB &&
|
return (e->e_kind == ELF_K_ELF &&
|
||||||
e->e_u.e_elf.e_ehdr.e_ehdr64->e_machine == EM_MIPS);
|
e->e_u.e_elf.e_ehdr.e_ehdr64->e_machine == EM_MIPS &&
|
||||||
|
e->e_u.e_elf.e_ehdr.e_ehdr64->e_ident[EI_DATA] == ELFDATA2LSB);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -78,7 +78,6 @@ Currently, the library automatically detects and reads the following fomats:
|
||||||
* POSIX pax interchange format
|
* POSIX pax interchange format
|
||||||
* POSIX octet-oriented cpio
|
* POSIX octet-oriented cpio
|
||||||
* SVR4 ASCII cpio
|
* SVR4 ASCII cpio
|
||||||
* POSIX octet-oriented cpio
|
|
||||||
* Binary cpio (big-endian or little-endian)
|
* Binary cpio (big-endian or little-endian)
|
||||||
* ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
|
* ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
|
||||||
* ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives)
|
* ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives)
|
||||||
|
|
|
@ -2058,6 +2058,12 @@ next_field(const char **p, const char **start,
|
||||||
}
|
}
|
||||||
*sep = **p;
|
*sep = **p;
|
||||||
|
|
||||||
|
/* If the field is only whitespace, bail out now. */
|
||||||
|
if (**p == '\0') {
|
||||||
|
*end = *p;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Trim trailing whitespace to locate end of field. */
|
/* Trim trailing whitespace to locate end of field. */
|
||||||
*end = *p - 1;
|
*end = *p - 1;
|
||||||
while (**end == ' ' || **end == '\t' || **end == '\n') {
|
while (**end == ' ' || **end == '\t' || **end == '\n') {
|
||||||
|
|
|
@ -316,7 +316,14 @@ aes_ctr_init(archive_crypto_ctx *ctx, const uint8_t *key, size_t key_len)
|
||||||
memcpy(ctx->key, key, key_len);
|
memcpy(ctx->key, key, key_len);
|
||||||
memset(ctx->nonce, 0, sizeof(ctx->nonce));
|
memset(ctx->nonce, 0, sizeof(ctx->nonce));
|
||||||
ctx->encr_pos = AES_BLOCK_SIZE;
|
ctx->encr_pos = AES_BLOCK_SIZE;
|
||||||
|
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
||||||
|
if (!EVP_CIPHER_CTX_reset(ctx->ctx)) {
|
||||||
|
EVP_CIPHER_CTX_free(ctx->ctx);
|
||||||
|
ctx->ctx = NULL;
|
||||||
|
}
|
||||||
|
#else
|
||||||
EVP_CIPHER_CTX_init(ctx->ctx);
|
EVP_CIPHER_CTX_init(ctx->ctx);
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -459,6 +459,7 @@ ar_parse_common_header(struct ar *ar, struct archive_entry *entry,
|
||||||
uint64_t n;
|
uint64_t n;
|
||||||
|
|
||||||
/* Copy remaining header */
|
/* Copy remaining header */
|
||||||
|
archive_entry_set_filetype(entry, AE_IFREG);
|
||||||
archive_entry_set_mtime(entry,
|
archive_entry_set_mtime(entry,
|
||||||
(time_t)ar_atol10(h + AR_date_offset, AR_date_size), 0L);
|
(time_t)ar_atol10(h + AR_date_offset, AR_date_size), 0L);
|
||||||
archive_entry_set_uid(entry,
|
archive_entry_set_uid(entry,
|
||||||
|
|
|
@ -2708,6 +2708,11 @@ slurp_central_directory(struct archive_read *a, struct zip *zip)
|
||||||
return ARCHIVE_FATAL;
|
return ARCHIVE_FATAL;
|
||||||
|
|
||||||
zip_entry = calloc(1, sizeof(struct zip_entry));
|
zip_entry = calloc(1, sizeof(struct zip_entry));
|
||||||
|
if (zip_entry == NULL) {
|
||||||
|
archive_set_error(&a->archive, ENOMEM,
|
||||||
|
"Can't allocate zip entry");
|
||||||
|
return ARCHIVE_FATAL;
|
||||||
|
}
|
||||||
zip_entry->next = zip->zip_entries;
|
zip_entry->next = zip->zip_entries;
|
||||||
zip_entry->flags |= LA_FROM_CENTRAL_DIRECTORY;
|
zip_entry->flags |= LA_FROM_CENTRAL_DIRECTORY;
|
||||||
zip->zip_entries = zip_entry;
|
zip->zip_entries = zip_entry;
|
||||||
|
|
|
@ -422,6 +422,7 @@ verify_sparse_file(struct archive *a, const char *path,
|
||||||
assert(sparse->type == END);
|
assert(sparse->type == END);
|
||||||
assertEqualInt(expected_offset, archive_entry_size(ae));
|
assertEqualInt(expected_offset, archive_entry_size(ae));
|
||||||
|
|
||||||
|
failure(path);
|
||||||
assertEqualInt(holes_seen, expected_holes);
|
assertEqualInt(holes_seen, expected_holes);
|
||||||
|
|
||||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
|
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
|
||||||
|
@ -457,6 +458,7 @@ verify_sparse_file2(struct archive *a, const char *path,
|
||||||
/* Verify the number of holes only, not its offset nor its
|
/* Verify the number of holes only, not its offset nor its
|
||||||
* length because those alignments are deeply dependence on
|
* length because those alignments are deeply dependence on
|
||||||
* its filesystem. */
|
* its filesystem. */
|
||||||
|
failure(path);
|
||||||
assertEqualInt(blocks, archive_entry_sparse_count(ae));
|
assertEqualInt(blocks, archive_entry_sparse_count(ae));
|
||||||
archive_entry_free(ae);
|
archive_entry_free(ae);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2166,7 +2166,7 @@ void assertVersion(const char *prog, const char *base)
|
||||||
|
|
||||||
/* Skip arbitrary third-party version numbers. */
|
/* Skip arbitrary third-party version numbers. */
|
||||||
while (s > 0 && (*q == ' ' || *q == '-' || *q == '/' || *q == '.' ||
|
while (s > 0 && (*q == ' ' || *q == '-' || *q == '/' || *q == '.' ||
|
||||||
isalnum(*q))) {
|
isalnum((unsigned char)*q))) {
|
||||||
++q;
|
++q;
|
||||||
--s;
|
--s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -884,11 +884,12 @@ void BranchFolder::mergeCommonTails(unsigned commonTailIndex) {
|
||||||
if (UpdateLiveIns) {
|
if (UpdateLiveIns) {
|
||||||
LivePhysRegs NewLiveIns(*TRI);
|
LivePhysRegs NewLiveIns(*TRI);
|
||||||
computeLiveIns(NewLiveIns, *MBB);
|
computeLiveIns(NewLiveIns, *MBB);
|
||||||
|
LiveRegs.init(*TRI);
|
||||||
|
|
||||||
// The flag merging may lead to some register uses no longer using the
|
// The flag merging may lead to some register uses no longer using the
|
||||||
// <undef> flag, add IMPLICIT_DEFs in the predecessors as necessary.
|
// <undef> flag, add IMPLICIT_DEFs in the predecessors as necessary.
|
||||||
for (MachineBasicBlock *Pred : MBB->predecessors()) {
|
for (MachineBasicBlock *Pred : MBB->predecessors()) {
|
||||||
LiveRegs.init(*TRI);
|
LiveRegs.clear();
|
||||||
LiveRegs.addLiveOuts(*Pred);
|
LiveRegs.addLiveOuts(*Pred);
|
||||||
MachineBasicBlock::iterator InsertBefore = Pred->getFirstTerminator();
|
MachineBasicBlock::iterator InsertBefore = Pred->getFirstTerminator();
|
||||||
for (unsigned Reg : NewLiveIns) {
|
for (unsigned Reg : NewLiveIns) {
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "CodeGenFunction.h"
|
#include "CodeGenFunction.h"
|
||||||
#include "CGObjCRuntime.h"
|
#include "CGObjCRuntime.h"
|
||||||
#include "CodeGenModule.h"
|
#include "CodeGenModule.h"
|
||||||
|
#include "ConstantEmitter.h"
|
||||||
#include "clang/AST/ASTContext.h"
|
#include "clang/AST/ASTContext.h"
|
||||||
#include "clang/AST/DeclCXX.h"
|
#include "clang/AST/DeclCXX.h"
|
||||||
#include "clang/AST/DeclTemplate.h"
|
#include "clang/AST/DeclTemplate.h"
|
||||||
|
@ -85,7 +86,7 @@ class AggExprEmitter : public StmtVisitor<AggExprEmitter> {
|
||||||
void EmitMoveFromReturnSlot(const Expr *E, RValue Src);
|
void EmitMoveFromReturnSlot(const Expr *E, RValue Src);
|
||||||
|
|
||||||
void EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
|
void EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
|
||||||
QualType elementType, InitListExpr *E);
|
QualType ArrayQTy, InitListExpr *E);
|
||||||
|
|
||||||
AggValueSlot::NeedsGCBarriers_t needsGC(QualType T) {
|
AggValueSlot::NeedsGCBarriers_t needsGC(QualType T) {
|
||||||
if (CGF.getLangOpts().getGC() && TypeRequiresGCollection(T))
|
if (CGF.getLangOpts().getGC() && TypeRequiresGCollection(T))
|
||||||
|
@ -392,12 +393,15 @@ static bool isTrivialFiller(Expr *E) {
|
||||||
|
|
||||||
/// \brief Emit initialization of an array from an initializer list.
|
/// \brief Emit initialization of an array from an initializer list.
|
||||||
void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
|
void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
|
||||||
QualType elementType, InitListExpr *E) {
|
QualType ArrayQTy, InitListExpr *E) {
|
||||||
uint64_t NumInitElements = E->getNumInits();
|
uint64_t NumInitElements = E->getNumInits();
|
||||||
|
|
||||||
uint64_t NumArrayElements = AType->getNumElements();
|
uint64_t NumArrayElements = AType->getNumElements();
|
||||||
assert(NumInitElements <= NumArrayElements);
|
assert(NumInitElements <= NumArrayElements);
|
||||||
|
|
||||||
|
QualType elementType =
|
||||||
|
CGF.getContext().getAsArrayType(ArrayQTy)->getElementType();
|
||||||
|
|
||||||
// DestPtr is an array*. Construct an elementType* by drilling
|
// DestPtr is an array*. Construct an elementType* by drilling
|
||||||
// down a level.
|
// down a level.
|
||||||
llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, 0);
|
llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, 0);
|
||||||
|
@ -409,6 +413,29 @@ void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
|
||||||
CharUnits elementAlign =
|
CharUnits elementAlign =
|
||||||
DestPtr.getAlignment().alignmentOfArrayElement(elementSize);
|
DestPtr.getAlignment().alignmentOfArrayElement(elementSize);
|
||||||
|
|
||||||
|
// Consider initializing the array by copying from a global. For this to be
|
||||||
|
// more efficient than per-element initialization, the size of the elements
|
||||||
|
// with explicit initializers should be large enough.
|
||||||
|
if (NumInitElements * elementSize.getQuantity() > 16 &&
|
||||||
|
elementType.isTriviallyCopyableType(CGF.getContext())) {
|
||||||
|
CodeGen::CodeGenModule &CGM = CGF.CGM;
|
||||||
|
ConstantEmitter Emitter(CGM);
|
||||||
|
LangAS AS = ArrayQTy.getAddressSpace();
|
||||||
|
if (llvm::Constant *C = Emitter.tryEmitForInitializer(E, AS, ArrayQTy)) {
|
||||||
|
auto GV = new llvm::GlobalVariable(
|
||||||
|
CGM.getModule(), C->getType(),
|
||||||
|
CGM.isTypeConstant(ArrayQTy, /* ExcludeCtorDtor= */ true),
|
||||||
|
llvm::GlobalValue::PrivateLinkage, C, "constinit",
|
||||||
|
/* InsertBefore= */ nullptr, llvm::GlobalVariable::NotThreadLocal,
|
||||||
|
CGM.getContext().getTargetAddressSpace(AS));
|
||||||
|
Emitter.finalize(GV);
|
||||||
|
CharUnits Align = CGM.getContext().getTypeAlignInChars(ArrayQTy);
|
||||||
|
GV->setAlignment(Align.getQuantity());
|
||||||
|
EmitFinalDestCopy(ArrayQTy, CGF.MakeAddrLValue(GV, ArrayQTy, Align));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Exception safety requires us to destroy all the
|
// Exception safety requires us to destroy all the
|
||||||
// already-constructed members if an initializer throws.
|
// already-constructed members if an initializer throws.
|
||||||
// For that, we'll need an EH cleanup.
|
// For that, we'll need an EH cleanup.
|
||||||
|
@ -1156,11 +1183,8 @@ void AggExprEmitter::VisitInitListExpr(InitListExpr *E) {
|
||||||
|
|
||||||
// Handle initialization of an array.
|
// Handle initialization of an array.
|
||||||
if (E->getType()->isArrayType()) {
|
if (E->getType()->isArrayType()) {
|
||||||
QualType elementType =
|
|
||||||
CGF.getContext().getAsArrayType(E->getType())->getElementType();
|
|
||||||
|
|
||||||
auto AType = cast<llvm::ArrayType>(Dest.getAddress().getElementType());
|
auto AType = cast<llvm::ArrayType>(Dest.getAddress().getElementType());
|
||||||
EmitArrayInit(Dest.getAddress(), AType, elementType, E);
|
EmitArrayInit(Dest.getAddress(), AType, E->getType(), E);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -321,8 +321,6 @@ void CodeGenModule::checkAliases() {
|
||||||
assert(FTy);
|
assert(FTy);
|
||||||
if (!FTy->getReturnType()->isPointerTy())
|
if (!FTy->getReturnType()->isPointerTy())
|
||||||
Diags.Report(Location, diag::err_ifunc_resolver_return);
|
Diags.Report(Location, diag::err_ifunc_resolver_return);
|
||||||
if (FTy->getNumParams())
|
|
||||||
Diags.Report(Location, diag::err_ifunc_resolver_params);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
llvm::Constant *Aliasee = Alias->getIndirectSymbol();
|
llvm::Constant *Aliasee = Alias->getIndirectSymbol();
|
||||||
|
|
|
@ -156,6 +156,7 @@ struct Configuration {
|
||||||
bool ZExecstack;
|
bool ZExecstack;
|
||||||
bool ZHazardplt;
|
bool ZHazardplt;
|
||||||
bool ZIfuncnoplt;
|
bool ZIfuncnoplt;
|
||||||
|
bool ZInterpose;
|
||||||
bool ZNocopyreloc;
|
bool ZNocopyreloc;
|
||||||
bool ZNodelete;
|
bool ZNodelete;
|
||||||
bool ZNodlopen;
|
bool ZNodlopen;
|
||||||
|
|
|
@ -670,6 +670,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
|
||||||
Config->ZExecstack = hasZOption(Args, "execstack");
|
Config->ZExecstack = hasZOption(Args, "execstack");
|
||||||
Config->ZHazardplt = hasZOption(Args, "hazardplt");
|
Config->ZHazardplt = hasZOption(Args, "hazardplt");
|
||||||
Config->ZIfuncnoplt = hasZOption(Args, "ifunc-noplt");
|
Config->ZIfuncnoplt = hasZOption(Args, "ifunc-noplt");
|
||||||
|
Config->ZInterpose = hasZOption(Args, "interpose");
|
||||||
Config->ZNocopyreloc = hasZOption(Args, "nocopyreloc");
|
Config->ZNocopyreloc = hasZOption(Args, "nocopyreloc");
|
||||||
Config->ZNodelete = hasZOption(Args, "nodelete");
|
Config->ZNodelete = hasZOption(Args, "nodelete");
|
||||||
Config->ZNodlopen = hasZOption(Args, "nodlopen");
|
Config->ZNodlopen = hasZOption(Args, "nodlopen");
|
||||||
|
|
|
@ -1034,6 +1034,8 @@ template <class ELFT> void DynamicSection<ELFT>::finalizeContents() {
|
||||||
uint32_t DtFlags1 = 0;
|
uint32_t DtFlags1 = 0;
|
||||||
if (Config->Bsymbolic)
|
if (Config->Bsymbolic)
|
||||||
DtFlags |= DF_SYMBOLIC;
|
DtFlags |= DF_SYMBOLIC;
|
||||||
|
if (Config->ZInterpose)
|
||||||
|
DtFlags1 |= DF_1_INTERPOSE;
|
||||||
if (Config->ZNodelete)
|
if (Config->ZNodelete)
|
||||||
DtFlags1 |= DF_1_NODELETE;
|
DtFlags1 |= DF_1_NODELETE;
|
||||||
if (Config->ZNodlopen)
|
if (Config->ZNodlopen)
|
||||||
|
|
|
@ -487,7 +487,7 @@ template <class ELFT> void Writer<ELFT>::run() {
|
||||||
|
|
||||||
static bool shouldKeepInSymtab(SectionBase *Sec, StringRef SymName,
|
static bool shouldKeepInSymtab(SectionBase *Sec, StringRef SymName,
|
||||||
const Symbol &B) {
|
const Symbol &B) {
|
||||||
if (B.isFile() || B.isSection())
|
if (B.isSection())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// If sym references a section in a discarded group, don't keep it.
|
// If sym references a section in a discarded group, don't keep it.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
$Id: INSTALL,v 1.20 2017/07/28 14:57:56 schwarze Exp $
|
$Id: INSTALL,v 1.22 2018/07/31 15:34:00 schwarze Exp $
|
||||||
|
|
||||||
About the portable mandoc distribution
|
About the portable mandoc distribution
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
@ -18,7 +18,7 @@ tech@ mailing list, too.
|
||||||
|
|
||||||
Enjoy using the mandoc toolset!
|
Enjoy using the mandoc toolset!
|
||||||
|
|
||||||
Ingo Schwarze, Karlsruhe, July 2017
|
Ingo Schwarze, Karlsruhe, August 2018
|
||||||
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
|
@ -54,8 +54,6 @@ generates. If anything looks wrong or different from what you
|
||||||
wish, read the file "configure.local.example", create and edit
|
wish, read the file "configure.local.example", create and edit
|
||||||
a file "configure.local", and re-run "./configure" until the
|
a file "configure.local", and re-run "./configure" until the
|
||||||
result seems right to you.
|
result seems right to you.
|
||||||
On Solaris 10 and earlier, you may have to run "ksh ./configure"
|
|
||||||
because the native /bin/sh lacks some POSIX features.
|
|
||||||
|
|
||||||
5. Run "make".
|
5. Run "make".
|
||||||
Any POSIX-compatible make, in particular both BSD make and GNU make,
|
Any POSIX-compatible make, in particular both BSD make and GNU make,
|
||||||
|
@ -83,12 +81,14 @@ apropos(1) will not find the new pages.
|
||||||
|
|
||||||
10. To set up a man.cgi(8) server, read its manual page.
|
10. To set up a man.cgi(8) server, read its manual page.
|
||||||
|
|
||||||
Note that some man(7) pages may contain low-level roff(7) markup
|
Note that a very small number of man(7) pages contain low-level
|
||||||
that mandoc does not yet understand. On some BSD systems using
|
roff(7) markup that mandoc does not yet understand. On some BSD
|
||||||
mandoc, third-party software is vetted on whether it may be formatted
|
systems using mandoc, third-party software is vetted on whether it
|
||||||
with mandoc. If not, groff(1) is pulled in as a dependency and
|
may be formatted with mandoc. If not, groff(1) is pulled in as a
|
||||||
used to install a pre-formatted "catpage" instead of directly as
|
dependency and used to install pre-formatted "catpages" instead of
|
||||||
manual page source.
|
manual page sources. This mechanism is used much less frequently
|
||||||
|
than in the past. On OpenBSD, only 25 out of about 10000 ports
|
||||||
|
still require formatting with groff(1).
|
||||||
|
|
||||||
|
|
||||||
Understanding mandoc dependencies
|
Understanding mandoc dependencies
|
|
@ -1,17 +1,17 @@
|
||||||
$Id: LICENSE,v 1.17 2017/06/23 15:58:14 schwarze Exp $
|
$Id: LICENSE,v 1.19 2018/07/31 10:18:15 schwarze Exp $
|
||||||
|
|
||||||
With the exceptions noted below, all code and documentation
|
With the exceptions noted below, all code and documentation
|
||||||
contained in the mandoc toolkit is protected by the Copyright
|
contained in the mandoc toolkit is protected by the Copyright
|
||||||
of the following developers:
|
of the following developers:
|
||||||
|
|
||||||
Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
|
Copyright (c) 2010-2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
Copyright (c) 1999, 2004, 2017 Marc Espie <espie@openbsd.org>
|
||||||
Copyright (c) 2009, 2010, 2011, 2012 Joerg Sonnenberger <joerg@netbsd.org>
|
Copyright (c) 2009, 2010, 2011, 2012 Joerg Sonnenberger <joerg@netbsd.org>
|
||||||
Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
|
Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
|
||||||
Copyright (c) 2014 Baptiste Daroussin <bapt@freebsd.org>
|
Copyright (c) 2014 Baptiste Daroussin <bapt@freebsd.org>
|
||||||
Copyright (c) 2016 Ed Maste <emaste@freebsd.org>
|
Copyright (c) 2016 Ed Maste <emaste@freebsd.org>
|
||||||
Copyright (c) 2017 Michael Stapelberg <stapelberg@debian.org>
|
Copyright (c) 2017 Michael Stapelberg <stapelberg@debian.org>
|
||||||
Copyright (c) 1999, 2004 Marc Espie <espie@openbsd.org>
|
|
||||||
Copyright (c) 1998, 2004, 2010 Todd C. Miller <Todd.Miller@courtesan.com>
|
Copyright (c) 1998, 2004, 2010 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||||
Copyright (c) 2008, 2017 Otto Moerbeek <otto@drijf.net>
|
Copyright (c) 2008, 2017 Otto Moerbeek <otto@drijf.net>
|
||||||
Copyright (c) 2004 Ted Unangst <tedu@openbsd.org>
|
Copyright (c) 2004 Ted Unangst <tedu@openbsd.org>
|
|
@ -1,7 +1,7 @@
|
||||||
# $Id: Makefile,v 1.516 2017/07/20 16:24:53 schwarze Exp $
|
# $Id: Makefile,v 1.519 2018/07/31 15:34:00 schwarze Exp $
|
||||||
#
|
#
|
||||||
# Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
# Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
# Copyright (c) 2011, 2013-2017 Ingo Schwarze <schwarze@openbsd.org>
|
# Copyright (c) 2011, 2013-2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and distribute this software for any
|
# Permission to use, copy, modify, and distribute this software for any
|
||||||
# purpose with or without fee is hereby granted, provided that the above
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
VERSION = 1.14.3
|
VERSION = 1.14.4
|
||||||
|
|
||||||
# === LIST OF FILES ====================================================
|
# === LIST OF FILES ====================================================
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ TESTSRCS = test-be32toh.c \
|
||||||
test-isblank.c \
|
test-isblank.c \
|
||||||
test-mkdtemp.c \
|
test-mkdtemp.c \
|
||||||
test-nanosleep.c \
|
test-nanosleep.c \
|
||||||
|
test-noop.c \
|
||||||
test-ntohl.c \
|
test-ntohl.c \
|
||||||
test-O_DIRECTORY.c \
|
test-O_DIRECTORY.c \
|
||||||
test-ohash.c \
|
test-ohash.c \
|
||||||
|
@ -46,6 +47,7 @@ TESTSRCS = test-be32toh.c \
|
||||||
test-stringlist.c \
|
test-stringlist.c \
|
||||||
test-strlcat.c \
|
test-strlcat.c \
|
||||||
test-strlcpy.c \
|
test-strlcpy.c \
|
||||||
|
test-strndup.c \
|
||||||
test-strptime.c \
|
test-strptime.c \
|
||||||
test-strsep.c \
|
test-strsep.c \
|
||||||
test-strtonum.c \
|
test-strtonum.c \
|
||||||
|
@ -70,6 +72,7 @@ SRCS = att.c \
|
||||||
compat_stringlist.c \
|
compat_stringlist.c \
|
||||||
compat_strlcat.c \
|
compat_strlcat.c \
|
||||||
compat_strlcpy.c \
|
compat_strlcpy.c \
|
||||||
|
compat_strndup.c \
|
||||||
compat_strsep.c \
|
compat_strsep.c \
|
||||||
compat_strtonum.c \
|
compat_strtonum.c \
|
||||||
compat_vasprintf.c \
|
compat_vasprintf.c \
|
||||||
|
@ -249,6 +252,7 @@ COMPAT_OBJS = compat_err.o \
|
||||||
compat_strcasestr.o \
|
compat_strcasestr.o \
|
||||||
compat_strlcat.o \
|
compat_strlcat.o \
|
||||||
compat_strlcpy.o \
|
compat_strlcpy.o \
|
||||||
|
compat_strndup.o \
|
||||||
compat_strsep.o \
|
compat_strsep.o \
|
||||||
compat_strtonum.o \
|
compat_strtonum.o \
|
||||||
compat_vasprintf.o
|
compat_vasprintf.o
|
||||||
|
@ -544,12 +548,12 @@ regress-distcheck:
|
||||||
! -path regress/regress.pl \
|
! -path regress/regress.pl \
|
||||||
! -path regress/regress.pl.1
|
! -path regress/regress.pl.1
|
||||||
|
|
||||||
dist: mandoc.sha256
|
dist: mandoc-$(VERSION).sha256
|
||||||
|
|
||||||
mandoc.sha256: mandoc.tar.gz
|
mandoc-$(VERSION).sha256: mandoc-$(VERSION).tar.gz
|
||||||
sha256 mandoc.tar.gz > $@
|
sha256 mandoc-$(VERSION).tar.gz > $@
|
||||||
|
|
||||||
mandoc.tar.gz: $(DISTFILES)
|
mandoc-$(VERSION).tar.gz: $(DISTFILES)
|
||||||
ls regress/*/*/*.mandoc_* && exit 1 || true
|
ls regress/*/*/*.mandoc_* && exit 1 || true
|
||||||
mkdir -p .dist/mandoc-$(VERSION)/
|
mkdir -p .dist/mandoc-$(VERSION)/
|
||||||
$(INSTALL) -m 0644 $(DISTFILES) .dist/mandoc-$(VERSION)
|
$(INSTALL) -m 0644 $(DISTFILES) .dist/mandoc-$(VERSION)
|
|
@ -16,6 +16,7 @@ compat_strcasestr.o: compat_strcasestr.c config.h
|
||||||
compat_stringlist.o: compat_stringlist.c config.h compat_stringlist.h
|
compat_stringlist.o: compat_stringlist.c config.h compat_stringlist.h
|
||||||
compat_strlcat.o: compat_strlcat.c config.h
|
compat_strlcat.o: compat_strlcat.c config.h
|
||||||
compat_strlcpy.o: compat_strlcpy.c config.h
|
compat_strlcpy.o: compat_strlcpy.c config.h
|
||||||
|
compat_strndup.o: compat_strndup.c config.h
|
||||||
compat_strsep.o: compat_strsep.c config.h
|
compat_strsep.o: compat_strsep.c config.h
|
||||||
compat_strtonum.o: compat_strtonum.c config.h
|
compat_strtonum.o: compat_strtonum.c config.h
|
||||||
compat_vasprintf.o: compat_vasprintf.c config.h
|
compat_vasprintf.o: compat_vasprintf.c config.h
|
||||||
|
@ -29,7 +30,7 @@ demandoc.o: demandoc.c config.h mandoc.h roff.h man.h mdoc.h
|
||||||
eqn.o: eqn.c config.h mandoc_aux.h mandoc.h roff.h libmandoc.h libroff.h
|
eqn.o: eqn.c config.h mandoc_aux.h mandoc.h roff.h libmandoc.h libroff.h
|
||||||
eqn_html.o: eqn_html.c config.h mandoc.h out.h html.h
|
eqn_html.o: eqn_html.c config.h mandoc.h out.h html.h
|
||||||
eqn_term.o: eqn_term.c config.h mandoc.h out.h term.h
|
eqn_term.o: eqn_term.c config.h mandoc.h out.h term.h
|
||||||
html.o: html.c config.h mandoc_aux.h mandoc.h roff.h out.h html.h manconf.h main.h
|
html.o: html.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h roff.h out.h html.h manconf.h main.h
|
||||||
lib.o: lib.c config.h mandoc.h roff.h mdoc.h libmdoc.h lib.in
|
lib.o: lib.c config.h mandoc.h roff.h mdoc.h libmdoc.h lib.in
|
||||||
main.o: main.c config.h mandoc_aux.h mandoc.h mandoc_xr.h roff.h mdoc.h man.h tag.h main.h manconf.h mansearch.h
|
main.o: main.c config.h mandoc_aux.h mandoc.h mandoc_xr.h roff.h mdoc.h man.h tag.h main.h manconf.h mansearch.h
|
||||||
man.o: man.c config.h mandoc_aux.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h
|
man.o: man.c config.h mandoc_aux.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h
|
|
@ -1,7 +1,84 @@
|
||||||
$Id: NEWS,v 1.26 2017/07/28 14:57:56 schwarze Exp $
|
$Id: NEWS,v 1.32 2018/08/08 14:47:38 schwarze Exp $
|
||||||
|
|
||||||
This file lists the most important changes in the mandoc.bsd.lv distribution.
|
This file lists the most important changes in the mandoc.bsd.lv distribution.
|
||||||
|
|
||||||
|
Changes in version 1.14.4, released on August 8, 2018
|
||||||
|
|
||||||
|
--- MAJOR NEW FEATURES ---
|
||||||
|
* In ASCII output, render mathematical symbols and greek letters
|
||||||
|
as transliterations conveying the characters' meanings rather
|
||||||
|
than trying to imitate their shape. Consequently, such characters
|
||||||
|
can now be used in portable manual pages. All the same, please
|
||||||
|
limit their use to contexts where they really matter, for example
|
||||||
|
when showing complicated mathematical formulae.
|
||||||
|
* First steps towards better support for small screens in HTML
|
||||||
|
output (responsive design): avoid most style= attributes, in
|
||||||
|
particular all hard-coded indentations and column widths, and
|
||||||
|
provide a better mandoc.css style sheet with a @media query,
|
||||||
|
using em units throughout, and avoiding redundancy in selectors.
|
||||||
|
* Better HTML output with some more fitting HTML elements, eliminating
|
||||||
|
needless class= attributes, and avoiding various HTML syntax errors
|
||||||
|
(element nesting, URL-fragment syntax, duplicate id= attributes).
|
||||||
|
--- MINOR NEW FEATURES ---
|
||||||
|
* When a man(1) argument contains a slash, imply -l like in man-db.
|
||||||
|
* Use TIOCGWINSZ to reduce the default -Owidth and -Oindent during
|
||||||
|
interactive use on terminals narrower than 79 columns.
|
||||||
|
* Generated PostScript files are now more than 50% smaller.
|
||||||
|
* Terminal rendering of eqn(7) is improved in several respects.
|
||||||
|
* Simplified and nicer output from the mdoc(7) .Lk macro, formatting
|
||||||
|
all links in-line, even long ones.
|
||||||
|
* roff(7) \n+ and \n- numerical register auto-increment and -decrement
|
||||||
|
* roff(7) .nr optional third argument (auto-increment step size)
|
||||||
|
* Autodetect in ./configure whether the compiler can use -W and -static,
|
||||||
|
allowing to build on Solaris 10 and 11 without any configure.local.
|
||||||
|
--- RELIABILITY BUGFIXES ---
|
||||||
|
* Only activate UTF-8 output when the user really selected UTF-8,
|
||||||
|
not some other multibyte character encoding.
|
||||||
|
* Prevent excessive .ll arguments from generating infinite output.
|
||||||
|
* Fix out of bounds accesses to parse buffers that could happen when
|
||||||
|
using renamed or user defined macros after roff(7) conditionals.
|
||||||
|
* Avoid an assertion failure in certain .Bl -column lists.
|
||||||
|
* Avoid a NULL pointer access on deroff() failure after '.SS ""'.
|
||||||
|
* Fix a segfault that could be triggered by two invalid .Dt macros.
|
||||||
|
* Fix two syntax errors in generated PDF files.
|
||||||
|
* Properly state the page size in generated PostScript files.
|
||||||
|
* Close a memory leak caused by missing gzclose(3).
|
||||||
|
* Fix misformatting of man(7) documents lacking .SH macros
|
||||||
|
in PostScript and PDF output.
|
||||||
|
* And many minor bugfixes.
|
||||||
|
--- THANKS TO ---
|
||||||
|
* Marc Espie (OpenBSD) for implementing the size reduction of
|
||||||
|
PostScript files, one additional patch for code simplification,
|
||||||
|
and two bug reports.
|
||||||
|
* Theo Buehler (OpenBSD) for a bugfix patch,
|
||||||
|
and Theo de Raadt (OpenBSD) for checking it.
|
||||||
|
* John Gardner for more than a dozen suggestions regarding HTML output.
|
||||||
|
* Mike Williams for teaching me how to use %%DocumentMedia and
|
||||||
|
setpagedevice in PostScript files.
|
||||||
|
* Werner Lemberg (groff) for feedback on mdoc(7) language changes.
|
||||||
|
* Colin Watson (man-db) for feedback on man-db semantics.
|
||||||
|
* Jason McIntyre (OpenBSD) for lots of feedback and suggestions
|
||||||
|
on diagnostic messages and on the documentation.
|
||||||
|
* Thomas Klausner (NetBSD) for suggesting two new style messages
|
||||||
|
and one new feature, for two bug reports, and for release testing.
|
||||||
|
* Leah Neukirchen (Void Linux) for suggesting a new style message,
|
||||||
|
five bug reports, and release testing.
|
||||||
|
* Anthony Bentley (OpenBSD) for reporting multiple bugs and missing
|
||||||
|
features.
|
||||||
|
* Paul Irofti (OpenBSD) and Nate Bargmann for suggesting new features.
|
||||||
|
* Michael Stapelberg (Debian) for bug reports and release testing.
|
||||||
|
* Christian Weisgerber, Jonathan Gray, Stuart Henderson,
|
||||||
|
Ted Unangst (OpenBSD), Takeshi Nakayama (NetBSD),
|
||||||
|
Anton Lazarov, Jakub Klinkovsky, Jan Stary, Jesper Wallin,
|
||||||
|
Will Backmam, and Wolfgang Mueller for bug reports.
|
||||||
|
* Sevan Janiyan (NetBSD) for additions to lib.in.
|
||||||
|
* George Brown for suggesting code simplifications.
|
||||||
|
* David Coppa, Igor Sobrado (OpenBSD), and Alexander Kuleshov
|
||||||
|
for documentation improvements.
|
||||||
|
* Laura Morales and Raf Czlonka for questions resulting in better
|
||||||
|
documentation.
|
||||||
|
* Yuri Pankov (illumos) for release testing.
|
||||||
|
|
||||||
Changes in version 1.14.3, released on August 5, 2017
|
Changes in version 1.14.3, released on August 5, 2017
|
||||||
|
|
||||||
--- BUG FIXES ---
|
--- BUG FIXES ---
|
|
@ -1,6 +1,6 @@
|
||||||
************************************************************************
|
************************************************************************
|
||||||
* Official mandoc TODO.
|
* Official mandoc TODO.
|
||||||
* $Id: TODO,v 1.246 2017/07/24 11:15:12 schwarze Exp $
|
* $Id: TODO,v 1.258 2018/08/06 14:16:30 schwarze Exp $
|
||||||
************************************************************************
|
************************************************************************
|
||||||
|
|
||||||
Many issues are annotated for difficulty as follows:
|
Many issues are annotated for difficulty as follows:
|
||||||
|
@ -38,6 +38,18 @@ are mere guesses, and some may be wrong.
|
||||||
|
|
||||||
--- missing roff features ----------------------------------------------
|
--- missing roff features ----------------------------------------------
|
||||||
|
|
||||||
|
- .nop prints its arguments as text,
|
||||||
|
see groff(7) for an example
|
||||||
|
|
||||||
|
- .ft CB selects constant-width bold font
|
||||||
|
see groff_out(7) for examples
|
||||||
|
|
||||||
|
- \*(.T prints the device being used,
|
||||||
|
see groff_char(7) for an example
|
||||||
|
|
||||||
|
- \[charNN], \[charNNN] prints a single-byte codepoint
|
||||||
|
see groff_char(7) for examples
|
||||||
|
|
||||||
- .ad (adjust margins)
|
- .ad (adjust margins)
|
||||||
.ad l -- adjust left margin only (flush left)
|
.ad l -- adjust left margin only (flush left)
|
||||||
.ad r -- adjust right margin only (flush right)
|
.ad r -- adjust right margin only (flush right)
|
||||||
|
@ -52,10 +64,6 @@ are mere guesses, and some may be wrong.
|
||||||
found by naddy@ in xloadimage(1)
|
found by naddy@ in xloadimage(1)
|
||||||
loc ** exist *** algo * size * imp *
|
loc ** exist *** algo * size * imp *
|
||||||
|
|
||||||
- .nr third argument (auto-increment step size, requires \n+)
|
|
||||||
found by bentley@ in sbcl(1) Mon, 9 Dec 2013 18:36:57 -0700
|
|
||||||
loc * exist * algo * size * imp **
|
|
||||||
|
|
||||||
- .ns (no-space mode) occurs in xine-config(1)
|
- .ns (no-space mode) occurs in xine-config(1)
|
||||||
when implementing this, also let .TH set it
|
when implementing this, also let .TH set it
|
||||||
reported by brad@ Sat, 15 Jan 2011 15:45:23 -0500
|
reported by brad@ Sat, 15 Jan 2011 15:45:23 -0500
|
||||||
|
@ -65,10 +73,6 @@ are mere guesses, and some may be wrong.
|
||||||
found by jca@ in ratpoison(1) Sun, 30 Jun 2013 12:01:09 +0200
|
found by jca@ in ratpoison(1) Sun, 30 Jun 2013 12:01:09 +0200
|
||||||
loc * exist ** algo ** size ** imp **
|
loc * exist ** algo ** size ** imp **
|
||||||
|
|
||||||
- \n+ and \n- numerical register increment and decrement
|
|
||||||
found by bentley@ in sbcl(1) Mon, 9 Dec 2013 18:36:57 -0700
|
|
||||||
loc * exist * algo * size * imp **
|
|
||||||
|
|
||||||
- \w'' improve width measurements
|
- \w'' improve width measurements
|
||||||
would not be very useful without an expression parser, see below
|
would not be very useful without an expression parser, see below
|
||||||
needed for Tcl_NewStringObj(3) via wiz@ Wed, 5 Mar 2014 22:27:43 +0100
|
needed for Tcl_NewStringObj(3) via wiz@ Wed, 5 Mar 2014 22:27:43 +0100
|
||||||
|
@ -87,9 +91,11 @@ are mere guesses, and some may be wrong.
|
||||||
Found by naddy@ in devel/cutils cobfusc(1) Mon, 16 Feb 2015 19:10:52 +0100
|
Found by naddy@ in devel/cutils cobfusc(1) Mon, 16 Feb 2015 19:10:52 +0100
|
||||||
loc *** exist *** algo *** size ** imp *
|
loc *** exist *** algo *** size ** imp *
|
||||||
|
|
||||||
- using undefined strings or macros defines them to be empty
|
- check for missing roff escape sequences, implement those that are
|
||||||
wl@ Mon, 14 Nov 2011 14:37:01 +0000
|
trivial even if not usually appearing in manual pages, gracefully
|
||||||
loc * exist * algo * size * imp *
|
ignore the non-trivial ones, document what they are supposed to do
|
||||||
|
and what mandoc does instead
|
||||||
|
loc * exist ** algo * size * imp *
|
||||||
|
|
||||||
--- missing mdoc features ----------------------------------------------
|
--- missing mdoc features ----------------------------------------------
|
||||||
|
|
||||||
|
@ -146,10 +152,6 @@ are mere guesses, and some may be wrong.
|
||||||
is not safe, e.g. `.Bl -column .It Pf a b .' gives "ab."
|
is not safe, e.g. `.Bl -column .It Pf a b .' gives "ab."
|
||||||
but should give "ab ."
|
but should give "ab ."
|
||||||
|
|
||||||
- check whether it is correct that `D1' uses INDENT+1;
|
|
||||||
does it need its own constant?
|
|
||||||
loc * exist ** algo ** size * imp **
|
|
||||||
|
|
||||||
- prohibit `Nm' from having non-text HEAD children
|
- prohibit `Nm' from having non-text HEAD children
|
||||||
(e.g., NetBSD mDNSShared/dns-sd.1)
|
(e.g., NetBSD mDNSShared/dns-sd.1)
|
||||||
(mdoc_html.c and mdoc_term.c `Nm' handlers can be slightly simplified)
|
(mdoc_html.c and mdoc_term.c `Nm' handlers can be slightly simplified)
|
||||||
|
@ -170,6 +172,25 @@ are mere guesses, and some may be wrong.
|
||||||
uqs@ Thu, 2 Jun 2011 11:33:35 +0200
|
uqs@ Thu, 2 Jun 2011 11:33:35 +0200
|
||||||
loc * exist ** algo *** size * imp **
|
loc * exist ** algo *** size * imp **
|
||||||
|
|
||||||
|
--- missing man features -----------------------------------------------
|
||||||
|
|
||||||
|
- .SY and .YS,
|
||||||
|
used by many groff manual pages
|
||||||
|
|
||||||
|
- preserve punctuation following .ME,
|
||||||
|
see ditroff(7) for an example
|
||||||
|
|
||||||
|
- .TQ tagged paragraph continuation,
|
||||||
|
see groff_diff(7) for examples
|
||||||
|
|
||||||
|
- groff_www(7) .MTO and .URL
|
||||||
|
These macros were used by the GNU grep(1) man page.
|
||||||
|
The groff_www(7) manual page itself uses them, too.
|
||||||
|
We should probably *not* add them to mandoc.
|
||||||
|
Just mentioning this here to keep track of the abuse.
|
||||||
|
Laura Morales <lauretas at mail dot com> 20 Apr 2018 07:33:02 +0200
|
||||||
|
loc ** exist * algo * size ** imp *
|
||||||
|
|
||||||
--- missing tbl features -----------------------------------------------
|
--- missing tbl features -----------------------------------------------
|
||||||
|
|
||||||
- the "s" layout column specifier is used for placement of data
|
- the "s" layout column specifier is used for placement of data
|
||||||
|
@ -177,6 +198,13 @@ are mere guesses, and some may be wrong.
|
||||||
synaptics(4) found by tedu@ Mon, 17 Aug 2015 21:17:42 -0400
|
synaptics(4) found by tedu@ Mon, 17 Aug 2015 21:17:42 -0400
|
||||||
loc * exist ** algo *** size * imp **
|
loc * exist ** algo *** size * imp **
|
||||||
|
|
||||||
|
- vertical centering in cells vertically spanned with ^
|
||||||
|
pali dot rohar at gmail dot com 16 Jul 2018 13:03:35 +0200
|
||||||
|
loc * exist *** algo *** size ** imp *
|
||||||
|
|
||||||
|
- support .ds requests inside tbl(7) code,
|
||||||
|
see tbl(1) for an example
|
||||||
|
|
||||||
- support mdoc(7) and man(7) macros inside tbl(7) code;
|
- support mdoc(7) and man(7) macros inside tbl(7) code;
|
||||||
probably requires the parser reorg and letting tbl(7)
|
probably requires the parser reorg and letting tbl(7)
|
||||||
use roff_node such that macro sets can mix;
|
use roff_node such that macro sets can mix;
|
||||||
|
@ -195,6 +223,18 @@ are mere guesses, and some may be wrong.
|
||||||
suggested by bentley@ Tue, 14 Oct 2014 04:10:55 -0600
|
suggested by bentley@ Tue, 14 Oct 2014 04:10:55 -0600
|
||||||
loc * exist ** algo * size * imp **
|
loc * exist ** algo * size * imp **
|
||||||
|
|
||||||
|
- implement horizontal and vertical alignment in HTML output
|
||||||
|
pali dot rohar at gmail dot com 16 Jul 2018 13:03:35 +0200
|
||||||
|
loc * exist * algo * size * imp ***
|
||||||
|
|
||||||
|
- implement cell spanning in HTML output
|
||||||
|
pali dot rohar at gmail dot com 16 Jul 2018 13:03:35 +0200
|
||||||
|
loc * exist * algo ** size ** imp **
|
||||||
|
|
||||||
|
- implement table borders in HTML output
|
||||||
|
pali dot rohar at gmail dot com 16 Jul 2018 13:03:35 +0200
|
||||||
|
loc * exist * algo ** size ** imp **
|
||||||
|
|
||||||
--- missing eqn features -----------------------------------------------
|
--- missing eqn features -----------------------------------------------
|
||||||
|
|
||||||
- In a matrix, break the output line after each matrix line.
|
- In a matrix, break the output line after each matrix line.
|
||||||
|
@ -219,12 +259,15 @@ are mere guesses, and some may be wrong.
|
||||||
surrounded by blanks, not when it is part of an unquoted word.
|
surrounded by blanks, not when it is part of an unquoted word.
|
||||||
Also, check whether there are more such cases (e.g., +?).
|
Also, check whether there are more such cases (e.g., +?).
|
||||||
reported by bentley@ 20 Jun 2017 02:04:29 -0600
|
reported by bentley@ 20 Jun 2017 02:04:29 -0600
|
||||||
|
loc * exist ** algo ** size * imp *
|
||||||
|
|
||||||
- Primes, opprime, and '
|
- Primes, opprime, and '
|
||||||
bentley@ Thu, 13 Jul 2017 23:14:20 -0600
|
bentley@ Thu, 13 Jul 2017 23:14:20 -0600
|
||||||
|
|
||||||
--- missing misc features ----------------------------------------------
|
--- missing misc features ----------------------------------------------
|
||||||
|
|
||||||
|
- man -ks 1,8 route; kn@ Jul 13, 2018 orally
|
||||||
|
|
||||||
- italic correction (\/) in PostScript mode
|
- italic correction (\/) in PostScript mode
|
||||||
Werner LEMBERG on groff at gnu dot org Sun, 10 Nov 2013 12:47:46
|
Werner LEMBERG on groff at gnu dot org Sun, 10 Nov 2013 12:47:46
|
||||||
loc ** exist ** algo * size * imp *
|
loc ** exist ** algo * size * imp *
|
||||||
|
@ -298,6 +341,9 @@ are mere guesses, and some may be wrong.
|
||||||
* formatting issues: ugly output
|
* formatting issues: ugly output
|
||||||
************************************************************************
|
************************************************************************
|
||||||
|
|
||||||
|
- .UR can nest inside .TP,
|
||||||
|
see roff(7) for examples
|
||||||
|
|
||||||
- revisit empty in-line macros
|
- revisit empty in-line macros
|
||||||
look at the difference between "Em x Em ." and "Sq x Em ."
|
look at the difference between "Em x Em ." and "Sq x Em ."
|
||||||
Carsten Kunze Fri, 12 Dec 2014 00:15:41 +0100
|
Carsten Kunze Fri, 12 Dec 2014 00:15:41 +0100
|
||||||
|
@ -375,6 +421,17 @@ are mere guesses, and some may be wrong.
|
||||||
|
|
||||||
--- HTML issues --------------------------------------------------------
|
--- HTML issues --------------------------------------------------------
|
||||||
|
|
||||||
|
- wrap Sh and Ss content into <div>
|
||||||
|
Laura Morales <lauretas at mail dot com> 21 Apr 2018 18:10:48 +0200
|
||||||
|
(Evaluate whether this is really useful and has no adverse
|
||||||
|
side effects before implementing; if it is possible,
|
||||||
|
it does seem cleaner.)
|
||||||
|
loc ** exist ** algo * size * imp ***
|
||||||
|
|
||||||
|
- format ".IP *" etc. as <ul> rather than <dl>
|
||||||
|
https://github.com/Debian/debiman/issues/67
|
||||||
|
loc ** exist ** algo ** size * imp ***
|
||||||
|
|
||||||
- .Bf at the beginning of a paragraph inserts a bogus 1ex horizontal
|
- .Bf at the beginning of a paragraph inserts a bogus 1ex horizontal
|
||||||
space, see for example random(3). Introduced in
|
space, see for example random(3). Introduced in
|
||||||
http://mdocml.bsd.lv/cgi-bin/cvsweb/mdoc_html.c.diff?r1=1.91&r2=1.92
|
http://mdocml.bsd.lv/cgi-bin/cvsweb/mdoc_html.c.diff?r1=1.91&r2=1.92
|
||||||
|
@ -471,6 +528,10 @@ are mere guesses, and some may be wrong.
|
||||||
* warning issues
|
* warning issues
|
||||||
************************************************************************
|
************************************************************************
|
||||||
|
|
||||||
|
- warn about duplicate .Sh/.Ss heads
|
||||||
|
gre(4): Rename duplicate sections 20 Apr 2018 15:27:33 +0200
|
||||||
|
loc * exist * algo * size * imp **
|
||||||
|
|
||||||
- style message about macros inside .Bd -literal and .Dl, in particular
|
- style message about macros inside .Bd -literal and .Dl, in particular
|
||||||
font changing macros like .Cm, .Ar, .Fa (from the mdoclint TODO)
|
font changing macros like .Cm, .Ar, .Fa (from the mdoclint TODO)
|
||||||
|
|
||||||
|
@ -509,6 +570,10 @@ are mere guesses, and some may be wrong.
|
||||||
but just the overall format
|
but just the overall format
|
||||||
loc ** exist ** algo *** size ** imp **
|
loc ** exist ** algo *** size ** imp **
|
||||||
|
|
||||||
|
- makewhatis -p complains about language subdirectories:
|
||||||
|
/usr/local/man//ru: Unknown directory part
|
||||||
|
|
||||||
|
|
||||||
************************************************************************
|
************************************************************************
|
||||||
* documentation issues
|
* documentation issues
|
||||||
************************************************************************
|
************************************************************************
|
||||||
|
@ -562,7 +627,7 @@ are mere guesses, and some may be wrong.
|
||||||
|
|
||||||
- Enable HTTP compression by detecting gzip encoding and filtering
|
- Enable HTTP compression by detecting gzip encoding and filtering
|
||||||
output through libz.
|
output through libz.
|
||||||
- Sandbox (see OpenSSH).
|
- Privilege separation (see OpenSSH).
|
||||||
- Enable caching support via HTTP 304 and If-Modified-Since.
|
- Enable caching support via HTTP 304 and If-Modified-Since.
|
||||||
- Have Mac OSX systems automatically disable -static compilation of the
|
- Have Mac OSX systems automatically disable -static compilation of the
|
||||||
CGI: -static isn't supported.
|
CGI: -static isn't supported.
|
||||||
|
@ -571,6 +636,16 @@ are mere guesses, and some may be wrong.
|
||||||
* to improve in the groff_mdoc(7) macros
|
* to improve in the groff_mdoc(7) macros
|
||||||
************************************************************************
|
************************************************************************
|
||||||
|
|
||||||
|
- .Cd # arch1, arch2 in section 4 pages:
|
||||||
|
find better way to indicate multiple architectures, maybe:
|
||||||
|
allow .Dt vgafb 4 "macppc sparc64"
|
||||||
|
already shown as "Device Drivers Manual (macppc sparc64)"
|
||||||
|
for apropos, make that "vgafb(4) - macppc # sparc64" instead of "- all"
|
||||||
|
groff can be made to show multiple arches, too, but it is
|
||||||
|
tedious to do the string parsing in roff code...
|
||||||
|
jmc@ 23 Apr 2018 07:24:52 +0100 [man for vgafb(4)...]
|
||||||
|
loc ** exist ** algo * size * imp ***
|
||||||
|
|
||||||
- use uname(1) to set doc-default-operating-system at install time
|
- use uname(1) to set doc-default-operating-system at install time
|
||||||
tobimensch Mon, 1 Dec 2014 00:25:07 +0100
|
tobimensch Mon, 1 Dec 2014 00:25:07 +0100
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $Id: apropos.1,v 1.46 2017/07/04 23:40:01 schwarze Exp $
|
.\" $Id: apropos.1,v 1.47 2018/02/23 18:54:02 schwarze Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
.\" Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
.\" Copyright (c) 2011, 2012, 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
.\" Copyright (c) 2011, 2012, 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: August 8 2018 $
|
.Dd $Mdocdate: February 23 2018 $
|
||||||
.Dt APROPOS 1
|
.Dt APROPOS 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -74,7 +74,7 @@ would.
|
||||||
If the standard output is a terminal device and
|
If the standard output is a terminal device and
|
||||||
.Fl c
|
.Fl c
|
||||||
is not specified, use
|
is not specified, use
|
||||||
.Xr less 1
|
.Xr more 1
|
||||||
to paginate them.
|
to paginate them.
|
||||||
In
|
In
|
||||||
.Fl a
|
.Fl a
|
||||||
|
@ -328,13 +328,36 @@ Text production:
|
||||||
.It Li \&Ox Ta Ox No version reference
|
.It Li \&Ox Ta Ox No version reference
|
||||||
.It Li \&Dx Ta Dx No version reference
|
.It Li \&Dx Ta Dx No version reference
|
||||||
.El
|
.El
|
||||||
|
.Pp
|
||||||
|
In general, macro keys are supposed to yield complete results without
|
||||||
|
expecting the user to consider actual macro usage.
|
||||||
|
For example, results include:
|
||||||
|
.Pp
|
||||||
|
.Bl -tag -width 3n -offset 3n -compact
|
||||||
|
.It Li \&Fa
|
||||||
|
function arguments appearing on
|
||||||
|
.Ic \&Fn
|
||||||
|
lines
|
||||||
|
.It Li \&Fn
|
||||||
|
fuction names marked up with
|
||||||
|
.Ic \&Fo
|
||||||
|
macros
|
||||||
|
.It Li \&In
|
||||||
|
include file names marked up with
|
||||||
|
.Ic \&Fd
|
||||||
|
macros
|
||||||
|
.It Li \&Vt
|
||||||
|
types appearing as function return types and
|
||||||
|
.It \&
|
||||||
|
types appearing in function arguments in the SYNOPSIS
|
||||||
|
.El
|
||||||
.Sh ENVIRONMENT
|
.Sh ENVIRONMENT
|
||||||
.Bl -tag -width MANPAGER
|
.Bl -tag -width MANPAGER
|
||||||
.It Ev MANPAGER
|
.It Ev MANPAGER
|
||||||
Any non-empty value of the environment variable
|
Any non-empty value of the environment variable
|
||||||
.Ev MANPAGER
|
.Ev MANPAGER
|
||||||
is used instead of the standard pagination program,
|
is used instead of the standard pagination program,
|
||||||
.Xr less 1 ;
|
.Xr more 1 ;
|
||||||
see
|
see
|
||||||
.Xr man 1
|
.Xr man 1
|
||||||
for details.
|
for details.
|
||||||
|
@ -357,7 +380,7 @@ Specifies the pagination program to use when
|
||||||
.Ev MANPAGER
|
.Ev MANPAGER
|
||||||
is not defined.
|
is not defined.
|
||||||
If neither PAGER nor MANPAGER is defined,
|
If neither PAGER nor MANPAGER is defined,
|
||||||
.Xr less 1
|
.Xr more 1
|
||||||
.Fl s
|
.Fl s
|
||||||
is used.
|
is used.
|
||||||
Only used if
|
Only used if
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: cgi.c,v 1.156 2017/06/24 14:38:32 schwarze Exp $ */
|
/* $Id: cgi.c,v 1.158 2018/05/29 20:32:45 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@usta.de>
|
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@usta.de>
|
||||||
|
@ -356,6 +356,8 @@ resp_begin_html(int code, const char *msg, const char *file)
|
||||||
"<html>\n"
|
"<html>\n"
|
||||||
"<head>\n"
|
"<head>\n"
|
||||||
" <meta charset=\"UTF-8\"/>\n"
|
" <meta charset=\"UTF-8\"/>\n"
|
||||||
|
" <meta name=\"viewport\""
|
||||||
|
" content=\"width=device-width, initial-scale=1.0\">\n"
|
||||||
" <link rel=\"stylesheet\" href=\"%s/mandoc.css\""
|
" <link rel=\"stylesheet\" href=\"%s/mandoc.css\""
|
||||||
" type=\"text/css\" media=\"all\">\n"
|
" type=\"text/css\" media=\"all\">\n"
|
||||||
" <title>",
|
" <title>",
|
||||||
|
@ -398,7 +400,7 @@ resp_searchform(const struct req *req, enum focus focus)
|
||||||
|
|
||||||
/* Write query input box. */
|
/* Write query input box. */
|
||||||
|
|
||||||
printf(" <input type=\"text\" name=\"query\" value=\"");
|
printf(" <input type=\"search\" name=\"query\" value=\"");
|
||||||
if (req->q.query != NULL)
|
if (req->q.query != NULL)
|
||||||
html_print(req->q.query);
|
html_print(req->q.query);
|
||||||
printf( "\" size=\"40\"");
|
printf( "\" size=\"40\"");
|
||||||
|
@ -434,7 +436,7 @@ resp_searchform(const struct req *req, enum focus focus)
|
||||||
printf(" selected=\"selected\"");
|
printf(" selected=\"selected\"");
|
||||||
puts(">All Architectures</option>");
|
puts(">All Architectures</option>");
|
||||||
for (i = 0; i < arch_MAX; i++) {
|
for (i = 0; i < arch_MAX; i++) {
|
||||||
printf(" <option value=\"%s\"", arch_names[i]);
|
printf(" <option");
|
||||||
if (NULL != req->q.arch &&
|
if (NULL != req->q.arch &&
|
||||||
0 == strcmp(arch_names[i], req->q.arch))
|
0 == strcmp(arch_names[i], req->q.arch))
|
||||||
printf(" selected=\"selected\"");
|
printf(" selected=\"selected\"");
|
||||||
|
@ -447,12 +449,10 @@ resp_searchform(const struct req *req, enum focus focus)
|
||||||
if (req->psz > 1) {
|
if (req->psz > 1) {
|
||||||
puts(" <select name=\"manpath\">");
|
puts(" <select name=\"manpath\">");
|
||||||
for (i = 0; i < (int)req->psz; i++) {
|
for (i = 0; i < (int)req->psz; i++) {
|
||||||
printf(" <option ");
|
printf(" <option");
|
||||||
if (strcmp(req->q.manpath, req->p[i]) == 0)
|
if (strcmp(req->q.manpath, req->p[i]) == 0)
|
||||||
printf("selected=\"selected\" ");
|
printf(" selected=\"selected\"");
|
||||||
printf("value=\"");
|
printf(">");
|
||||||
html_print(req->p[i]);
|
|
||||||
printf("\">");
|
|
||||||
html_print(req->p[i]);
|
html_print(req->p[i]);
|
||||||
puts("</option>");
|
puts("</option>");
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: chars.c,v 1.71 2017/06/14 20:57:07 schwarze Exp $ */
|
/* $Id: chars.c,v 1.73 2017/08/23 13:01:29 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2011, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2011, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
@ -70,17 +70,17 @@ static struct ln lines[] = {
|
||||||
/* Text markers. */
|
/* Text markers. */
|
||||||
{ "ci", "O", 0x25cb },
|
{ "ci", "O", 0x25cb },
|
||||||
{ "bu", "+\bo", 0x2022 },
|
{ "bu", "+\bo", 0x2022 },
|
||||||
{ "dd", "|\b=", 0x2021 },
|
{ "dd", "<**>", 0x2021 },
|
||||||
{ "dg", "|\b-", 0x2020 },
|
{ "dg", "<*>", 0x2020 },
|
||||||
{ "lz", "<>", 0x25ca },
|
{ "lz", "<>", 0x25ca },
|
||||||
{ "sq", "[]", 0x25a1 },
|
{ "sq", "[]", 0x25a1 },
|
||||||
{ "ps", "<par>", 0x00b6 },
|
{ "ps", "<paragraph>", 0x00b6 },
|
||||||
{ "sc", "<sec>", 0x00a7 },
|
{ "sc", "<section>", 0x00a7 },
|
||||||
{ "lh", "<=", 0x261c },
|
{ "lh", "<=", 0x261c },
|
||||||
{ "rh", "=>", 0x261e },
|
{ "rh", "=>", 0x261e },
|
||||||
{ "at", "@", 0x0040 },
|
{ "at", "@", 0x0040 },
|
||||||
{ "sh", "#", 0x0023 },
|
{ "sh", "#", 0x0023 },
|
||||||
{ "CR", "_|", 0x21b5 },
|
{ "CR", "<cr>", 0x21b5 },
|
||||||
{ "OK", "\\/", 0x2713 },
|
{ "OK", "\\/", 0x2713 },
|
||||||
{ "CL", "<club>", 0x2663 },
|
{ "CL", "<club>", 0x2663 },
|
||||||
{ "SP", "<spade>", 0x2660 },
|
{ "SP", "<spade>", 0x2660 },
|
||||||
|
@ -173,11 +173,11 @@ static struct ln lines[] = {
|
||||||
{ "OR", "v", 0x2228 },
|
{ "OR", "v", 0x2228 },
|
||||||
{ "no", "~", 0x00ac },
|
{ "no", "~", 0x00ac },
|
||||||
{ "tno", "~", 0x00ac },
|
{ "tno", "~", 0x00ac },
|
||||||
{ "te", "3", 0x2203 },
|
{ "te", "<there\037exists>", 0x2203 },
|
||||||
{ "fa", "-\bV", 0x2200 },
|
{ "fa", "<for\037all>", 0x2200 },
|
||||||
{ "st", "-)", 0x220b },
|
{ "st", "<such\037that>", 0x220b },
|
||||||
{ "tf", ".:.", 0x2234 },
|
{ "tf", "<therefore>", 0x2234 },
|
||||||
{ "3d", ".:.", 0x2234 },
|
{ "3d", "<therefore>", 0x2234 },
|
||||||
{ "or", "|", 0x007c },
|
{ "or", "|", 0x007c },
|
||||||
|
|
||||||
/* Mathematicals. */
|
/* Mathematicals. */
|
||||||
|
@ -193,8 +193,8 @@ static struct ln lines[] = {
|
||||||
{ "tmu", "x", 0x00d7 },
|
{ "tmu", "x", 0x00d7 },
|
||||||
{ "c*", "O\bx", 0x2297 },
|
{ "c*", "O\bx", 0x2297 },
|
||||||
{ "c+", "O\b+", 0x2295 },
|
{ "c+", "O\b+", 0x2295 },
|
||||||
{ "di", "-:-", 0x00f7 },
|
{ "di", "/", 0x00f7 },
|
||||||
{ "tdi", "-:-", 0x00f7 },
|
{ "tdi", "/", 0x00f7 },
|
||||||
{ "f/", "/", 0x2044 },
|
{ "f/", "/", 0x2044 },
|
||||||
{ "**", "*", 0x2217 },
|
{ "**", "*", 0x2217 },
|
||||||
{ "<=", "<=", 0x2264 },
|
{ "<=", "<=", 0x2264 },
|
||||||
|
@ -210,38 +210,38 @@ static struct ln lines[] = {
|
||||||
{ "=~", "=~", 0x2245 },
|
{ "=~", "=~", 0x2245 },
|
||||||
{ "~~", "~~", 0x2248 },
|
{ "~~", "~~", 0x2248 },
|
||||||
{ "~=", "~=", 0x2248 },
|
{ "~=", "~=", 0x2248 },
|
||||||
{ "pt", "oc", 0x221d },
|
{ "pt", "<proportional\037to>", 0x221d },
|
||||||
{ "es", "{}", 0x2205 },
|
{ "es", "{}", 0x2205 },
|
||||||
{ "mo", "E", 0x2208 },
|
{ "mo", "<element\037of>", 0x2208 },
|
||||||
{ "nm", "!E", 0x2209 },
|
{ "nm", "<not\037element\037of>", 0x2209 },
|
||||||
{ "sb", "(=", 0x2282 },
|
{ "sb", "<proper\037subset>", 0x2282 },
|
||||||
{ "nb", "(!=", 0x2284 },
|
{ "nb", "<not\037subset>", 0x2284 },
|
||||||
{ "sp", "=)", 0x2283 },
|
{ "sp", "<proper\037superset>", 0x2283 },
|
||||||
{ "nc", "!=)", 0x2285 },
|
{ "nc", "<not\037superset>", 0x2285 },
|
||||||
{ "ib", "(=\b_", 0x2286 },
|
{ "ib", "<subset\037or\037equal>", 0x2286 },
|
||||||
{ "ip", "=\b_)", 0x2287 },
|
{ "ip", "<superset\037or\037equal>", 0x2287 },
|
||||||
{ "ca", "(^)", 0x2229 },
|
{ "ca", "<intersection>", 0x2229 },
|
||||||
{ "cu", "U", 0x222a },
|
{ "cu", "<union>", 0x222a },
|
||||||
{ "/_", "_\b/", 0x2220 },
|
{ "/_", "<angle>", 0x2220 },
|
||||||
{ "pp", "_\b|", 0x22a5 },
|
{ "pp", "<perpendicular>", 0x22a5 },
|
||||||
{ "is", "'\b,\bI", 0x222b },
|
{ "is", "<integral>", 0x222b },
|
||||||
{ "integral", "'\b,\bI", 0x222b },
|
{ "integral", "<integral>", 0x222b },
|
||||||
{ "sum", "E", 0x2211 },
|
{ "sum", "<sum>", 0x2211 },
|
||||||
{ "product", "TT", 0x220f },
|
{ "product", "<product>", 0x220f },
|
||||||
{ "coproduct", "U", 0x2210 },
|
{ "coproduct", "<coproduct>", 0x2210 },
|
||||||
{ "gr", "V", 0x2207 },
|
{ "gr", "<nabla>", 0x2207 },
|
||||||
{ "sr", "\\/", 0x221a },
|
{ "sr", "<sqrt>", 0x221a },
|
||||||
{ "sqrt", "\\/", 0x221a },
|
{ "sqrt", "<sqrt>", 0x221a },
|
||||||
{ "lc", "|~", 0x2308 },
|
{ "lc", "|~", 0x2308 },
|
||||||
{ "rc", "~|", 0x2309 },
|
{ "rc", "~|", 0x2309 },
|
||||||
{ "lf", "|_", 0x230a },
|
{ "lf", "|_", 0x230a },
|
||||||
{ "rf", "_|", 0x230b },
|
{ "rf", "_|", 0x230b },
|
||||||
{ "if", "oo", 0x221e },
|
{ "if", "<infinity>", 0x221e },
|
||||||
{ "Ah", "N", 0x2135 },
|
{ "Ah", "<Aleph>", 0x2135 },
|
||||||
{ "Im", "I", 0x2111 },
|
{ "Im", "<Im>", 0x2111 },
|
||||||
{ "Re", "R", 0x211c },
|
{ "Re", "<Re>", 0x211c },
|
||||||
{ "wp", "P", 0x2118 },
|
{ "wp", "P", 0x2118 },
|
||||||
{ "pd", "a", 0x2202 },
|
{ "pd", "<del>", 0x2202 },
|
||||||
{ "-h", "/h", 0x210f },
|
{ "-h", "/h", 0x210f },
|
||||||
{ "hbar", "/h", 0x210f },
|
{ "hbar", "/h", 0x210f },
|
||||||
{ "12", "1/2", 0x00bd },
|
{ "12", "1/2", 0x00bd },
|
||||||
|
@ -251,9 +251,9 @@ static struct ln lines[] = {
|
||||||
{ "38", "3/8", 0x215C },
|
{ "38", "3/8", 0x215C },
|
||||||
{ "58", "5/8", 0x215D },
|
{ "58", "5/8", 0x215D },
|
||||||
{ "78", "7/8", 0x215E },
|
{ "78", "7/8", 0x215E },
|
||||||
{ "S1", "1", 0x00B9 },
|
{ "S1", "^1", 0x00B9 },
|
||||||
{ "S2", "2", 0x00B2 },
|
{ "S2", "^2", 0x00B2 },
|
||||||
{ "S3", "3", 0x00B3 },
|
{ "S3", "^3", 0x00B3 },
|
||||||
|
|
||||||
/* Ligatures. */
|
/* Ligatures. */
|
||||||
{ "ff", "ff", 0xfb00 },
|
{ "ff", "ff", 0xfb00 },
|
||||||
|
@ -346,8 +346,8 @@ static struct ln lines[] = {
|
||||||
{ "oa", "o\ba", 0x00e5 },
|
{ "oa", "o\ba", 0x00e5 },
|
||||||
|
|
||||||
/* Special letters. */
|
/* Special letters. */
|
||||||
{ "-D", "-\bD", 0x00d0 },
|
{ "-D", "Dh", 0x00d0 },
|
||||||
{ "Sd", "d", 0x00f0 },
|
{ "Sd", "dh", 0x00f0 },
|
||||||
{ "TP", "Th", 0x00de },
|
{ "TP", "Th", 0x00de },
|
||||||
{ "Tp", "th", 0x00fe },
|
{ "Tp", "th", 0x00fe },
|
||||||
{ ".i", "i", 0x0131 },
|
{ ".i", "i", 0x0131 },
|
||||||
|
@ -364,68 +364,68 @@ static struct ln lines[] = {
|
||||||
{ "Fn", ",\bf", 0x0192 },
|
{ "Fn", ",\bf", 0x0192 },
|
||||||
|
|
||||||
/* Units. */
|
/* Units. */
|
||||||
{ "de", "<deg>", 0x00b0 },
|
{ "de", "<degree>", 0x00b0 },
|
||||||
{ "%0", "%o", 0x2030 },
|
{ "%0", "<permille>", 0x2030 },
|
||||||
{ "fm", "\'", 0x2032 },
|
{ "fm", "\'", 0x2032 },
|
||||||
{ "sd", "''", 0x2033 },
|
{ "sd", "''", 0x2033 },
|
||||||
{ "mc", ",\bu", 0x00b5 },
|
{ "mc", "<micro>", 0x00b5 },
|
||||||
{ "Of", "_\ba", 0x00aa },
|
{ "Of", "_\ba", 0x00aa },
|
||||||
{ "Om", "_\bo", 0x00ba },
|
{ "Om", "_\bo", 0x00ba },
|
||||||
|
|
||||||
/* Greek characters. */
|
/* Greek characters. */
|
||||||
{ "*A", "A", 0x0391 },
|
{ "*A", "A", 0x0391 },
|
||||||
{ "*B", "B", 0x0392 },
|
{ "*B", "B", 0x0392 },
|
||||||
{ "*G", "G", 0x0393 },
|
{ "*G", "<Gamma>", 0x0393 },
|
||||||
{ "*D", "_\b/_\b\\", 0x0394 },
|
{ "*D", "<Delta>", 0x0394 },
|
||||||
{ "*E", "E", 0x0395 },
|
{ "*E", "E", 0x0395 },
|
||||||
{ "*Z", "Z", 0x0396 },
|
{ "*Z", "Z", 0x0396 },
|
||||||
{ "*Y", "H", 0x0397 },
|
{ "*Y", "H", 0x0397 },
|
||||||
{ "*H", "-\bO", 0x0398 },
|
{ "*H", "<Theta>", 0x0398 },
|
||||||
{ "*I", "I", 0x0399 },
|
{ "*I", "I", 0x0399 },
|
||||||
{ "*K", "K", 0x039a },
|
{ "*K", "K", 0x039a },
|
||||||
{ "*L", "/\\", 0x039b },
|
{ "*L", "<Lambda>", 0x039b },
|
||||||
{ "*M", "M", 0x039c },
|
{ "*M", "M", 0x039c },
|
||||||
{ "*N", "N", 0x039d },
|
{ "*N", "N", 0x039d },
|
||||||
{ "*C", "_\bH", 0x039e },
|
{ "*C", "<Xi>", 0x039e },
|
||||||
{ "*O", "O", 0x039f },
|
{ "*O", "O", 0x039f },
|
||||||
{ "*P", "TT", 0x03a0 },
|
{ "*P", "<Pi>", 0x03a0 },
|
||||||
{ "*R", "P", 0x03a1 },
|
{ "*R", "P", 0x03a1 },
|
||||||
{ "*S", "S", 0x03a3 },
|
{ "*S", "<Sigma>", 0x03a3 },
|
||||||
{ "*T", "T", 0x03a4 },
|
{ "*T", "T", 0x03a4 },
|
||||||
{ "*U", "Y", 0x03a5 },
|
{ "*U", "Y", 0x03a5 },
|
||||||
{ "*F", "I\bO", 0x03a6 },
|
{ "*F", "<Phi>", 0x03a6 },
|
||||||
{ "*X", "X", 0x03a7 },
|
{ "*X", "X", 0x03a7 },
|
||||||
{ "*Q", "I\bY", 0x03a8 },
|
{ "*Q", "<Psi>", 0x03a8 },
|
||||||
{ "*W", "_\bO", 0x03a9 },
|
{ "*W", "<Omega>", 0x03a9 },
|
||||||
{ "*a", "a", 0x03b1 },
|
{ "*a", "<alpha>", 0x03b1 },
|
||||||
{ "*b", "B", 0x03b2 },
|
{ "*b", "<beta>", 0x03b2 },
|
||||||
{ "*g", "y", 0x03b3 },
|
{ "*g", "<gamma>", 0x03b3 },
|
||||||
{ "*d", "d", 0x03b4 },
|
{ "*d", "<delta>", 0x03b4 },
|
||||||
{ "*e", "e", 0x03b5 },
|
{ "*e", "<epsilon>", 0x03b5 },
|
||||||
{ "*z", ",\bC", 0x03b6 },
|
{ "*z", "<zeta>", 0x03b6 },
|
||||||
{ "*y", "n", 0x03b7 },
|
{ "*y", "<eta>", 0x03b7 },
|
||||||
{ "*h", "-\b0", 0x03b8 },
|
{ "*h", "<theta>", 0x03b8 },
|
||||||
{ "*i", "i", 0x03b9 },
|
{ "*i", "<iota>", 0x03b9 },
|
||||||
{ "*k", "k", 0x03ba },
|
{ "*k", "<kappa>", 0x03ba },
|
||||||
{ "*l", ">\b\\", 0x03bb },
|
{ "*l", "<lambda>", 0x03bb },
|
||||||
{ "*m", ",\bu", 0x03bc },
|
{ "*m", "<mu>", 0x03bc },
|
||||||
{ "*n", "v", 0x03bd },
|
{ "*n", "<nu>", 0x03bd },
|
||||||
{ "*c", ",\bE", 0x03be },
|
{ "*c", "<xi>", 0x03be },
|
||||||
{ "*o", "o", 0x03bf },
|
{ "*o", "o", 0x03bf },
|
||||||
{ "*p", "-\bn", 0x03c0 },
|
{ "*p", "<pi>", 0x03c0 },
|
||||||
{ "*r", "p", 0x03c1 },
|
{ "*r", "<rho>", 0x03c1 },
|
||||||
{ "*s", "-\bo", 0x03c3 },
|
{ "*s", "<sigma>", 0x03c3 },
|
||||||
{ "*t", "~\bt", 0x03c4 },
|
{ "*t", "<tau>", 0x03c4 },
|
||||||
{ "*u", "u", 0x03c5 },
|
{ "*u", "<upsilon>", 0x03c5 },
|
||||||
{ "*f", "|\bo", 0x03d5 },
|
{ "*f", "<phi>", 0x03d5 },
|
||||||
{ "*x", "x", 0x03c7 },
|
{ "*x", "<chi>", 0x03c7 },
|
||||||
{ "*q", "|\bu", 0x03c8 },
|
{ "*q", "<psi>", 0x03c8 },
|
||||||
{ "*w", "w", 0x03c9 },
|
{ "*w", "<omega>", 0x03c9 },
|
||||||
{ "+h", "-\b0", 0x03d1 },
|
{ "+h", "<theta>", 0x03d1 },
|
||||||
{ "+f", "|\bo", 0x03c6 },
|
{ "+f", "<phi>", 0x03c6 },
|
||||||
{ "+p", "-\bw", 0x03d6 },
|
{ "+p", "<pi>", 0x03d6 },
|
||||||
{ "+e", "e", 0x03f5 },
|
{ "+e", "<epsilon>", 0x03f5 },
|
||||||
{ "ts", "s", 0x03c2 },
|
{ "ts", "<sigma>", 0x03c2 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ohash mchars;
|
static struct ohash mchars;
|
50
contrib/mandoc/compat_strndup.c
Normal file
50
contrib/mandoc/compat_strndup.c
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#if HAVE_STRNDUP
|
||||||
|
|
||||||
|
int dummy;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* $Id: compat_strndup.c,v 1.1 2018/02/27 11:16:23 schwarze Exp $ */
|
||||||
|
/* OpenBSD: strndup.c,v 1.2 2015/08/31 02:53:57 guenther Exp */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
char *
|
||||||
|
strndup(const char *str, size_t maxlen)
|
||||||
|
{
|
||||||
|
char *copy;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
for (len = 0; len < maxlen && str[len] != '\0'; len++)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
copy = malloc(len + 1);
|
||||||
|
if (copy != NULL) {
|
||||||
|
(void)memcpy(copy, str, len);
|
||||||
|
copy[len] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -38,6 +38,7 @@
|
||||||
#define HAVE_STRINGLIST 1
|
#define HAVE_STRINGLIST 1
|
||||||
#define HAVE_STRLCAT 1
|
#define HAVE_STRLCAT 1
|
||||||
#define HAVE_STRLCPY 1
|
#define HAVE_STRLCPY 1
|
||||||
|
#define HAVE_STRNDUP 1
|
||||||
#define HAVE_STRPTIME 1
|
#define HAVE_STRPTIME 1
|
||||||
#define HAVE_STRSEP 1
|
#define HAVE_STRSEP 1
|
||||||
#define HAVE_STRTONUM 1
|
#define HAVE_STRTONUM 1
|
||||||
|
@ -47,6 +48,7 @@
|
||||||
#define HAVE_OHASH 1
|
#define HAVE_OHASH 1
|
||||||
|
|
||||||
#define BINM_APROPOS "apropos"
|
#define BINM_APROPOS "apropos"
|
||||||
|
#define BINM_CATMAN "catman"
|
||||||
#define BINM_MAKEWHATIS "makewhatis"
|
#define BINM_MAKEWHATIS "makewhatis"
|
||||||
#define BINM_MAN "man"
|
#define BINM_MAN "man"
|
||||||
#define BINM_SOELIM "soelim"
|
#define BINM_SOELIM "soelim"
|
117
contrib/mdocml/configure → contrib/mandoc/configure
vendored
117
contrib/mdocml/configure → contrib/mandoc/configure
vendored
|
@ -1,8 +1,8 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# $Id: configure,v 1.64 2017/07/01 09:47:30 schwarze Exp $
|
# $Id: configure,v 1.66 2018/07/31 15:34:00 schwarze Exp $
|
||||||
#
|
#
|
||||||
# Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
# Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and distribute this software for any
|
# Permission to use, copy, modify, and distribute this software for any
|
||||||
# purpose with or without fee is hereby granted, provided that the above
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -27,7 +27,7 @@ set -e
|
||||||
# 3: config.log
|
# 3: config.log
|
||||||
|
|
||||||
exec 3> config.log
|
exec 3> config.log
|
||||||
echo "config.log: writing..."
|
echo "file config.log: writing..."
|
||||||
|
|
||||||
# --- default settings -------------------------------------------------
|
# --- default settings -------------------------------------------------
|
||||||
# Initialize all variables here,
|
# Initialize all variables here,
|
||||||
|
@ -41,14 +41,13 @@ OSNAME=
|
||||||
UTF8_LOCALE=
|
UTF8_LOCALE=
|
||||||
|
|
||||||
CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | env -i make -sf -`
|
CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | env -i make -sf -`
|
||||||
CFLAGS="-g -W -Wall -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings"
|
CFLAGS=
|
||||||
CFLAGS="${CFLAGS} -Wno-unused-parameter"
|
|
||||||
LDADD=
|
LDADD=
|
||||||
LDFLAGS=
|
LDFLAGS=
|
||||||
LD_NANOSLEEP=
|
LD_NANOSLEEP=
|
||||||
LD_OHASH=
|
LD_OHASH=
|
||||||
LD_RECVMSG=
|
LD_RECVMSG=
|
||||||
STATIC="-static"
|
STATIC=
|
||||||
|
|
||||||
BUILD_CGI=0
|
BUILD_CGI=0
|
||||||
BUILD_CATMAN=0
|
BUILD_CATMAN=0
|
||||||
|
@ -83,6 +82,7 @@ HAVE_STRCASESTR=
|
||||||
HAVE_STRINGLIST=
|
HAVE_STRINGLIST=
|
||||||
HAVE_STRLCAT=
|
HAVE_STRLCAT=
|
||||||
HAVE_STRLCPY=
|
HAVE_STRLCPY=
|
||||||
|
HAVE_STRNDUP=
|
||||||
HAVE_STRPTIME=
|
HAVE_STRPTIME=
|
||||||
HAVE_STRSEP=
|
HAVE_STRSEP=
|
||||||
HAVE_STRTONUM=
|
HAVE_STRTONUM=
|
||||||
|
@ -126,27 +126,25 @@ LN="ln -f"
|
||||||
# --- manual settings from configure.local -----------------------------
|
# --- manual settings from configure.local -----------------------------
|
||||||
|
|
||||||
if [ -r ./configure.local ]; then
|
if [ -r ./configure.local ]; then
|
||||||
echo "configure.local: reading..." 1>&2
|
echo "file configure.local: reading..." 1>&2
|
||||||
echo "configure.local: reading..." 1>&3
|
echo "file configure.local: reading..." 1>&3
|
||||||
cat ./configure.local 1>&3
|
cat ./configure.local 1>&3
|
||||||
. ./configure.local
|
. ./configure.local
|
||||||
else
|
else
|
||||||
echo "configure.local: no (fully automatic configuration)" 1>&2
|
echo "file configure.local: no (fully automatic configuration)" 1>&2
|
||||||
echo "configure.local: no (fully automatic configuration)" 1>&3
|
echo "file configure.local: no (fully automatic configuration)" 1>&3
|
||||||
fi
|
fi
|
||||||
echo 1>&3
|
echo 1>&3
|
||||||
|
|
||||||
# --- tests for config.h ----------------------------------------------
|
# --- tests functions --------------------------------------------------
|
||||||
|
|
||||||
COMP="${CC} ${CFLAGS} -Wno-unused -Werror"
|
|
||||||
|
|
||||||
# Check whether this HAVE_ setting is manually overridden.
|
# Check whether this HAVE_ setting is manually overridden.
|
||||||
# If yes, use the override, if no, do not decide anything yet.
|
# If yes, use the override, if no, do not decide anything yet.
|
||||||
# Arguments: lower-case test name, manual value
|
# Arguments: test file name, test var name, manual value
|
||||||
ismanual() {
|
ismanual() {
|
||||||
[ -z "${3}" ] && return 1
|
[ -z "${3}" ] && return 1
|
||||||
echo "${1}: manual (HAVE_${2}=${3})" 1>&2
|
echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&2
|
||||||
echo "${1}: manual (HAVE_${2}=${3})" 1>&3
|
echo "tested ${1}: HAVE_${2}=${3} (manual)" 1>&3
|
||||||
echo 1>&3
|
echo 1>&3
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -154,31 +152,33 @@ ismanual() {
|
||||||
# Run a single autoconfiguration test.
|
# Run a single autoconfiguration test.
|
||||||
# In case of success, enable the feature.
|
# In case of success, enable the feature.
|
||||||
# In case of failure, do not decide anything yet.
|
# In case of failure, do not decide anything yet.
|
||||||
# Arguments: lower-case test name, upper-case test name, additional CFLAGS
|
# Arguments: test file name, test var name, additional CFLAGS
|
||||||
singletest() {
|
singletest() {
|
||||||
cat 1>&3 << __HEREDOC__
|
cat 1>&3 << __HEREDOC__
|
||||||
${1}${3}: testing...
|
testing ${1}${3} ...
|
||||||
${COMP} -o test-${1} test-${1}.c ${3}
|
${COMP} -o test-${1} test-${1}.c ${3}
|
||||||
__HEREDOC__
|
__HEREDOC__
|
||||||
|
|
||||||
if ${COMP} -o "test-${1}" "${SOURCEDIR}/test-${1}.c" ${3} 1>&3 2>&3
|
if ${COMP} -o "test-${1}" "${SOURCEDIR}/test-${1}.c" ${3} 1>&3 2>&3
|
||||||
then
|
then
|
||||||
echo "${1}${3}: ${CC} succeeded" 1>&3
|
echo "partial result of ${1}${3}: ${CC} succeeded" 1>&3
|
||||||
else
|
else
|
||||||
echo "${1}${3}: ${CC} failed with $?" 1>&3
|
echo "result of ${1}${3}: ${CC} failed with exit status $?" 1>&3
|
||||||
|
echo "result of compiling ${1}${3}: no" 1>&3
|
||||||
echo 1>&3
|
echo 1>&3
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ./test-${1} 1>&3 2>&3; then
|
if ./test-${1} 1>&3 2>&3; then
|
||||||
echo "${1}${3}: yes" 1>&2
|
echo "tested ${1}${3}: yes" 1>&2
|
||||||
echo "${1}${3}: yes" 1>&3
|
echo "result of running ${1}${3}: yes" 1>&3
|
||||||
echo 1>&3
|
echo 1>&3
|
||||||
eval HAVE_${2}=1
|
eval HAVE_${2}=1
|
||||||
rm "test-${1}"
|
rm "test-${1}"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
echo "${1}${3}: execution failed with $?" 1>&3
|
echo "result of ${1}${3}: execution failed with exit status $?" 1>&3
|
||||||
|
echo "result of running ${1}${3}: no" 1>&3
|
||||||
echo 1>&3
|
echo 1>&3
|
||||||
rm "test-${1}"
|
rm "test-${1}"
|
||||||
return 1
|
return 1
|
||||||
|
@ -187,12 +187,12 @@ __HEREDOC__
|
||||||
|
|
||||||
# Run a complete autoconfiguration test, including the check for
|
# Run a complete autoconfiguration test, including the check for
|
||||||
# a manual override and disabling the feature on failure.
|
# a manual override and disabling the feature on failure.
|
||||||
# Arguments: lower case name, upper case name, additional CFLAGS
|
# Arguments: test file name, test var name, additional CFLAGS
|
||||||
runtest() {
|
runtest() {
|
||||||
eval _manual=\${HAVE_${2}}
|
eval _manual=\${HAVE_${2}}
|
||||||
ismanual "${1}" "${2}" "${_manual}" && return 0
|
ismanual "${1}" "${2}" "${_manual}" && return 0
|
||||||
singletest "${1}" "${2}" "${3}" && return 0
|
singletest "${1}" "${2}" "${3}" && return 0
|
||||||
echo "${1}${3}: no" 1>&2
|
echo "tested ${1}${3}: no" 1>&2
|
||||||
eval HAVE_${2}=0
|
eval HAVE_${2}=0
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -201,18 +201,54 @@ runtest() {
|
||||||
get_locale() {
|
get_locale() {
|
||||||
[ -n "${HAVE_WCHAR}" ] && [ "${HAVE_WCHAR}" -eq 0 ] && return 0
|
[ -n "${HAVE_WCHAR}" ] && [ "${HAVE_WCHAR}" -eq 0 ] && return 0
|
||||||
ismanual UTF8_LOCALE UTF8_LOCALE "$UTF8_LOCALE" && return 0
|
ismanual UTF8_LOCALE UTF8_LOCALE "$UTF8_LOCALE" && return 0
|
||||||
echo "UTF8_LOCALE: testing..." 1>&3
|
echo "testing UTF8_LOCALE ..." 1>&3
|
||||||
UTF8_LOCALE=`locale -a | grep -i '^en_US\.UTF-*8$' | head -n 1`
|
UTF8_LOCALE=`locale -a | grep -i '^en_US\.UTF-*8$' | head -n 1`
|
||||||
if [ -z "${UTF8_LOCALE}" ]; then
|
if [ -z "${UTF8_LOCALE}" ]; then
|
||||||
UTF8_LOCALE=`locale -a | grep -i '\.UTF-*8' | head -n 1`
|
UTF8_LOCALE=`locale -a | grep -i '\.UTF-*8' | head -n 1`
|
||||||
[ -n "${UTF8_LOCALE}" ] || return 1
|
[ -n "${UTF8_LOCALE}" ] || return 1
|
||||||
fi
|
fi
|
||||||
echo "UTF8_LOCALE=${UTF8_LOCALE}" 1>&2
|
echo "selected UTF8_LOCALE=${UTF8_LOCALE}" 1>&2
|
||||||
echo "UTF8_LOCALE=${UTF8_LOCALE}" 1>&3
|
echo "selected UTF8_LOCALE=${UTF8_LOCALE}" 1>&3
|
||||||
echo 1>&3
|
echo 1>&3
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- compiler options -------------------------------------------------
|
||||||
|
|
||||||
|
if [ -n "${CFLAGS}" ]; then
|
||||||
|
COMP="${CC} ${CFLAGS}"
|
||||||
|
echo "selected CFLAGS=\"${CFLAGS}\" (manual)" 1>&2
|
||||||
|
echo "selected CFLAGS=\"${CFLAGS}\" (manual)" 1>&3
|
||||||
|
echo 1>&3
|
||||||
|
else
|
||||||
|
CFLAGS="-g -W -Wall -Wmissing-prototypes -Wstrict-prototypes"
|
||||||
|
CFLAGS="${CFLAGS} -Wwrite-strings -Wno-unused-parameter"
|
||||||
|
COMP="${CC} ${CFLAGS} -Wno-unused -Werror"
|
||||||
|
echo -n "tested ${CC} -W: " 1>&2
|
||||||
|
echo -n "testing ${CC} -W: " 1>&3
|
||||||
|
runtest noop WFLAG || true
|
||||||
|
if [ "${HAVE_WFLAG}" -eq 0 ]; then
|
||||||
|
CFLAGS="-g"
|
||||||
|
COMP="${CC} ${CFLAGS}"
|
||||||
|
fi
|
||||||
|
echo "selected CFLAGS=\"${CFLAGS}\"" 1>&2
|
||||||
|
echo "selected CFLAGS=\"${CFLAGS}\"" 1>&3
|
||||||
|
echo 1>&3
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${STATIC}" ]; then
|
||||||
|
echo "selected STATIC=\"${STATIC}\" (manual)" 1>&2
|
||||||
|
echo "selected STATIC=\"${STATIC}\" (manual)" 1>&3
|
||||||
|
echo 1>&3
|
||||||
|
else
|
||||||
|
runtest noop STATIC -static || true
|
||||||
|
[ ${HAVE_STATIC} -eq 0 ] || STATIC="-static"
|
||||||
|
echo "selected STATIC=\"${STATIC}\"" 1>&2
|
||||||
|
echo "selected STATIC=\"${STATIC}\"" 1>&3
|
||||||
|
echo 1>&3
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- tests for config.h ----------------------------------------------
|
||||||
|
|
||||||
# --- library functions ---
|
# --- library functions ---
|
||||||
runtest dirent-namlen DIRENT_NAMLEN || true
|
runtest dirent-namlen DIRENT_NAMLEN || true
|
||||||
|
@ -238,6 +274,7 @@ runtest strcasestr STRCASESTR || true
|
||||||
runtest stringlist STRINGLIST || true
|
runtest stringlist STRINGLIST || true
|
||||||
runtest strlcat STRLCAT || true
|
runtest strlcat STRLCAT || true
|
||||||
runtest strlcpy STRLCPY || true
|
runtest strlcpy STRLCPY || true
|
||||||
|
runtest strndup STRNDUP || true
|
||||||
runtest strptime STRPTIME || true
|
runtest strptime STRPTIME || true
|
||||||
runtest strsep STRSEP || true
|
runtest strsep STRSEP || true
|
||||||
runtest strtonum STRTONUM || true
|
runtest strtonum STRTONUM || true
|
||||||
|
@ -264,8 +301,9 @@ if get_locale; then
|
||||||
runtest wchar WCHAR -DUTF8_LOCALE=\"${UTF8_LOCALE}\" || true
|
runtest wchar WCHAR -DUTF8_LOCALE=\"${UTF8_LOCALE}\" || true
|
||||||
else
|
else
|
||||||
HAVE_WCHAR=0
|
HAVE_WCHAR=0
|
||||||
echo "wchar: no (no UTF8_LOCALE)" 1>&2
|
echo "tested wchar: no (no UTF8_LOCALE)" 1>&2
|
||||||
echo "wchar: no (no UTF8_LOCALE)" 1>&3
|
echo "tested wchar: no (no UTF8_LOCALE)" 1>&3
|
||||||
|
echo 1>&3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- nanosleep ---
|
# --- nanosleep ---
|
||||||
|
@ -328,8 +366,8 @@ fi
|
||||||
|
|
||||||
# --- LDADD ---
|
# --- LDADD ---
|
||||||
LDADD="${LDADD} ${LD_NANOSLEEP} ${LD_RECVMSG} ${LD_OHASH} -lz"
|
LDADD="${LDADD} ${LD_NANOSLEEP} ${LD_RECVMSG} ${LD_OHASH} -lz"
|
||||||
echo "LDADD=\"${LDADD}\"" 1>&2
|
echo "selected LDADD=\"${LDADD}\"" 1>&2
|
||||||
echo "LDADD=\"${LDADD}\"" 1>&3
|
echo "selected LDADD=\"${LDADD}\"" 1>&3
|
||||||
echo 1>&3
|
echo 1>&3
|
||||||
|
|
||||||
# --- write config.h ---
|
# --- write config.h ---
|
||||||
|
@ -353,7 +391,8 @@ __HEREDOC__
|
||||||
|
|
||||||
[ ${HAVE_GETLINE} -eq 0 -o \
|
[ ${HAVE_GETLINE} -eq 0 -o \
|
||||||
${HAVE_REALLOCARRAY} -eq 0 -o ${HAVE_RECALLOCARRAY} -eq 0 -o \
|
${HAVE_REALLOCARRAY} -eq 0 -o ${HAVE_RECALLOCARRAY} -eq 0 -o \
|
||||||
${HAVE_STRLCAT} -eq 0 -o ${HAVE_STRLCPY} -eq 0 ] \
|
${HAVE_STRLCAT} -eq 0 -o ${HAVE_STRLCPY} -eq 0 -o \
|
||||||
|
${HAVE_STRNDUP} -eq 0 ] \
|
||||||
&& echo "#include <sys/types.h>"
|
&& echo "#include <sys/types.h>"
|
||||||
[ ${HAVE_VASPRINTF} -eq 0 ] && echo "#include <stdarg.h>"
|
[ ${HAVE_VASPRINTF} -eq 0 ] && echo "#include <stdarg.h>"
|
||||||
[ ${HAVE_GETLINE} -eq 0 ] && echo "#include <stdio.h>"
|
[ ${HAVE_GETLINE} -eq 0 ] && echo "#include <stdio.h>"
|
||||||
|
@ -396,6 +435,7 @@ cat << __HEREDOC__
|
||||||
#define HAVE_STRINGLIST ${HAVE_STRINGLIST}
|
#define HAVE_STRINGLIST ${HAVE_STRINGLIST}
|
||||||
#define HAVE_STRLCAT ${HAVE_STRLCAT}
|
#define HAVE_STRLCAT ${HAVE_STRLCAT}
|
||||||
#define HAVE_STRLCPY ${HAVE_STRLCPY}
|
#define HAVE_STRLCPY ${HAVE_STRLCPY}
|
||||||
|
#define HAVE_STRNDUP ${HAVE_STRNDUP}
|
||||||
#define HAVE_STRPTIME ${HAVE_STRPTIME}
|
#define HAVE_STRPTIME ${HAVE_STRPTIME}
|
||||||
#define HAVE_STRSEP ${HAVE_STRSEP}
|
#define HAVE_STRSEP ${HAVE_STRSEP}
|
||||||
#define HAVE_STRTONUM ${HAVE_STRTONUM}
|
#define HAVE_STRTONUM ${HAVE_STRTONUM}
|
||||||
|
@ -452,6 +492,9 @@ fi
|
||||||
[ ${HAVE_STRLCPY} -eq 0 ] && \
|
[ ${HAVE_STRLCPY} -eq 0 ] && \
|
||||||
echo "extern size_t strlcpy(char *, const char *, size_t);"
|
echo "extern size_t strlcpy(char *, const char *, size_t);"
|
||||||
|
|
||||||
|
[ ${HAVE_STRNDUP} -eq 0 ] && \
|
||||||
|
echo "extern char *strndup(const char *, size_t);"
|
||||||
|
|
||||||
[ ${HAVE_STRSEP} -eq 0 ] && \
|
[ ${HAVE_STRSEP} -eq 0 ] && \
|
||||||
echo "extern char *strsep(char **, const char *);"
|
echo "extern char *strsep(char **, const char *);"
|
||||||
|
|
||||||
|
@ -461,8 +504,8 @@ fi
|
||||||
[ ${HAVE_VASPRINTF} -eq 0 ] && \
|
[ ${HAVE_VASPRINTF} -eq 0 ] && \
|
||||||
echo "extern int vasprintf(char **, const char *, va_list);"
|
echo "extern int vasprintf(char **, const char *, va_list);"
|
||||||
|
|
||||||
echo "config.h: written" 1>&2
|
echo "file config.h: written" 1>&2
|
||||||
echo "config.h: written" 1>&3
|
echo "file config.h: written" 1>&3
|
||||||
|
|
||||||
# --- tests for Makefile.local -----------------------------------------
|
# --- tests for Makefile.local -----------------------------------------
|
||||||
|
|
||||||
|
@ -531,7 +574,7 @@ INSTALL_DATA = ${INSTALL_DATA}
|
||||||
LN = ${LN}
|
LN = ${LN}
|
||||||
__HEREDOC__
|
__HEREDOC__
|
||||||
|
|
||||||
echo "Makefile.local: written" 1>&2
|
echo "file Makefile.local: written" 1>&2
|
||||||
echo "Makefile.local: written" 1>&3
|
echo "file Makefile.local: written" 1>&3
|
||||||
|
|
||||||
exit 0
|
exit 0
|
|
@ -1,6 +1,6 @@
|
||||||
# $Id: configure.local.example,v 1.33 2017/07/20 16:24:53 schwarze Exp $
|
# $Id: configure.local.example,v 1.34 2018/07/31 15:34:00 schwarze Exp $
|
||||||
#
|
#
|
||||||
# Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
# Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and distribute this software for any
|
# Permission to use, copy, modify, and distribute this software for any
|
||||||
# purpose with or without fee is hereby granted, provided that the above
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -77,7 +77,7 @@ MANPATH_BASE="/usr/share/man:/usr/X11R6/man"
|
||||||
# If you do not want uname(3) to be called but instead want a fixed
|
# If you do not want uname(3) to be called but instead want a fixed
|
||||||
# string to be used, use the following line:
|
# string to be used, use the following line:
|
||||||
|
|
||||||
OSNAME="OpenBSD 6.0"
|
OSNAME="OpenBSD 6.3"
|
||||||
|
|
||||||
# The following installation directories are used.
|
# The following installation directories are used.
|
||||||
# It is possible to set only one or a few of these variables,
|
# It is possible to set only one or a few of these variables,
|
||||||
|
@ -100,6 +100,7 @@ BIN_FROM_SBIN="../bin"
|
||||||
# Some distributions may want to avoid naming conflicts
|
# Some distributions may want to avoid naming conflicts
|
||||||
# with the configuration files of other man(1) implementations.
|
# with the configuration files of other man(1) implementations.
|
||||||
# This changes the name of the installed section 5 manual page as well.
|
# This changes the name of the installed section 5 manual page as well.
|
||||||
|
|
||||||
MANM_MANCONF="mandoc.conf" # default is "man.conf"
|
MANM_MANCONF="mandoc.conf" # default is "man.conf"
|
||||||
|
|
||||||
# Some distributions may want to avoid naming conflicts among manuals.
|
# Some distributions may want to avoid naming conflicts among manuals.
|
||||||
|
@ -148,13 +149,6 @@ LN="ln -sf" # default is "ln -f"
|
||||||
|
|
||||||
LD_OHASH="-lutil"
|
LD_OHASH="-lutil"
|
||||||
|
|
||||||
# When library autodetection decides to use -L/usr/local/lib,
|
|
||||||
# -I/usr/local/include is automatically added to CFLAGS.
|
|
||||||
# If you manually set LD_OHASH to something including -L/usr/local/lib,
|
|
||||||
# chances are you will also need the following line:
|
|
||||||
|
|
||||||
CFLAGS="${CFLAGS} -I/usr/local/include"
|
|
||||||
|
|
||||||
# Some platforms may need an additional linker flag for nanosleep(2).
|
# Some platforms may need an additional linker flag for nanosleep(2).
|
||||||
# If none is needed or it is -lrt, it is autodetected.
|
# If none is needed or it is -lrt, it is autodetected.
|
||||||
# Otherwise, set the following variable.
|
# Otherwise, set the following variable.
|
||||||
|
@ -222,16 +216,22 @@ BUILD_CGI=1
|
||||||
# The remaining settings in this section are only relevant if BUILD_CGI
|
# The remaining settings in this section are only relevant if BUILD_CGI
|
||||||
# is enabled. Otherwise, they have no effect either way.
|
# is enabled. Otherwise, they have no effect either way.
|
||||||
|
|
||||||
# By default, man.cgi(8) is linked statically.
|
# By default, man.cgi(8) is linked statically if the compiler supports
|
||||||
# Some systems do not support static linking, for example Mac OS X.
|
# the -static option. If automatic detection fails, you can force
|
||||||
# In that case, use the following line:
|
# static linking of man.cgi(8).
|
||||||
|
|
||||||
STATIC=
|
STATIC="-static"
|
||||||
|
|
||||||
# Some systems, for example Linux, require -pthread for static linking:
|
# Some systems may require -pthread for static linking:
|
||||||
|
|
||||||
STATIC="-static -pthread"
|
STATIC="-static -pthread"
|
||||||
|
|
||||||
|
# If static linking works in general but not with additional libraries
|
||||||
|
# like -lrt or -lz, you can force dynamic linking. This may for
|
||||||
|
# example be required on SunOS 5.9.
|
||||||
|
|
||||||
|
STATIC=" "
|
||||||
|
|
||||||
# Some directories.
|
# Some directories.
|
||||||
# This works just like PREFIX, see above.
|
# This works just like PREFIX, see above.
|
||||||
|
|
||||||
|
@ -263,15 +263,19 @@ BINM_CATMAN=mcatman # default is "catman"
|
||||||
|
|
||||||
CC=cc
|
CC=cc
|
||||||
|
|
||||||
|
# Because the system compiler may not provide <stdint.h>,
|
||||||
|
# SunOS 5.9 may need:
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
|
||||||
# IBM AIX may need:
|
# IBM AIX may need:
|
||||||
|
|
||||||
CC=xlc
|
CC=xlc
|
||||||
|
|
||||||
# The default compiler flags are:
|
# Normally, leave CFLAGS unset. In that case, -g will automatically
|
||||||
|
# be used, and various -W options will be added if the compiler
|
||||||
CFLAGS="-g -W -Wall -Wstrict-prototypes -Wno-unused-parameter -Wwrite-strings"
|
# supports them. If you define CFLAGS manually, it will be used
|
||||||
|
# unchanged, and nothing will be added.
|
||||||
# IBM AIX xlc does not support -W; in that case, please use:
|
|
||||||
|
|
||||||
CFLAGS="-g"
|
CFLAGS="-g"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $Id: eqn.7,v 1.36 2017/07/20 11:07:27 schwarze Exp $
|
.\" $Id: eqn.7,v 1.37 2017/09/04 10:35:27 schwarze Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
.\" Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
.\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
|
.\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: July 20 2017 $
|
.Dd $Mdocdate: September 4 2017 $
|
||||||
.Dt EQN 7
|
.Dt EQN 7
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -83,7 +83,7 @@ box : text
|
||||||
| \(dqsqrt\(dq box
|
| \(dqsqrt\(dq box
|
||||||
| box pos box
|
| box pos box
|
||||||
| box mark
|
| box mark
|
||||||
| \(dqmatrix\(dq \(dq{\(dq [col \(dq{\(dq list \(dq}\(dq ]*
|
| \(dqmatrix\(dq \(dq{\(dq [col \(dq{\(dq list \(dq}\(dq]* \(dq}\(dq
|
||||||
| pile \(dq{\(dq list \(dq}\(dq
|
| pile \(dq{\(dq list \(dq}\(dq
|
||||||
| font box
|
| font box
|
||||||
| \(dqsize\(dq text box
|
| \(dqsize\(dq text box
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: eqn_term.c,v 1.13 2017/07/08 14:51:04 schwarze Exp $ */
|
/* $Id: eqn_term.c,v 1.17 2017/08/23 21:56:20 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
@ -20,6 +20,7 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <ctype.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -51,6 +52,7 @@ static void
|
||||||
eqn_box(struct termp *p, const struct eqn_box *bp)
|
eqn_box(struct termp *p, const struct eqn_box *bp)
|
||||||
{
|
{
|
||||||
const struct eqn_box *child;
|
const struct eqn_box *child;
|
||||||
|
const char *cp;
|
||||||
int delim;
|
int delim;
|
||||||
|
|
||||||
/* Delimiters around this box? */
|
/* Delimiters around this box? */
|
||||||
|
@ -67,7 +69,16 @@ eqn_box(struct termp *p, const struct eqn_box *bp)
|
||||||
((bp->parent->type == EQN_LIST && bp->expectargs == 1) ||
|
((bp->parent->type == EQN_LIST && bp->expectargs == 1) ||
|
||||||
(bp->parent->type == EQN_SUBEXPR &&
|
(bp->parent->type == EQN_SUBEXPR &&
|
||||||
bp->pos != EQNPOS_SQRT)))))) {
|
bp->pos != EQNPOS_SQRT)))))) {
|
||||||
if (bp->parent->type == EQN_SUBEXPR && bp->prev != NULL)
|
if ((bp->parent->type == EQN_SUBEXPR && bp->prev != NULL) ||
|
||||||
|
(bp->type == EQN_LIST &&
|
||||||
|
bp->first != NULL &&
|
||||||
|
bp->first->type != EQN_PILE &&
|
||||||
|
bp->first->type != EQN_MATRIX &&
|
||||||
|
bp->prev != NULL &&
|
||||||
|
(bp->prev->type == EQN_LIST ||
|
||||||
|
(bp->prev->type == EQN_TEXT &&
|
||||||
|
(*bp->prev->text == '\\' ||
|
||||||
|
isalpha((unsigned char)*bp->prev->text))))))
|
||||||
p->flags |= TERMP_NOSPACE;
|
p->flags |= TERMP_NOSPACE;
|
||||||
term_word(p, bp->left != NULL ? bp->left : "(");
|
term_word(p, bp->left != NULL ? bp->left : "(");
|
||||||
p->flags |= TERMP_NOSPACE;
|
p->flags |= TERMP_NOSPACE;
|
||||||
|
@ -80,8 +91,17 @@ eqn_box(struct termp *p, const struct eqn_box *bp)
|
||||||
if (bp->font != EQNFONT_NONE)
|
if (bp->font != EQNFONT_NONE)
|
||||||
term_fontpush(p, fontmap[(int)bp->font]);
|
term_fontpush(p, fontmap[(int)bp->font]);
|
||||||
|
|
||||||
if (bp->text != NULL)
|
if (bp->text != NULL) {
|
||||||
|
if (strchr("!\"'),.:;?]}", *bp->text) != NULL)
|
||||||
|
p->flags |= TERMP_NOSPACE;
|
||||||
term_word(p, bp->text);
|
term_word(p, bp->text);
|
||||||
|
if ((cp = strchr(bp->text, '\0')) > bp->text &&
|
||||||
|
(strchr("\"'([{", cp[-1]) != NULL ||
|
||||||
|
(bp->prev == NULL && (cp[-1] == '-' ||
|
||||||
|
(cp >= bp->text + 5 &&
|
||||||
|
strcmp(cp - 5, "\\[mi]") == 0)))))
|
||||||
|
p->flags |= TERMP_NOSPACE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Special box types. */
|
/* Special box types. */
|
||||||
|
|
||||||
|
@ -98,9 +118,9 @@ eqn_box(struct termp *p, const struct eqn_box *bp)
|
||||||
term_word(p, bp->pos == EQNPOS_OVER ? "/" :
|
term_word(p, bp->pos == EQNPOS_OVER ? "/" :
|
||||||
(bp->pos == EQNPOS_SUP ||
|
(bp->pos == EQNPOS_SUP ||
|
||||||
bp->pos == EQNPOS_TO) ? "^" : "_");
|
bp->pos == EQNPOS_TO) ? "^" : "_");
|
||||||
p->flags |= TERMP_NOSPACE;
|
|
||||||
child = child->next;
|
child = child->next;
|
||||||
if (child != NULL) {
|
if (child != NULL) {
|
||||||
|
p->flags |= TERMP_NOSPACE;
|
||||||
eqn_box(p, child);
|
eqn_box(p, child);
|
||||||
if (bp->pos == EQNPOS_FROMTO ||
|
if (bp->pos == EQNPOS_FROMTO ||
|
||||||
bp->pos == EQNPOS_SUBSUP) {
|
bp->pos == EQNPOS_SUBSUP) {
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
|
# Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and distribute this software for any
|
# Permission to use, copy, modify, and distribute this software for any
|
||||||
# purpose with or without fee is hereby granted, provided that the above
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -19,7 +19,7 @@ if [ `id -u` -eq 0 ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $# -eq 0 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
echo "usage: $0 [-h] manual_source_file ..."
|
echo "usage: $0 [-h|-u] manual_source_file ..."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -28,22 +28,25 @@ if [ "X$1" = "X-h" ]; then
|
||||||
export PATH="/usr/local/heirloom-doctools/bin:$PATH"
|
export PATH="/usr/local/heirloom-doctools/bin:$PATH"
|
||||||
EQN="neqn"
|
EQN="neqn"
|
||||||
ROFF="nroff"
|
ROFF="nroff"
|
||||||
MOPT="-Omdoc $MOPT"
|
MOPT="-Ios=BSD -Tascii $MOPT"
|
||||||
|
COLPIPE="col -b"
|
||||||
elif [ "X$1" = "X-u" ]; then
|
elif [ "X$1" = "X-u" ]; then
|
||||||
shift
|
shift
|
||||||
ROFF="groff -ket -ww -Tutf8 -P -c"
|
ROFF="groff -ket -ww -Tutf8 -P -c"
|
||||||
MOPT="-Werror -Tutf8 $MOPT"
|
MOPT="-Ios=OpenBSD -Wall -Tutf8 $MOPT"
|
||||||
|
COLPIPE="cat"
|
||||||
else
|
else
|
||||||
ROFF="groff -et -ww -Tascii -P -c"
|
ROFF="groff -et -ww -mtty-char -Tascii -P -c"
|
||||||
MOPT="-Werror -Tascii $MOPT"
|
MOPT="-Ios=OpenBSD -Wall -Tascii $MOPT"
|
||||||
|
COLPIPE="cat"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while [ -n "$1" ]; do
|
while [ -n "$1" ]; do
|
||||||
file=$1
|
file=$1
|
||||||
shift
|
shift
|
||||||
echo " ========== $file ========== "
|
echo " ========== $file ========== "
|
||||||
$ROFF -mandoc $file 2> /tmp/roff.err > /tmp/roff.out
|
$ROFF -mandoc $file | $COLPIPE 2> /tmp/roff.err > /tmp/roff.out
|
||||||
${MANDOC:=mandoc} -Ios=OpenBSD $MOPT $file \
|
${MANDOC:=mandoc} $MOPT $file | $COLPIPE \
|
||||||
2> /tmp/mandoc.err > /tmp/mandoc.out
|
2> /tmp/mandoc.err > /tmp/mandoc.out
|
||||||
for i in roff mandoc; do
|
for i in roff mandoc; do
|
||||||
[ -s /tmp/$i.err ] && echo "$i errors:" && cat /tmp/$i.err
|
[ -s /tmp/$i.err ] && echo "$i errors:" && cat /tmp/$i.err
|
|
@ -1,7 +1,7 @@
|
||||||
/* $Id: html.c,v 1.219 2017/07/15 17:57:51 schwarze Exp $ */
|
/* $Id: html.c,v 1.238 2018/06/25 16:54:59 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2011-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2011-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -22,6 +22,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <stddef.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -29,6 +30,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "mandoc_aux.h"
|
#include "mandoc_aux.h"
|
||||||
|
#include "mandoc_ohash.h"
|
||||||
#include "mandoc.h"
|
#include "mandoc.h"
|
||||||
#include "roff.h"
|
#include "roff.h"
|
||||||
#include "out.h"
|
#include "out.h"
|
||||||
|
@ -59,6 +61,7 @@ static const struct htmldata htmltags[TAG_MAX] = {
|
||||||
{"meta", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL},
|
{"meta", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL},
|
||||||
{"title", HTML_NLAROUND},
|
{"title", HTML_NLAROUND},
|
||||||
{"div", HTML_NLAROUND},
|
{"div", HTML_NLAROUND},
|
||||||
|
{"div", 0},
|
||||||
{"h1", HTML_NLAROUND},
|
{"h1", HTML_NLAROUND},
|
||||||
{"h2", HTML_NLAROUND},
|
{"h2", HTML_NLAROUND},
|
||||||
{"span", 0},
|
{"span", 0},
|
||||||
|
@ -66,8 +69,6 @@ static const struct htmldata htmltags[TAG_MAX] = {
|
||||||
{"br", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL},
|
{"br", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL},
|
||||||
{"a", 0},
|
{"a", 0},
|
||||||
{"table", HTML_NLALL | HTML_INDENT},
|
{"table", HTML_NLALL | HTML_INDENT},
|
||||||
{"colgroup", HTML_NLALL | HTML_INDENT},
|
|
||||||
{"col", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL},
|
|
||||||
{"tr", HTML_NLALL | HTML_INDENT},
|
{"tr", HTML_NLALL | HTML_INDENT},
|
||||||
{"td", HTML_NLAROUND},
|
{"td", HTML_NLAROUND},
|
||||||
{"li", HTML_NLAROUND | HTML_INDENT},
|
{"li", HTML_NLAROUND | HTML_INDENT},
|
||||||
|
@ -103,20 +104,9 @@ static const struct htmldata htmltags[TAG_MAX] = {
|
||||||
{"mover", 0},
|
{"mover", 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *const roffscales[SCALE_MAX] = {
|
/* Avoid duplicate HTML id= attributes. */
|
||||||
"cm", /* SCALE_CM */
|
static struct ohash id_unique;
|
||||||
"in", /* SCALE_IN */
|
|
||||||
"pc", /* SCALE_PC */
|
|
||||||
"pt", /* SCALE_PT */
|
|
||||||
"em", /* SCALE_EM */
|
|
||||||
"em", /* SCALE_MM */
|
|
||||||
"ex", /* SCALE_EN */
|
|
||||||
"ex", /* SCALE_BU */
|
|
||||||
"em", /* SCALE_VS */
|
|
||||||
"ex", /* SCALE_FS */
|
|
||||||
};
|
|
||||||
|
|
||||||
static void a2width(const char *, struct roffsu *);
|
|
||||||
static void print_byte(struct html *, char);
|
static void print_byte(struct html *, char);
|
||||||
static void print_endword(struct html *);
|
static void print_endword(struct html *);
|
||||||
static void print_indent(struct html *);
|
static void print_indent(struct html *);
|
||||||
|
@ -143,6 +133,8 @@ html_alloc(const struct manoutput *outopts)
|
||||||
if (outopts->fragment)
|
if (outopts->fragment)
|
||||||
h->oflags |= HTML_FRAGMENT;
|
h->oflags |= HTML_FRAGMENT;
|
||||||
|
|
||||||
|
mandoc_ohash_init(&id_unique, 4, 0);
|
||||||
|
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,15 +143,22 @@ html_free(void *p)
|
||||||
{
|
{
|
||||||
struct tag *tag;
|
struct tag *tag;
|
||||||
struct html *h;
|
struct html *h;
|
||||||
|
char *cp;
|
||||||
|
unsigned int slot;
|
||||||
|
|
||||||
h = (struct html *)p;
|
h = (struct html *)p;
|
||||||
|
|
||||||
while ((tag = h->tag) != NULL) {
|
while ((tag = h->tag) != NULL) {
|
||||||
h->tag = tag->next;
|
h->tag = tag->next;
|
||||||
free(tag);
|
free(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(h);
|
free(h);
|
||||||
|
|
||||||
|
cp = ohash_first(&id_unique, &slot);
|
||||||
|
while (cp != NULL) {
|
||||||
|
free(cp);
|
||||||
|
cp = ohash_next(&id_unique, &slot);
|
||||||
|
}
|
||||||
|
ohash_delete(&id_unique);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -168,9 +167,14 @@ print_gen_head(struct html *h)
|
||||||
struct tag *t;
|
struct tag *t;
|
||||||
|
|
||||||
print_otag(h, TAG_META, "?", "charset", "utf-8");
|
print_otag(h, TAG_META, "?", "charset", "utf-8");
|
||||||
|
if (h->style != NULL) {
|
||||||
|
print_otag(h, TAG_LINK, "?h??", "rel", "stylesheet",
|
||||||
|
h->style, "type", "text/css", "media", "all");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Print a default style-sheet.
|
* Print a minimal embedded style sheet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
t = print_otag(h, TAG_STYLE, "");
|
t = print_otag(h, TAG_STYLE, "");
|
||||||
|
@ -181,11 +185,23 @@ print_gen_head(struct html *h)
|
||||||
print_text(h, "td.head-vol { text-align: center; }");
|
print_text(h, "td.head-vol { text-align: center; }");
|
||||||
print_endline(h);
|
print_endline(h);
|
||||||
print_text(h, "div.Pp { margin: 1ex 0ex; }");
|
print_text(h, "div.Pp { margin: 1ex 0ex; }");
|
||||||
|
print_endline(h);
|
||||||
|
print_text(h, "div.Nd, div.Bf, div.Op { display: inline; }");
|
||||||
|
print_endline(h);
|
||||||
|
print_text(h, "span.Pa, span.Ad { font-style: italic; }");
|
||||||
|
print_endline(h);
|
||||||
|
print_text(h, "span.Ms { font-weight: bold; }");
|
||||||
|
print_endline(h);
|
||||||
|
print_text(h, "dl.Bl-diag ");
|
||||||
|
print_byte(h, '>');
|
||||||
|
print_text(h, " dt { font-weight: bold; }");
|
||||||
|
print_endline(h);
|
||||||
|
print_text(h, "code.Nm, code.Fl, code.Cm, code.Ic, "
|
||||||
|
"code.In, code.Fd, code.Fn,");
|
||||||
|
print_endline(h);
|
||||||
|
print_text(h, "code.Cd { font-weight: bold; "
|
||||||
|
"font-family: inherit; }");
|
||||||
print_tagq(h, t);
|
print_tagq(h, t);
|
||||||
|
|
||||||
if (h->style)
|
|
||||||
print_otag(h, TAG_LINK, "?h??", "rel", "stylesheet",
|
|
||||||
h->style, "type", "text/css", "media", "all");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -239,10 +255,12 @@ print_metaf(struct html *h, enum mandoc_esc deco)
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
html_make_id(const struct roff_node *n)
|
html_make_id(const struct roff_node *n, int unique)
|
||||||
{
|
{
|
||||||
const struct roff_node *nch;
|
const struct roff_node *nch;
|
||||||
char *buf, *cp;
|
char *buf, *bufs, *cp;
|
||||||
|
unsigned int slot;
|
||||||
|
int suffix;
|
||||||
|
|
||||||
for (nch = n->child; nch != NULL; nch = nch->next)
|
for (nch = n->child; nch != NULL; nch = nch->next)
|
||||||
if (nch->type != ROFFT_TEXT)
|
if (nch->type != ROFFT_TEXT)
|
||||||
|
@ -250,65 +268,46 @@ html_make_id(const struct roff_node *n)
|
||||||
|
|
||||||
buf = NULL;
|
buf = NULL;
|
||||||
deroff(&buf, n);
|
deroff(&buf, n);
|
||||||
|
if (buf == NULL)
|
||||||
/* http://www.w3.org/TR/html5/dom.html#the-id-attribute */
|
return NULL;
|
||||||
|
|
||||||
for (cp = buf; *cp != '\0'; cp++)
|
|
||||||
if (*cp == ' ')
|
|
||||||
*cp = '_';
|
|
||||||
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
html_strlen(const char *cp)
|
|
||||||
{
|
|
||||||
size_t rsz;
|
|
||||||
int skip, sz;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Account for escaped sequences within string length
|
* In ID attributes, only use ASCII characters that are
|
||||||
* calculations. This follows the logic in term_strlen() as we
|
* permitted in URL-fragment strings according to the
|
||||||
* must calculate the width of produced strings.
|
* explicit list at:
|
||||||
* Assume that characters are always width of "1". This is
|
* https://url.spec.whatwg.org/#url-fragment-string
|
||||||
* hacky, but it gets the job done for approximation of widths.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
sz = 0;
|
for (cp = buf; *cp != '\0'; cp++)
|
||||||
skip = 0;
|
if (isalnum((unsigned char)*cp) == 0 &&
|
||||||
while (1) {
|
strchr("!$&'()*+,-./:;=?@_~", *cp) == NULL)
|
||||||
rsz = strcspn(cp, "\\");
|
*cp = '_';
|
||||||
if (rsz) {
|
|
||||||
cp += rsz;
|
if (unique == 0)
|
||||||
if (skip) {
|
return buf;
|
||||||
skip = 0;
|
|
||||||
rsz--;
|
/* Avoid duplicate HTML id= attributes. */
|
||||||
|
|
||||||
|
bufs = NULL;
|
||||||
|
suffix = 1;
|
||||||
|
slot = ohash_qlookup(&id_unique, buf);
|
||||||
|
cp = ohash_find(&id_unique, slot);
|
||||||
|
if (cp != NULL) {
|
||||||
|
while (cp != NULL) {
|
||||||
|
free(bufs);
|
||||||
|
if (++suffix > 127) {
|
||||||
|
free(buf);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
sz += rsz;
|
mandoc_asprintf(&bufs, "%s_%d", buf, suffix);
|
||||||
}
|
slot = ohash_qlookup(&id_unique, bufs);
|
||||||
if ('\0' == *cp)
|
cp = ohash_find(&id_unique, slot);
|
||||||
break;
|
|
||||||
cp++;
|
|
||||||
switch (mandoc_escape(&cp, NULL, NULL)) {
|
|
||||||
case ESCAPE_ERROR:
|
|
||||||
return sz;
|
|
||||||
case ESCAPE_UNICODE:
|
|
||||||
case ESCAPE_NUMBERED:
|
|
||||||
case ESCAPE_SPECIAL:
|
|
||||||
case ESCAPE_OVERSTRIKE:
|
|
||||||
if (skip)
|
|
||||||
skip = 0;
|
|
||||||
else
|
|
||||||
sz++;
|
|
||||||
break;
|
|
||||||
case ESCAPE_SKIPCHAR:
|
|
||||||
skip = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
free(buf);
|
||||||
|
buf = bufs;
|
||||||
}
|
}
|
||||||
return sz;
|
ohash_insert(&id_unique, slot, buf);
|
||||||
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -490,13 +489,10 @@ struct tag *
|
||||||
print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
|
print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
struct roffsu mysu, *su;
|
|
||||||
char numbuf[16];
|
|
||||||
struct tag *t;
|
struct tag *t;
|
||||||
const char *attr;
|
const char *attr;
|
||||||
char *arg1, *arg2;
|
char *arg1, *arg2;
|
||||||
double v;
|
int tflags;
|
||||||
int i, have_style, tflags;
|
|
||||||
|
|
||||||
tflags = htmltags[tag].flags;
|
tflags = htmltags[tag].flags;
|
||||||
|
|
||||||
|
@ -536,17 +532,12 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
|
|
||||||
have_style = 0;
|
|
||||||
while (*fmt != '\0') {
|
while (*fmt != '\0') {
|
||||||
if (*fmt == 's') {
|
|
||||||
have_style = 1;
|
|
||||||
fmt++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse a non-style attribute and its arguments. */
|
/* Parse attributes and arguments. */
|
||||||
|
|
||||||
arg1 = va_arg(ap, char *);
|
arg1 = va_arg(ap, char *);
|
||||||
|
arg2 = NULL;
|
||||||
switch (*fmt++) {
|
switch (*fmt++) {
|
||||||
case 'c':
|
case 'c':
|
||||||
attr = "class";
|
attr = "class";
|
||||||
|
@ -557,6 +548,10 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
|
||||||
case 'i':
|
case 'i':
|
||||||
attr = "id";
|
attr = "id";
|
||||||
break;
|
break;
|
||||||
|
case 's':
|
||||||
|
attr = "style";
|
||||||
|
arg2 = va_arg(ap, char *);
|
||||||
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
attr = arg1;
|
attr = arg1;
|
||||||
arg1 = va_arg(ap, char *);
|
arg1 = va_arg(ap, char *);
|
||||||
|
@ -564,13 +559,12 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
|
||||||
default:
|
default:
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
arg2 = NULL;
|
|
||||||
if (*fmt == 'M')
|
if (*fmt == 'M')
|
||||||
arg2 = va_arg(ap, char *);
|
arg2 = va_arg(ap, char *);
|
||||||
if (arg1 == NULL)
|
if (arg1 == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Print the non-style attributes. */
|
/* Print the attributes. */
|
||||||
|
|
||||||
print_byte(h, ' ');
|
print_byte(h, ' ');
|
||||||
print_word(h, attr);
|
print_word(h, attr);
|
||||||
|
@ -597,114 +591,19 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
|
||||||
fmt++;
|
fmt++;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
print_encode(h, arg1, NULL, 1);
|
if (arg2 == NULL)
|
||||||
|
print_encode(h, arg1, NULL, 1);
|
||||||
|
else {
|
||||||
|
print_word(h, arg1);
|
||||||
|
print_byte(h, ':');
|
||||||
|
print_byte(h, ' ');
|
||||||
|
print_word(h, arg2);
|
||||||
|
print_byte(h, ';');
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
print_byte(h, '"');
|
print_byte(h, '"');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print out styles. */
|
|
||||||
|
|
||||||
while (*fmt != '\0') {
|
|
||||||
arg1 = NULL;
|
|
||||||
su = NULL;
|
|
||||||
|
|
||||||
/* First letter: input argument type. */
|
|
||||||
|
|
||||||
switch (*fmt++) {
|
|
||||||
case 'h':
|
|
||||||
i = va_arg(ap, int);
|
|
||||||
su = &mysu;
|
|
||||||
SCALE_HS_INIT(su, i);
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
arg1 = va_arg(ap, char *);
|
|
||||||
break;
|
|
||||||
case 'u':
|
|
||||||
su = va_arg(ap, struct roffsu *);
|
|
||||||
break;
|
|
||||||
case 'w':
|
|
||||||
if ((arg2 = va_arg(ap, char *)) != NULL) {
|
|
||||||
su = &mysu;
|
|
||||||
a2width(arg2, su);
|
|
||||||
}
|
|
||||||
if (*fmt == '*') {
|
|
||||||
if (su != NULL && su->unit == SCALE_EN &&
|
|
||||||
su->scale > 5.9 && su->scale < 6.1)
|
|
||||||
su = NULL;
|
|
||||||
fmt++;
|
|
||||||
}
|
|
||||||
if (*fmt == '+') {
|
|
||||||
if (su != NULL) {
|
|
||||||
/* Make even bold text fit. */
|
|
||||||
su->scale *= 1.2;
|
|
||||||
/* Add padding. */
|
|
||||||
su->scale += 3.0;
|
|
||||||
}
|
|
||||||
fmt++;
|
|
||||||
}
|
|
||||||
if (*fmt == '-') {
|
|
||||||
if (su != NULL)
|
|
||||||
su->scale *= -1.0;
|
|
||||||
fmt++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Second letter: style name. */
|
|
||||||
|
|
||||||
switch (*fmt++) {
|
|
||||||
case 'h':
|
|
||||||
attr = "height";
|
|
||||||
break;
|
|
||||||
case 'i':
|
|
||||||
attr = "text-indent";
|
|
||||||
break;
|
|
||||||
case 'l':
|
|
||||||
attr = "margin-left";
|
|
||||||
break;
|
|
||||||
case 'w':
|
|
||||||
attr = "width";
|
|
||||||
break;
|
|
||||||
case 'W':
|
|
||||||
attr = "min-width";
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
attr = arg1;
|
|
||||||
arg1 = va_arg(ap, char *);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
if (su == NULL && arg1 == NULL)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (have_style == 1)
|
|
||||||
print_word(h, " style=\"");
|
|
||||||
else
|
|
||||||
print_byte(h, ' ');
|
|
||||||
print_word(h, attr);
|
|
||||||
print_byte(h, ':');
|
|
||||||
print_byte(h, ' ');
|
|
||||||
if (su != NULL) {
|
|
||||||
v = su->scale;
|
|
||||||
if (su->unit == SCALE_MM && (v /= 100.0) == 0.0)
|
|
||||||
v = 1.0;
|
|
||||||
else if (su->unit == SCALE_BU)
|
|
||||||
v /= 24.0;
|
|
||||||
(void)snprintf(numbuf, sizeof(numbuf), "%.2f", v);
|
|
||||||
print_word(h, numbuf);
|
|
||||||
print_word(h, roffscales[su->unit]);
|
|
||||||
} else
|
|
||||||
print_word(h, arg1);
|
|
||||||
print_byte(h, ';');
|
|
||||||
have_style = 2;
|
|
||||||
}
|
|
||||||
if (have_style == 2)
|
|
||||||
print_byte(h, '"');
|
|
||||||
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
/* Accommodate for "well-formed" singleton escaping. */
|
/* Accommodate for "well-formed" singleton escaping. */
|
||||||
|
@ -768,6 +667,32 @@ print_gen_decls(struct html *h)
|
||||||
print_endline(h);
|
print_endline(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
print_gen_comment(struct html *h, struct roff_node *n)
|
||||||
|
{
|
||||||
|
int wantblank;
|
||||||
|
|
||||||
|
print_word(h, "<!-- This is an automatically generated file."
|
||||||
|
" Do not edit.");
|
||||||
|
h->indent = 1;
|
||||||
|
wantblank = 0;
|
||||||
|
while (n != NULL && n->type == ROFFT_COMMENT) {
|
||||||
|
if (strstr(n->string, "-->") == NULL &&
|
||||||
|
(wantblank || *n->string != '\0')) {
|
||||||
|
print_endline(h);
|
||||||
|
print_indent(h);
|
||||||
|
print_word(h, n->string);
|
||||||
|
wantblank = *n->string != '\0';
|
||||||
|
}
|
||||||
|
n = n->next;
|
||||||
|
}
|
||||||
|
if (wantblank)
|
||||||
|
print_endline(h);
|
||||||
|
print_word(h, " -->");
|
||||||
|
print_endline(h);
|
||||||
|
h->indent = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
print_text(struct html *h, const char *word)
|
print_text(struct html *h, const char *word)
|
||||||
{
|
{
|
||||||
|
@ -959,21 +884,3 @@ print_word(struct html *h, const char *cp)
|
||||||
while (*cp != '\0')
|
while (*cp != '\0')
|
||||||
print_byte(h, *cp++);
|
print_byte(h, *cp++);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Calculate the scaling unit passed in a `-width' argument. This uses
|
|
||||||
* either a native scaling unit (e.g., 1i, 2m) or the string length of
|
|
||||||
* the value.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
a2width(const char *p, struct roffsu *su)
|
|
||||||
{
|
|
||||||
const char *end;
|
|
||||||
|
|
||||||
end = a2roffsu(p, su, SCALE_MAX);
|
|
||||||
if (end == NULL || *end != '\0') {
|
|
||||||
su->unit = SCALE_EN;
|
|
||||||
su->scale = html_strlen(p);
|
|
||||||
} else if (su->scale < 0.0)
|
|
||||||
su->scale = 0.0;
|
|
||||||
}
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* $Id: html.h,v 1.87 2017/07/08 14:51:04 schwarze Exp $ */
|
/* $Id: html.h,v 1.92 2018/06/25 16:54:59 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -23,6 +23,7 @@ enum htmltag {
|
||||||
TAG_META,
|
TAG_META,
|
||||||
TAG_TITLE,
|
TAG_TITLE,
|
||||||
TAG_DIV,
|
TAG_DIV,
|
||||||
|
TAG_IDIV,
|
||||||
TAG_H1,
|
TAG_H1,
|
||||||
TAG_H2,
|
TAG_H2,
|
||||||
TAG_SPAN,
|
TAG_SPAN,
|
||||||
|
@ -30,8 +31,6 @@ enum htmltag {
|
||||||
TAG_BR,
|
TAG_BR,
|
||||||
TAG_A,
|
TAG_A,
|
||||||
TAG_TABLE,
|
TAG_TABLE,
|
||||||
TAG_COLGROUP,
|
|
||||||
TAG_COL,
|
|
||||||
TAG_TR,
|
TAG_TR,
|
||||||
TAG_TD,
|
TAG_TD,
|
||||||
TAG_LI,
|
TAG_LI,
|
||||||
|
@ -119,6 +118,7 @@ struct eqn_box;
|
||||||
|
|
||||||
void roff_html_pre(struct html *, const struct roff_node *);
|
void roff_html_pre(struct html *, const struct roff_node *);
|
||||||
|
|
||||||
|
void print_gen_comment(struct html *, struct roff_node *);
|
||||||
void print_gen_decls(struct html *);
|
void print_gen_decls(struct html *);
|
||||||
void print_gen_head(struct html *);
|
void print_gen_head(struct html *);
|
||||||
struct tag *print_otag(struct html *, enum htmltag, const char *, ...);
|
struct tag *print_otag(struct html *, enum htmltag, const char *, ...);
|
||||||
|
@ -131,5 +131,4 @@ void print_eqn(struct html *, const struct eqn_box *);
|
||||||
void print_paragraph(struct html *);
|
void print_paragraph(struct html *);
|
||||||
void print_endline(struct html *);
|
void print_endline(struct html *);
|
||||||
|
|
||||||
char *html_make_id(const struct roff_node *);
|
char *html_make_id(const struct roff_node *, int);
|
||||||
int html_strlen(const char *);
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: lib.in,v 1.19 2016/11/23 20:22:13 schwarze Exp $ */
|
/* $Id: lib.in,v 1.20 2017/08/20 02:30:27 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2009, 2012 Joerg Sonnenberger <joerg@netbsd.org>
|
* Copyright (c) 2009, 2012 Joerg Sonnenberger <joerg@netbsd.org>
|
||||||
|
@ -25,11 +25,13 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
LINE("lib80211", "802.11 Wireless Network Management Library (lib80211, \\-l80211)")
|
LINE("lib80211", "802.11 Wireless Network Management Library (lib80211, \\-l80211)")
|
||||||
|
LINE("libalias", "Packet Aliasing Library (libalias, \\-lalias)")
|
||||||
LINE("libarchive", "Streaming Archive Library (libarchive, \\-larchive)")
|
LINE("libarchive", "Streaming Archive Library (libarchive, \\-larchive)")
|
||||||
LINE("libarm", "ARM Architecture Library (libarm, \\-larm)")
|
LINE("libarm", "ARM Architecture Library (libarm, \\-larm)")
|
||||||
LINE("libarm32", "ARM32 Architecture Library (libarm32, \\-larm32)")
|
LINE("libarm32", "ARM32 Architecture Library (libarm32, \\-larm32)")
|
||||||
LINE("libbe", "Boot Environment Library (libbe, \\-lbe)")
|
LINE("libbe", "Boot Environment Library (libbe, \\-lbe)")
|
||||||
LINE("libbluetooth", "Bluetooth Library (libbluetooth, \\-lbluetooth)")
|
LINE("libbluetooth", "Bluetooth Library (libbluetooth, \\-lbluetooth)")
|
||||||
|
LINE("libbsdxml", "eXpat XML parser library (libbsdxml, \\-lbsdxml)")
|
||||||
LINE("libbsm", "Basic Security Module Library (libbsm, \\-lbsm)")
|
LINE("libbsm", "Basic Security Module Library (libbsm, \\-lbsm)")
|
||||||
LINE("libc", "Standard C\\~Library (libc, \\-lc)")
|
LINE("libc", "Standard C\\~Library (libc, \\-lc)")
|
||||||
LINE("libc_r", "Reentrant C\\~Library (libc_r, \\-lc_r)")
|
LINE("libc_r", "Reentrant C\\~Library (libc_r, \\-lc_r)")
|
||||||
|
@ -115,6 +117,7 @@ LINE("libsbuf", "Safe String Composition Library (libsbuf, \\-lsbuf)")
|
||||||
LINE("libsdp", "Bluetooth Service Discovery Protocol User Library (libsdp, \\-lsdp)")
|
LINE("libsdp", "Bluetooth Service Discovery Protocol User Library (libsdp, \\-lsdp)")
|
||||||
LINE("libssp", "Buffer Overflow Protection Library (libssp, \\-lssp)")
|
LINE("libssp", "Buffer Overflow Protection Library (libssp, \\-lssp)")
|
||||||
LINE("libstdthreads", "C11 Threads Library (libstdthreads, \\-lstdthreads)")
|
LINE("libstdthreads", "C11 Threads Library (libstdthreads, \\-lstdthreads)")
|
||||||
|
LINE("libstdthreads", "C11 Threads Library (libstdthreads, \\-lstdthreads)")
|
||||||
LINE("libSystem", "System Library (libSystem, \\-lSystem)")
|
LINE("libSystem", "System Library (libSystem, \\-lSystem)")
|
||||||
LINE("libsysdecode", "System Argument Decoding Library (libsysdecode, \\-lsysdecode)")
|
LINE("libsysdecode", "System Argument Decoding Library (libsysdecode, \\-lsysdecode)")
|
||||||
LINE("libtacplus", "TACACS+ Client Library (libtacplus, \\-ltacplus)")
|
LINE("libtacplus", "TACACS+ Client Library (libtacplus, \\-ltacplus)")
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: libmandoc.h,v 1.70 2017/07/08 17:52:49 schwarze Exp $ */
|
/* $Id: libmandoc.h,v 1.71 2018/04/09 22:27:04 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
@ -66,7 +66,7 @@ void roff_man_reset(struct roff_man *);
|
||||||
enum rofferr roff_parseln(struct roff *, int, struct buf *, int *);
|
enum rofferr roff_parseln(struct roff *, int, struct buf *, int *);
|
||||||
void roff_endparse(struct roff *);
|
void roff_endparse(struct roff *);
|
||||||
void roff_setreg(struct roff *, const char *, int, char sign);
|
void roff_setreg(struct roff *, const char *, int, char sign);
|
||||||
int roff_getreg(const struct roff *, const char *);
|
int roff_getreg(struct roff *, const char *);
|
||||||
char *roff_strdup(const struct roff *, const char *);
|
char *roff_strdup(const struct roff *, const char *);
|
||||||
int roff_getcontrol(const struct roff *,
|
int roff_getcontrol(const struct roff *,
|
||||||
const char *, int *);
|
const char *, int *);
|
|
@ -1,7 +1,7 @@
|
||||||
/* $Id: main.c,v 1.301 2017/07/26 10:21:55 schwarze Exp $ */
|
/* $Id: main.c,v 1.306 2018/05/14 14:10:23 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010-2012, 2014-2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
* Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
|
* Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
@ -19,6 +19,7 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
#include <sys/param.h> /* MACHINE */
|
#include <sys/param.h> /* MACHINE */
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
@ -38,6 +39,7 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <termios.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
@ -120,6 +122,7 @@ main(int argc, char *argv[])
|
||||||
struct manconf conf;
|
struct manconf conf;
|
||||||
struct mansearch search;
|
struct mansearch search;
|
||||||
struct curparse curp;
|
struct curparse curp;
|
||||||
|
struct winsize ws;
|
||||||
struct tag_files *tag_files;
|
struct tag_files *tag_files;
|
||||||
struct manpage *res, *resp;
|
struct manpage *res, *resp;
|
||||||
const char *progname, *sec, *thisarg;
|
const char *progname, *sec, *thisarg;
|
||||||
|
@ -129,7 +132,7 @@ main(int argc, char *argv[])
|
||||||
size_t i, sz;
|
size_t i, sz;
|
||||||
int prio, best_prio;
|
int prio, best_prio;
|
||||||
enum outmode outmode;
|
enum outmode outmode;
|
||||||
int fd;
|
int fd, startdir;
|
||||||
int show_usage;
|
int show_usage;
|
||||||
int options;
|
int options;
|
||||||
int use_pager;
|
int use_pager;
|
||||||
|
@ -316,6 +319,16 @@ main(int argc, char *argv[])
|
||||||
!isatty(STDOUT_FILENO))
|
!isatty(STDOUT_FILENO))
|
||||||
use_pager = 0;
|
use_pager = 0;
|
||||||
|
|
||||||
|
if (use_pager &&
|
||||||
|
(conf.output.width == 0 || conf.output.indent == 0) &&
|
||||||
|
ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) != -1 &&
|
||||||
|
ws.ws_col > 1) {
|
||||||
|
if (conf.output.width == 0 && ws.ws_col < 79)
|
||||||
|
conf.output.width = ws.ws_col - 1;
|
||||||
|
if (conf.output.indent == 0 && ws.ws_col < 66)
|
||||||
|
conf.output.indent = 3;
|
||||||
|
}
|
||||||
|
|
||||||
#if HAVE_PLEDGE
|
#if HAVE_PLEDGE
|
||||||
if (!use_pager)
|
if (!use_pager)
|
||||||
if (pledge("stdio rpath", NULL) == -1)
|
if (pledge("stdio rpath", NULL) == -1)
|
||||||
|
@ -374,15 +387,34 @@ main(int argc, char *argv[])
|
||||||
argc, argv, &res, &sz))
|
argc, argv, &res, &sz))
|
||||||
usage(search.argmode);
|
usage(search.argmode);
|
||||||
|
|
||||||
if (sz == 0) {
|
if (sz == 0 && search.argmode == ARG_NAME)
|
||||||
if (search.argmode == ARG_NAME)
|
fs_search(&search, &conf.manpath,
|
||||||
fs_search(&search, &conf.manpath,
|
argc, argv, &res, &sz);
|
||||||
argc, argv, &res, &sz);
|
|
||||||
else
|
if (search.argmode == ARG_NAME) {
|
||||||
warnx("nothing appropriate");
|
for (c = 0; c < argc; c++) {
|
||||||
|
if (strchr(argv[c], '/') == NULL)
|
||||||
|
continue;
|
||||||
|
if (access(argv[c], R_OK) == -1) {
|
||||||
|
warn("%s", argv[c]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
res = mandoc_reallocarray(res,
|
||||||
|
sz + 1, sizeof(*res));
|
||||||
|
res[sz].file = mandoc_strdup(argv[c]);
|
||||||
|
res[sz].names = NULL;
|
||||||
|
res[sz].output = NULL;
|
||||||
|
res[sz].ipath = SIZE_MAX;
|
||||||
|
res[sz].bits = 0;
|
||||||
|
res[sz].sec = 10;
|
||||||
|
res[sz].form = FORM_SRC;
|
||||||
|
sz++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sz == 0) {
|
if (sz == 0) {
|
||||||
|
if (search.argmode != ARG_NAME)
|
||||||
|
warnx("nothing appropriate");
|
||||||
rc = MANDOCLEVEL_BADARG;
|
rc = MANDOCLEVEL_BADARG;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -466,7 +498,29 @@ main(int argc, char *argv[])
|
||||||
parse(&curp, STDIN_FILENO, "<stdin>");
|
parse(&curp, STDIN_FILENO, "<stdin>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remember the original working directory, if possible.
|
||||||
|
* This will be needed if some names on the command line
|
||||||
|
* are page names and some are relative file names.
|
||||||
|
* Do not error out if the current directory is not
|
||||||
|
* readable: Maybe it won't be needed after all.
|
||||||
|
*/
|
||||||
|
startdir = open(".", O_RDONLY | O_DIRECTORY);
|
||||||
|
|
||||||
while (argc > 0) {
|
while (argc > 0) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Changing directories is not needed in ARG_FILE mode.
|
||||||
|
* Do it on a best-effort basis. Even in case of
|
||||||
|
* failure, some functionality may still work.
|
||||||
|
*/
|
||||||
|
if (resp != NULL) {
|
||||||
|
if (resp->ipath != SIZE_MAX)
|
||||||
|
(void)chdir(conf.manpath.paths[resp->ipath]);
|
||||||
|
else if (startdir != -1)
|
||||||
|
(void)fchdir(startdir);
|
||||||
|
}
|
||||||
|
|
||||||
fd = mparse_open(curp.mp, resp != NULL ? resp->file : *argv);
|
fd = mparse_open(curp.mp, resp != NULL ? resp->file : *argv);
|
||||||
if (fd != -1) {
|
if (fd != -1) {
|
||||||
if (use_pager) {
|
if (use_pager) {
|
||||||
|
@ -476,14 +530,23 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
if (resp == NULL)
|
if (resp == NULL)
|
||||||
parse(&curp, fd, *argv);
|
parse(&curp, fd, *argv);
|
||||||
else if (resp->form == FORM_SRC) {
|
else if (resp->form == FORM_SRC)
|
||||||
/* For .so only; ignore failure. */
|
|
||||||
(void)chdir(conf.manpath.paths[resp->ipath]);
|
|
||||||
parse(&curp, fd, resp->file);
|
parse(&curp, fd, resp->file);
|
||||||
} else
|
else
|
||||||
passthrough(resp->file, fd,
|
passthrough(resp->file, fd,
|
||||||
conf.output.synopsisonly);
|
conf.output.synopsisonly);
|
||||||
|
|
||||||
|
if (ferror(stdout)) {
|
||||||
|
if (tag_files != NULL) {
|
||||||
|
warn("%s", tag_files->ofn);
|
||||||
|
tag_unlink();
|
||||||
|
tag_files = NULL;
|
||||||
|
} else
|
||||||
|
warn("stdout");
|
||||||
|
rc = MANDOCLEVEL_SYSERR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (argc > 1 && curp.outtype <= OUTT_UTF8) {
|
if (argc > 1 && curp.outtype <= OUTT_UTF8) {
|
||||||
if (curp.outdata == NULL)
|
if (curp.outdata == NULL)
|
||||||
outdata_alloc(&curp);
|
outdata_alloc(&curp);
|
||||||
|
@ -502,6 +565,10 @@ main(int argc, char *argv[])
|
||||||
if (--argc)
|
if (--argc)
|
||||||
mparse_reset(curp.mp);
|
mparse_reset(curp.mp);
|
||||||
}
|
}
|
||||||
|
if (startdir != -1) {
|
||||||
|
(void)fchdir(startdir);
|
||||||
|
close(startdir);
|
||||||
|
}
|
||||||
|
|
||||||
if (curp.outdata != NULL) {
|
if (curp.outdata != NULL) {
|
||||||
switch (curp.outtype) {
|
switch (curp.outtype) {
|
||||||
|
@ -722,7 +789,8 @@ fs_search(const struct mansearch *cfg, const struct manpaths *paths,
|
||||||
cfg->firstmatch)
|
cfg->firstmatch)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (res != NULL && *ressz == lastsz)
|
if (res != NULL && *ressz == lastsz &&
|
||||||
|
strchr(*argv, '/') == NULL)
|
||||||
warnx("No entry for %s in the manual.", *argv);
|
warnx("No entry for %s in the manual.", *argv);
|
||||||
lastsz = *ressz;
|
lastsz = *ressz;
|
||||||
argv++;
|
argv++;
|
||||||
|
@ -1173,7 +1241,7 @@ spawn_pager(struct tag_files *tag_files)
|
||||||
if (dup2(tag_files->ofd, STDOUT_FILENO) == -1)
|
if (dup2(tag_files->ofd, STDOUT_FILENO) == -1)
|
||||||
err((int)MANDOCLEVEL_SYSERR, "pager stdout");
|
err((int)MANDOCLEVEL_SYSERR, "pager stdout");
|
||||||
close(tag_files->ofd);
|
close(tag_files->ofd);
|
||||||
close(tag_files->tfd);
|
assert(tag_files->tfd == -1);
|
||||||
|
|
||||||
/* Do not start the pager before controlling the terminal. */
|
/* Do not start the pager before controlling the terminal. */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $Id: man.1,v 1.29 2017/05/17 23:23:00 schwarze Exp $
|
.\" $Id: man.1,v 1.33 2018/04/19 23:41:16 schwarze Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 1989, 1990, 1993
|
.\" Copyright (c) 1989, 1990, 1993
|
||||||
.\" The Regents of the University of California. All rights reserved.
|
.\" The Regents of the University of California. All rights reserved.
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
.\"
|
.\"
|
||||||
.\" @(#)man.1 8.2 (Berkeley) 1/2/94
|
.\" @(#)man.1 8.2 (Berkeley) 1/2/94
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: August 8 2018 $
|
.Dd $Mdocdate: April 19 2018 $
|
||||||
.Dt MAN 1
|
.Dt MAN 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -75,9 +75,21 @@ See
|
||||||
for a description of the contents of this file.
|
for a description of the contents of this file.
|
||||||
.It Fl c
|
.It Fl c
|
||||||
Copy the manual page to the standard output instead of using
|
Copy the manual page to the standard output instead of using
|
||||||
.Xr less 1
|
.Xr more 1
|
||||||
to paginate it.
|
to paginate it.
|
||||||
This is done by default if the standard output is not a terminal device.
|
This is done by default if the standard output is not a terminal device.
|
||||||
|
.Pp
|
||||||
|
When using
|
||||||
|
.Fl c ,
|
||||||
|
most terminal devices are unable to show the markup.
|
||||||
|
To print the output of
|
||||||
|
.Nm
|
||||||
|
to the terminal with markup but without using a pager, pipe it to
|
||||||
|
.Xr ul 1 .
|
||||||
|
To remove the markup, pipe the output to
|
||||||
|
.Xr col 1
|
||||||
|
.Fl b
|
||||||
|
instead.
|
||||||
.It Fl f
|
.It Fl f
|
||||||
A synonym for
|
A synonym for
|
||||||
.Xr whatis 1 .
|
.Xr whatis 1 .
|
||||||
|
@ -102,8 +114,7 @@ manual.
|
||||||
By default, it displays the header lines of all matching pages.
|
By default, it displays the header lines of all matching pages.
|
||||||
.It Fl l
|
.It Fl l
|
||||||
A synonym for
|
A synonym for
|
||||||
.Xr mandoc 1
|
.Xr mandoc 1 .
|
||||||
.Fl a .
|
|
||||||
The
|
The
|
||||||
.Ar name
|
.Ar name
|
||||||
arguments are interpreted as filenames.
|
arguments are interpreted as filenames.
|
||||||
|
@ -115,6 +126,8 @@ No search is done and
|
||||||
and
|
and
|
||||||
.Fl w
|
.Fl w
|
||||||
are ignored.
|
are ignored.
|
||||||
|
This option implies
|
||||||
|
.Fl a .
|
||||||
.It Fl M Ar path
|
.It Fl M Ar path
|
||||||
Override the list of standard directories which
|
Override the list of standard directories which
|
||||||
.Nm
|
.Nm
|
||||||
|
@ -233,7 +246,7 @@ is case insensitive.
|
||||||
Any non-empty value of the environment variable
|
Any non-empty value of the environment variable
|
||||||
.Ev MANPAGER
|
.Ev MANPAGER
|
||||||
is used instead of the standard pagination program,
|
is used instead of the standard pagination program,
|
||||||
.Xr less 1 .
|
.Xr more 1 .
|
||||||
If
|
If
|
||||||
.Xr less 1
|
.Xr less 1
|
||||||
is used, the interactive
|
is used, the interactive
|
||||||
|
@ -282,14 +295,9 @@ Specifies the pagination program to use when
|
||||||
.Ev MANPAGER
|
.Ev MANPAGER
|
||||||
is not defined.
|
is not defined.
|
||||||
If neither PAGER nor MANPAGER is defined,
|
If neither PAGER nor MANPAGER is defined,
|
||||||
.Xr less 1
|
.Xr more 1
|
||||||
.Fl s
|
.Fl s
|
||||||
is used.
|
is used.
|
||||||
Only used if
|
|
||||||
.Fl a
|
|
||||||
or
|
|
||||||
.Fl l
|
|
||||||
is specified.
|
|
||||||
.El
|
.El
|
||||||
.Sh FILES
|
.Sh FILES
|
||||||
.Bl -tag -width /etc/man.conf -compact
|
.Bl -tag -width /etc/man.conf -compact
|
||||||
|
@ -301,20 +309,24 @@ default man configuration file
|
||||||
See
|
See
|
||||||
.Xr mandoc 1
|
.Xr mandoc 1
|
||||||
for details.
|
for details.
|
||||||
|
.Sh EXAMPLES
|
||||||
|
Format a page for pasting extracts into an email message \(em
|
||||||
|
avoid printing any UTF-8 characters, reduce the width to ease
|
||||||
|
quoting in replies, and remove markup:
|
||||||
|
.Pp
|
||||||
|
.Dl $ man -T ascii -O width=65 pledge | col -b
|
||||||
|
.Pp
|
||||||
|
Read a typeset page in a PDF viewer:
|
||||||
|
.Pp
|
||||||
|
.Dl $ MANPAGER=mupdf man -T pdf lpd
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr apropos 1 ,
|
.Xr apropos 1 ,
|
||||||
.Xr intro 1 ,
|
.Xr col 1 ,
|
||||||
|
.Xr mandoc 1 ,
|
||||||
|
.Xr ul 1 ,
|
||||||
.Xr whereis 1 ,
|
.Xr whereis 1 ,
|
||||||
.Xr intro 2 ,
|
|
||||||
.Xr intro 3 ,
|
|
||||||
.Xr intro 4 ,
|
|
||||||
.Xr intro 5 ,
|
|
||||||
.Xr man.conf 5 ,
|
.Xr man.conf 5 ,
|
||||||
.Xr intro 6 ,
|
.Xr mdoc 7
|
||||||
.Xr intro 7 ,
|
|
||||||
.Xr mdoc 7 ,
|
|
||||||
.Xr intro 8 ,
|
|
||||||
.Xr intro 9
|
|
||||||
.Sh STANDARDS
|
.Sh STANDARDS
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $Id: man.7,v 1.136 2017/06/25 11:42:02 schwarze Exp $
|
.\" $Id: man.7,v 1.137 2018/04/05 22:12:33 schwarze Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
.\" Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
.\" Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
|
.\" Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: June 25 2017 $
|
.Dd $Mdocdate: April 5 2018 $
|
||||||
.Dt MAN 7
|
.Dt MAN 7
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -273,7 +273,6 @@ in the alphabetical reference below.
|
||||||
.Bl -column "PP, LP, P" description
|
.Bl -column "PP, LP, P" description
|
||||||
.It Sx B Ta boldface font
|
.It Sx B Ta boldface font
|
||||||
.It Sx I Ta italic font
|
.It Sx I Ta italic font
|
||||||
.It Sx R Ta roman (default) font
|
|
||||||
.It Sx SB Ta small boldface font
|
.It Sx SB Ta small boldface font
|
||||||
.It Sx SM Ta small roman font
|
.It Sx SM Ta small roman font
|
||||||
.It Sx BI Ta alternate between boldface and italic fonts
|
.It Sx BI Ta alternate between boldface and italic fonts
|
||||||
|
@ -297,9 +296,7 @@ The optional arguments specify which release it is from.
|
||||||
Text is rendered in bold face.
|
Text is rendered in bold face.
|
||||||
.Pp
|
.Pp
|
||||||
See also
|
See also
|
||||||
.Sx \&I
|
.Sx \&I .
|
||||||
and
|
|
||||||
.Sx \&R .
|
|
||||||
.Ss \&BI
|
.Ss \&BI
|
||||||
Text is rendered alternately in bold face and italic.
|
Text is rendered alternately in bold face and italic.
|
||||||
Thus,
|
Thus,
|
||||||
|
@ -393,9 +390,7 @@ and
|
||||||
Text is rendered in italics.
|
Text is rendered in italics.
|
||||||
.Pp
|
.Pp
|
||||||
See also
|
See also
|
||||||
.Sx \&B
|
.Sx \&B .
|
||||||
and
|
|
||||||
.Sx \&R .
|
|
||||||
.Ss \&IB
|
.Ss \&IB
|
||||||
Text is rendered alternately in italics and bold face.
|
Text is rendered alternately in italics and bold face.
|
||||||
Whitespace between arguments is omitted in output.
|
Whitespace between arguments is omitted in output.
|
||||||
|
@ -546,13 +541,6 @@ See also
|
||||||
.Sx \&P ,
|
.Sx \&P ,
|
||||||
and
|
and
|
||||||
.Sx \&TP .
|
.Sx \&TP .
|
||||||
.Ss \&R
|
|
||||||
Text is rendered in roman (the default font).
|
|
||||||
.Pp
|
|
||||||
See also
|
|
||||||
.Sx \&I
|
|
||||||
and
|
|
||||||
.Sx \&B .
|
|
||||||
.Ss \&RB
|
.Ss \&RB
|
||||||
Text is rendered alternately in roman (the default font) and bold face.
|
Text is rendered alternately in roman (the default font) and bold face.
|
||||||
Whitespace between arguments is omitted in output.
|
Whitespace between arguments is omitted in output.
|
||||||
|
@ -790,7 +778,6 @@ The syntax is as follows:
|
||||||
.It Sx \&IR Ta n Ta current Ta \&
|
.It Sx \&IR Ta n Ta current Ta \&
|
||||||
.It Sx \&OP Ta 0, 1 Ta current Ta compat
|
.It Sx \&OP Ta 0, 1 Ta current Ta compat
|
||||||
.It Sx \&PD Ta 1 Ta current Ta \&
|
.It Sx \&PD Ta 1 Ta current Ta \&
|
||||||
.It Sx \&R Ta n Ta next-line Ta \&
|
|
||||||
.It Sx \&RB Ta n Ta current Ta \&
|
.It Sx \&RB Ta n Ta current Ta \&
|
||||||
.It Sx \&RI Ta n Ta current Ta \&
|
.It Sx \&RI Ta n Ta current Ta \&
|
||||||
.It Sx \&SB Ta n Ta next-line Ta \&
|
.It Sx \&SB Ta n Ta next-line Ta \&
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $Id: man.cgi.8,v 1.22 2017/03/18 16:48:24 schwarze Exp $
|
.\" $Id: man.cgi.8,v 1.23 2018/05/20 21:48:44 schwarze Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
|
.\" Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
.\"
|
.\"
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: March 18 2017 $
|
.Dd $Mdocdate: May 20 2018 $
|
||||||
.Dt MAN.CGI 8
|
.Dt MAN.CGI 8
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -104,6 +104,9 @@ Lists are returned when searches match more than one manual page.
|
||||||
The first column shows the names and section numbers of manuals
|
The first column shows the names and section numbers of manuals
|
||||||
as clickable links.
|
as clickable links.
|
||||||
The second column shows the one-line descriptions of the manuals.
|
The second column shows the one-line descriptions of the manuals.
|
||||||
|
For
|
||||||
|
.Xr man 1
|
||||||
|
style searches, the content of the first manual page follows the list.
|
||||||
.It A manual page.
|
.It A manual page.
|
||||||
This output format is used when a search matches exactly one
|
This output format is used when a search matches exactly one
|
||||||
manual page, or when a link on a list page or an
|
manual page, or when a link on a list page or an
|
||||||
|
@ -111,7 +114,7 @@ manual page, or when a link on a list page or an
|
||||||
link on another manual page is followed.
|
link on another manual page is followed.
|
||||||
.It A no-result page.
|
.It A no-result page.
|
||||||
This is shown when a search request returns no results -
|
This is shown when a search request returns no results -
|
||||||
eiher because it violates the query syntax, or because
|
either because it violates the query syntax, or because
|
||||||
the search does not match any manual pages.
|
the search does not match any manual pages.
|
||||||
.It \&An error page.
|
.It \&An error page.
|
||||||
This cannot happen by merely clicking the
|
This cannot happen by merely clicking the
|
||||||
|
@ -234,6 +237,8 @@ They consist of:
|
||||||
.It
|
.It
|
||||||
The
|
The
|
||||||
.Cm http://
|
.Cm http://
|
||||||
|
or
|
||||||
|
.Cm https://
|
||||||
protocol specifier.
|
protocol specifier.
|
||||||
.It
|
.It
|
||||||
The host name.
|
The host name.
|
||||||
|
@ -394,7 +399,7 @@ The
|
||||||
CGI program is call-compatible with queries from the traditional
|
CGI program is call-compatible with queries from the traditional
|
||||||
.Pa man.cgi
|
.Pa man.cgi
|
||||||
script by Wolfram Schneider.
|
script by Wolfram Schneider.
|
||||||
However, the output may not be quite the same.
|
However, the output looks quite different.
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr apropos 1 ,
|
.Xr apropos 1 ,
|
||||||
.Xr mandoc.db 5 ,
|
.Xr mandoc.db 5 ,
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $Id: man.conf.5,v 1.4 2016/12/28 22:52:17 schwarze Exp $
|
.\" $Id: man.conf.5,v 1.5 2017/08/22 18:17:52 schwarze Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
|
.\" Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
.\"
|
.\"
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: December 28 2016 $
|
.Dd $Mdocdate: August 22 2017 $
|
||||||
.Dt MAN.CONF 5
|
.Dt MAN.CONF 5
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -74,8 +74,12 @@ in each directory configured with
|
||||||
.Ic manpath
|
.Ic manpath
|
||||||
is recommended and necessary for
|
is recommended and necessary for
|
||||||
.Xr apropos 1
|
.Xr apropos 1
|
||||||
to work, but not strictly required for
|
to work, and also for
|
||||||
.Xr man 1 .
|
.Xr man 1
|
||||||
|
on operating systems like
|
||||||
|
.Ox
|
||||||
|
that install each manual page with only one file name in the file system,
|
||||||
|
even if it documents multiple utilities or functions.
|
||||||
.It Ic output Ar option Op Ar value
|
.It Ic output Ar option Op Ar value
|
||||||
Configure the default value of an output option.
|
Configure the default value of an output option.
|
||||||
These directives are overridden by the
|
These directives are overridden by the
|
|
@ -1,7 +1,7 @@
|
||||||
/* $Id: man_html.c,v 1.145 2017/06/25 11:42:02 schwarze Exp $ */
|
/* $Id: man_html.c,v 1.153 2018/07/27 17:49:31 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -35,8 +35,6 @@
|
||||||
|
|
||||||
/* FIXME: have PD set the default vspace width. */
|
/* FIXME: have PD set the default vspace width. */
|
||||||
|
|
||||||
#define INDENT 5
|
|
||||||
|
|
||||||
#define MAN_ARGS const struct roff_meta *man, \
|
#define MAN_ARGS const struct roff_meta *man, \
|
||||||
const struct roff_node *n, \
|
const struct roff_node *n, \
|
||||||
struct html *h
|
struct html *h
|
||||||
|
@ -48,12 +46,11 @@ struct htmlman {
|
||||||
|
|
||||||
static void print_bvspace(struct html *,
|
static void print_bvspace(struct html *,
|
||||||
const struct roff_node *);
|
const struct roff_node *);
|
||||||
static void print_man_head(MAN_ARGS);
|
static void print_man_head(const struct roff_meta *,
|
||||||
|
struct html *);
|
||||||
static void print_man_nodelist(MAN_ARGS);
|
static void print_man_nodelist(MAN_ARGS);
|
||||||
static void print_man_node(MAN_ARGS);
|
static void print_man_node(MAN_ARGS);
|
||||||
static int fillmode(struct html *, int);
|
static int fillmode(struct html *, int);
|
||||||
static int a2width(const struct roff_node *,
|
|
||||||
struct roffsu *);
|
|
||||||
static int man_B_pre(MAN_ARGS);
|
static int man_B_pre(MAN_ARGS);
|
||||||
static int man_HP_pre(MAN_ARGS);
|
static int man_HP_pre(MAN_ARGS);
|
||||||
static int man_IP_pre(MAN_ARGS);
|
static int man_IP_pre(MAN_ARGS);
|
||||||
|
@ -68,8 +65,10 @@ static int man_UR_pre(MAN_ARGS);
|
||||||
static int man_alt_pre(MAN_ARGS);
|
static int man_alt_pre(MAN_ARGS);
|
||||||
static int man_ign_pre(MAN_ARGS);
|
static int man_ign_pre(MAN_ARGS);
|
||||||
static int man_in_pre(MAN_ARGS);
|
static int man_in_pre(MAN_ARGS);
|
||||||
static void man_root_post(MAN_ARGS);
|
static void man_root_post(const struct roff_meta *,
|
||||||
static void man_root_pre(MAN_ARGS);
|
struct html *);
|
||||||
|
static void man_root_pre(const struct roff_meta *,
|
||||||
|
struct html *);
|
||||||
|
|
||||||
static const struct htmlman __mans[MAN_MAX - MAN_TH] = {
|
static const struct htmlman __mans[MAN_MAX - MAN_TH] = {
|
||||||
{ NULL, NULL }, /* TH */
|
{ NULL, NULL }, /* TH */
|
||||||
|
@ -138,30 +137,34 @@ print_bvspace(struct html *h, const struct roff_node *n)
|
||||||
void
|
void
|
||||||
html_man(void *arg, const struct roff_man *man)
|
html_man(void *arg, const struct roff_man *man)
|
||||||
{
|
{
|
||||||
struct html *h;
|
struct html *h;
|
||||||
struct tag *t;
|
struct roff_node *n;
|
||||||
|
struct tag *t;
|
||||||
|
|
||||||
h = (struct html *)arg;
|
h = (struct html *)arg;
|
||||||
|
n = man->first->child;
|
||||||
|
|
||||||
if ((h->oflags & HTML_FRAGMENT) == 0) {
|
if ((h->oflags & HTML_FRAGMENT) == 0) {
|
||||||
print_gen_decls(h);
|
print_gen_decls(h);
|
||||||
print_otag(h, TAG_HTML, "");
|
print_otag(h, TAG_HTML, "");
|
||||||
|
if (n->type == ROFFT_COMMENT)
|
||||||
|
print_gen_comment(h, n);
|
||||||
t = print_otag(h, TAG_HEAD, "");
|
t = print_otag(h, TAG_HEAD, "");
|
||||||
print_man_head(&man->meta, man->first, h);
|
print_man_head(&man->meta, h);
|
||||||
print_tagq(h, t);
|
print_tagq(h, t);
|
||||||
print_otag(h, TAG_BODY, "");
|
print_otag(h, TAG_BODY, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
man_root_pre(&man->meta, man->first, h);
|
man_root_pre(&man->meta, h);
|
||||||
t = print_otag(h, TAG_DIV, "c", "manual-text");
|
t = print_otag(h, TAG_DIV, "c", "manual-text");
|
||||||
print_man_nodelist(&man->meta, man->first->child, h);
|
print_man_nodelist(&man->meta, n, h);
|
||||||
print_tagq(h, t);
|
print_tagq(h, t);
|
||||||
man_root_post(&man->meta, man->first, h);
|
man_root_post(&man->meta, h);
|
||||||
print_tagq(h, NULL);
|
print_tagq(h, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_man_head(MAN_ARGS)
|
print_man_head(const struct roff_meta *man, struct html *h)
|
||||||
{
|
{
|
||||||
char *cp;
|
char *cp;
|
||||||
|
|
||||||
|
@ -262,6 +265,8 @@ print_man_node(MAN_ARGS)
|
||||||
break;
|
break;
|
||||||
print_paragraph(h);
|
print_paragraph(h);
|
||||||
return;
|
return;
|
||||||
|
case ROFFT_COMMENT:
|
||||||
|
return;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -359,16 +364,8 @@ fillmode(struct html *h, int want)
|
||||||
return had;
|
return had;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
a2width(const struct roff_node *n, struct roffsu *su)
|
|
||||||
{
|
|
||||||
if (n->type != ROFFT_TEXT)
|
|
||||||
return 0;
|
|
||||||
return a2roffsu(n->string, su, SCALE_EN) != NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
man_root_pre(MAN_ARGS)
|
man_root_pre(const struct roff_meta *man, struct html *h)
|
||||||
{
|
{
|
||||||
struct tag *t, *tt;
|
struct tag *t, *tt;
|
||||||
char *title;
|
char *title;
|
||||||
|
@ -396,7 +393,7 @@ man_root_pre(MAN_ARGS)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
man_root_post(MAN_ARGS)
|
man_root_post(const struct roff_meta *man, struct html *h)
|
||||||
{
|
{
|
||||||
struct tag *t, *tt;
|
struct tag *t, *tt;
|
||||||
|
|
||||||
|
@ -419,11 +416,10 @@ man_SH_pre(MAN_ARGS)
|
||||||
char *id;
|
char *id;
|
||||||
|
|
||||||
if (n->type == ROFFT_HEAD) {
|
if (n->type == ROFFT_HEAD) {
|
||||||
id = html_make_id(n);
|
id = html_make_id(n, 1);
|
||||||
print_otag(h, TAG_H1, "cTi", "Sh", id);
|
print_otag(h, TAG_H1, "cTi", "Sh", id);
|
||||||
if (id != NULL)
|
if (id != NULL)
|
||||||
print_otag(h, TAG_A, "chR", "selflink", id);
|
print_otag(h, TAG_A, "chR", "permalink", id);
|
||||||
free(id);
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -489,11 +485,10 @@ man_SS_pre(MAN_ARGS)
|
||||||
char *id;
|
char *id;
|
||||||
|
|
||||||
if (n->type == ROFFT_HEAD) {
|
if (n->type == ROFFT_HEAD) {
|
||||||
id = html_make_id(n);
|
id = html_make_id(n, 1);
|
||||||
print_otag(h, TAG_H2, "cTi", "Ss", id);
|
print_otag(h, TAG_H2, "cTi", "Ss", id);
|
||||||
if (id != NULL)
|
if (id != NULL)
|
||||||
print_otag(h, TAG_A, "chR", "selflink", id);
|
print_otag(h, TAG_A, "chR", "permalink", id);
|
||||||
free(id);
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -516,7 +511,7 @@ man_IP_pre(MAN_ARGS)
|
||||||
const struct roff_node *nn;
|
const struct roff_node *nn;
|
||||||
|
|
||||||
if (n->type == ROFFT_BODY) {
|
if (n->type == ROFFT_BODY) {
|
||||||
print_otag(h, TAG_DD, "c", "It-tag");
|
print_otag(h, TAG_DD, "");
|
||||||
return 1;
|
return 1;
|
||||||
} else if (n->type != ROFFT_HEAD) {
|
} else if (n->type != ROFFT_HEAD) {
|
||||||
print_otag(h, TAG_DL, "c", "Bl-tag");
|
print_otag(h, TAG_DL, "c", "Bl-tag");
|
||||||
|
@ -525,7 +520,7 @@ man_IP_pre(MAN_ARGS)
|
||||||
|
|
||||||
/* FIXME: width specification. */
|
/* FIXME: width specification. */
|
||||||
|
|
||||||
print_otag(h, TAG_DT, "c", "It-tag");
|
print_otag(h, TAG_DT, "");
|
||||||
|
|
||||||
/* For IP, only print the first header element. */
|
/* For IP, only print the first header element. */
|
||||||
|
|
||||||
|
@ -550,24 +545,13 @@ man_IP_pre(MAN_ARGS)
|
||||||
static int
|
static int
|
||||||
man_HP_pre(MAN_ARGS)
|
man_HP_pre(MAN_ARGS)
|
||||||
{
|
{
|
||||||
struct roffsu sum, sui;
|
|
||||||
const struct roff_node *np;
|
|
||||||
|
|
||||||
if (n->type == ROFFT_HEAD)
|
if (n->type == ROFFT_HEAD)
|
||||||
return 0;
|
return 0;
|
||||||
else if (n->type != ROFFT_BLOCK)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
np = n->head->child;
|
if (n->type == ROFFT_BLOCK) {
|
||||||
|
print_bvspace(h, n);
|
||||||
if (np == NULL || !a2width(np, &sum))
|
print_otag(h, TAG_DIV, "c", "HP");
|
||||||
SCALE_HS_INIT(&sum, INDENT);
|
}
|
||||||
|
|
||||||
sui.unit = sum.unit;
|
|
||||||
sui.scale = -sum.scale;
|
|
||||||
|
|
||||||
print_bvspace(h, n);
|
|
||||||
print_otag(h, TAG_DIV, "csului", "Pp", &sum, &sui);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,18 +613,10 @@ man_ign_pre(MAN_ARGS)
|
||||||
static int
|
static int
|
||||||
man_RS_pre(MAN_ARGS)
|
man_RS_pre(MAN_ARGS)
|
||||||
{
|
{
|
||||||
struct roffsu su;
|
|
||||||
|
|
||||||
if (n->type == ROFFT_HEAD)
|
if (n->type == ROFFT_HEAD)
|
||||||
return 0;
|
return 0;
|
||||||
else if (n->type == ROFFT_BODY)
|
if (n->type == ROFFT_BLOCK)
|
||||||
return 1;
|
print_otag(h, TAG_DIV, "c", "Bd-indent");
|
||||||
|
|
||||||
SCALE_HS_INIT(&su, INDENT);
|
|
||||||
if (n->head->child)
|
|
||||||
a2width(n->head->child, &su);
|
|
||||||
|
|
||||||
print_otag(h, TAG_DIV, "sul", &su);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* $Id: man_term.c,v 1.209 2017/07/31 15:19:06 schwarze Exp $ */
|
/* $Id: man_term.c,v 1.211 2018/06/10 15:12:35 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -675,7 +675,8 @@ pre_SS(DECL_ARGS)
|
||||||
n = n->prev;
|
n = n->prev;
|
||||||
} while (n != NULL && n->tok >= MAN_TH &&
|
} while (n != NULL && n->tok >= MAN_TH &&
|
||||||
termacts[n->tok].flags & MAN_NOTEXT);
|
termacts[n->tok].flags & MAN_NOTEXT);
|
||||||
if (n == NULL || (n->tok == MAN_SS && n->body->child == NULL))
|
if (n == NULL || n->type == ROFFT_COMMENT ||
|
||||||
|
(n->tok == MAN_SS && n->body->child == NULL))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
for (i = 0; i < mt->pardist; i++)
|
for (i = 0; i < mt->pardist; i++)
|
||||||
|
@ -737,7 +738,8 @@ pre_SH(DECL_ARGS)
|
||||||
n = n->prev;
|
n = n->prev;
|
||||||
} while (n != NULL && n->tok >= MAN_TH &&
|
} while (n != NULL && n->tok >= MAN_TH &&
|
||||||
termacts[n->tok].flags & MAN_NOTEXT);
|
termacts[n->tok].flags & MAN_NOTEXT);
|
||||||
if (n == NULL || (n->tok == MAN_SH && n->body->child == NULL))
|
if (n == NULL || n->type == ROFFT_COMMENT ||
|
||||||
|
(n->tok == MAN_SH && n->body->child == NULL))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
for (i = 0; i < mt->pardist; i++)
|
for (i = 0; i < mt->pardist; i++)
|
||||||
|
@ -885,7 +887,8 @@ print_man_node(DECL_ARGS)
|
||||||
|
|
||||||
term_word(p, n->string);
|
term_word(p, n->string);
|
||||||
goto out;
|
goto out;
|
||||||
|
case ROFFT_COMMENT:
|
||||||
|
return;
|
||||||
case ROFFT_EQN:
|
case ROFFT_EQN:
|
||||||
if ( ! (n->flags & NODE_LINE))
|
if ( ! (n->flags & NODE_LINE))
|
||||||
p->flags |= TERMP_NOSPACE;
|
p->flags |= TERMP_NOSPACE;
|
||||||
|
@ -1029,6 +1032,18 @@ print_man_foot(struct termp *p, const struct roff_meta *meta)
|
||||||
|
|
||||||
term_word(p, title);
|
term_word(p, title);
|
||||||
term_flushln(p);
|
term_flushln(p);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reset the terminal state for more output after the footer:
|
||||||
|
* Some output modes, in particular PostScript and PDF, print
|
||||||
|
* the header and the footer into a buffer such that it can be
|
||||||
|
* reused for multiple output pages, then go on to format the
|
||||||
|
* main text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
p->tcol->offset = 0;
|
||||||
|
p->flags = 0;
|
||||||
|
|
||||||
free(title);
|
free(title);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* $OpenBSD$ */
|
/* $OpenBSD$ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010, 2012-2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -120,6 +120,7 @@ man_node_validate(struct roff_man *man)
|
||||||
case ROFFT_ROOT:
|
case ROFFT_ROOT:
|
||||||
check_root(man, n);
|
check_root(man, n);
|
||||||
break;
|
break;
|
||||||
|
case ROFFT_COMMENT:
|
||||||
case ROFFT_EQN:
|
case ROFFT_EQN:
|
||||||
case ROFFT_TBL:
|
case ROFFT_TBL:
|
||||||
break;
|
break;
|
||||||
|
@ -149,10 +150,9 @@ man_node_validate(struct roff_man *man)
|
||||||
static void
|
static void
|
||||||
check_root(CHKARGS)
|
check_root(CHKARGS)
|
||||||
{
|
{
|
||||||
|
|
||||||
assert((man->flags & (MAN_BLINE | MAN_ELINE)) == 0);
|
assert((man->flags & (MAN_BLINE | MAN_ELINE)) == 0);
|
||||||
|
|
||||||
if (NULL == man->first->child)
|
if (n->last == NULL || n->last->type == ROFFT_COMMENT)
|
||||||
mandoc_msg(MANDOCERR_DOC_EMPTY, man->parse,
|
mandoc_msg(MANDOCERR_DOC_EMPTY, man->parse,
|
||||||
n->line, n->pos, NULL);
|
n->line, n->pos, NULL);
|
||||||
else
|
else
|
|
@ -1,7 +1,7 @@
|
||||||
.\" $Id: mandoc.1,v 1.217 2017/07/20 15:26:41 schwarze Exp $
|
.\" $Id: mandoc.1,v 1.226 2018/07/28 18:34:15 schwarze Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
.\" Copyright (c) 2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
|
.\" Copyright (c) 2012, 2014-2018 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
.\"
|
.\"
|
||||||
.\" Permission to use, copy, modify, and distribute this software for any
|
.\" Permission to use, copy, modify, and distribute this software for any
|
||||||
.\" purpose with or without fee is hereby granted, provided that the above
|
.\" purpose with or without fee is hereby granted, provided that the above
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: August 8 2018 $
|
.Dd $Mdocdate: July 28 2018 $
|
||||||
.Dt MANDOC 1
|
.Dt MANDOC 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -34,9 +34,7 @@
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
utility formats
|
utility formats manual pages for display.
|
||||||
.Ux
|
|
||||||
manual pages for display.
|
|
||||||
.Pp
|
.Pp
|
||||||
By default,
|
By default,
|
||||||
.Nm
|
.Nm
|
||||||
|
@ -54,13 +52,13 @@ The options are as follows:
|
||||||
If the standard output is a terminal device and
|
If the standard output is a terminal device and
|
||||||
.Fl c
|
.Fl c
|
||||||
is not specified, use
|
is not specified, use
|
||||||
.Xr less 1
|
.Xr more 1
|
||||||
to paginate the output, just like
|
to paginate the output, just like
|
||||||
.Xr man 1
|
.Xr man 1
|
||||||
would.
|
would.
|
||||||
.It Fl c
|
.It Fl c
|
||||||
Copy the formatted manual pages to the standard output without using
|
Copy the formatted manual pages to the standard output without using
|
||||||
.Xr less 1
|
.Xr more 1
|
||||||
to paginate them.
|
to paginate them.
|
||||||
This is the default.
|
This is the default.
|
||||||
It can be specified to override
|
It can be specified to override
|
||||||
|
@ -118,7 +116,7 @@ With
|
||||||
all input files are interpreted as
|
all input files are interpreted as
|
||||||
.Xr man 7 .
|
.Xr man 7 .
|
||||||
By default, the input language is automatically detected for each file:
|
By default, the input language is automatically detected for each file:
|
||||||
if the the first macro is
|
if the first macro is
|
||||||
.Ic \&Dd
|
.Ic \&Dd
|
||||||
or
|
or
|
||||||
.Ic \&Dt ,
|
.Ic \&Dt ,
|
||||||
|
@ -132,13 +130,32 @@ With other arguments,
|
||||||
is silently ignored.
|
is silently ignored.
|
||||||
.It Fl O Ar options
|
.It Fl O Ar options
|
||||||
Comma-separated output options.
|
Comma-separated output options.
|
||||||
|
See the descriptions of the individual output formats for supported
|
||||||
|
.Ar options .
|
||||||
.It Fl T Ar output
|
.It Fl T Ar output
|
||||||
Output format.
|
Select the output format.
|
||||||
See
|
Supported values for the
|
||||||
.Sx Output Formats
|
.Ar output
|
||||||
for available formats.
|
argument are
|
||||||
Defaults to
|
.Cm ascii ,
|
||||||
.Fl T Cm locale .
|
.Cm html ,
|
||||||
|
the default of
|
||||||
|
.Cm locale ,
|
||||||
|
.Cm man ,
|
||||||
|
.Cm markdown ,
|
||||||
|
.Cm pdf ,
|
||||||
|
.Cm ps ,
|
||||||
|
.Cm tree ,
|
||||||
|
and
|
||||||
|
.Cm utf8 .
|
||||||
|
.Pp
|
||||||
|
The special
|
||||||
|
.Fl T Cm lint
|
||||||
|
mode only parses the input and produces no output.
|
||||||
|
It implies
|
||||||
|
.Fl W Cm all
|
||||||
|
and redirects parser messages, which usually appear on standard
|
||||||
|
error output, to standard output.
|
||||||
.It Fl W Ar level
|
.It Fl W Ar level
|
||||||
Specify the minimum message
|
Specify the minimum message
|
||||||
.Ar level
|
.Ar level
|
||||||
|
@ -196,11 +213,11 @@ and
|
||||||
are requested, they can be joined with a comma, for example
|
are requested, they can be joined with a comma, for example
|
||||||
.Fl W Cm error , Ns Cm stop .
|
.Fl W Cm error , Ns Cm stop .
|
||||||
.It Ar file
|
.It Ar file
|
||||||
Read input from zero or more files.
|
Read from the given input file.
|
||||||
If unspecified, reads from stdin.
|
If multiple files are specified, they are processed in the given order.
|
||||||
If multiple files are specified,
|
If unspecified,
|
||||||
.Nm
|
.Nm
|
||||||
will halt with the first failed parse.
|
reads from standard input.
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
The options
|
The options
|
||||||
|
@ -220,69 +237,14 @@ manual.
|
||||||
The options
|
The options
|
||||||
.Fl fkl
|
.Fl fkl
|
||||||
are mutually exclusive and override each other.
|
are mutually exclusive and override each other.
|
||||||
.Ss Output Formats
|
|
||||||
The
|
|
||||||
.Nm
|
|
||||||
utility accepts the following
|
|
||||||
.Fl T
|
|
||||||
arguments, which correspond to output modes:
|
|
||||||
.Bl -tag -width "-T markdown"
|
|
||||||
.It Fl T Cm ascii
|
|
||||||
Produce 7-bit ASCII output.
|
|
||||||
See
|
|
||||||
.Sx ASCII Output .
|
|
||||||
.It Fl T Cm html
|
|
||||||
Produce HTML5, CSS1, and MathML output.
|
|
||||||
See
|
|
||||||
.Sx HTML Output .
|
|
||||||
.It Fl T Cm lint
|
|
||||||
Parse only: produce no output.
|
|
||||||
Implies
|
|
||||||
.Fl W Cm all
|
|
||||||
and redirects parser messages, which usually appear
|
|
||||||
on standard error output, to standard output.
|
|
||||||
.It Fl T Cm locale
|
|
||||||
Encode output using the current locale.
|
|
||||||
This is the default.
|
|
||||||
See
|
|
||||||
.Sx Locale Output .
|
|
||||||
.It Fl T Cm man
|
|
||||||
Produce
|
|
||||||
.Xr man 7
|
|
||||||
format output.
|
|
||||||
See
|
|
||||||
.Sx Man Output .
|
|
||||||
.It Fl T Cm markdown
|
|
||||||
Produce output in
|
|
||||||
.Sy markdown
|
|
||||||
format.
|
|
||||||
See
|
|
||||||
.Sx Markdown Output .
|
|
||||||
.It Fl T Cm pdf
|
|
||||||
Produce PDF output.
|
|
||||||
See
|
|
||||||
.Sx PDF Output .
|
|
||||||
.It Fl T Cm ps
|
|
||||||
Produce PostScript output.
|
|
||||||
See
|
|
||||||
.Sx PostScript Output .
|
|
||||||
.It Fl T Cm tree
|
|
||||||
Produce an indented parse tree.
|
|
||||||
See
|
|
||||||
.Sx Syntax tree output .
|
|
||||||
.It Fl T Cm utf8
|
|
||||||
Encode output in the UTF\-8 multi-byte format.
|
|
||||||
See
|
|
||||||
.Sx UTF\-8 Output .
|
|
||||||
.El
|
|
||||||
.Pp
|
|
||||||
If multiple input files are specified, these will be processed by the
|
|
||||||
corresponding filter in-order.
|
|
||||||
.Ss ASCII Output
|
.Ss ASCII Output
|
||||||
Output produced by
|
Use
|
||||||
.Fl T Cm ascii
|
.Fl T Cm ascii
|
||||||
is rendered in standard 7-bit ASCII documented in
|
to force text output in 7-bit ASCII character encoding documented in the
|
||||||
.Xr ascii 7 .
|
.Xr ascii 7
|
||||||
|
manual page, ignoring the
|
||||||
|
.Xr locale 1
|
||||||
|
set in the environment.
|
||||||
.Pp
|
.Pp
|
||||||
Font styles are applied by using back-spaced encoding such that an
|
Font styles are applied by using back-spaced encoding such that an
|
||||||
underlined character
|
underlined character
|
||||||
|
@ -299,9 +261,6 @@ The special characters documented in
|
||||||
.Xr mandoc_char 7
|
.Xr mandoc_char 7
|
||||||
are rendered best-effort in an ASCII equivalent.
|
are rendered best-effort in an ASCII equivalent.
|
||||||
.Pp
|
.Pp
|
||||||
Output width is limited to 78 visible columns unless literal input lines
|
|
||||||
exceed this limit.
|
|
||||||
.Pp
|
|
||||||
The following
|
The following
|
||||||
.Fl O
|
.Fl O
|
||||||
arguments are accepted:
|
arguments are accepted:
|
||||||
|
@ -315,9 +274,30 @@ and seven for
|
||||||
.Xr man 7 .
|
.Xr man 7 .
|
||||||
Increasing this is not recommended; it may result in degraded formatting,
|
Increasing this is not recommended; it may result in degraded formatting,
|
||||||
for example overfull lines or ugly line breaks.
|
for example overfull lines or ugly line breaks.
|
||||||
|
When output is to a pager on a terminal that is less than 66 columns
|
||||||
|
wide, the default is reduced to three columns.
|
||||||
|
.It Cm mdoc
|
||||||
|
Format
|
||||||
|
.Xr man 7
|
||||||
|
input files in
|
||||||
|
.Xr mdoc 7
|
||||||
|
output style.
|
||||||
|
Specifically, this suppresses the two additional blank lines near the
|
||||||
|
top and the bottom of each page, and it implies
|
||||||
|
.Fl O Cm indent Ns =5 .
|
||||||
|
One useful application is for checking that
|
||||||
|
.Fl T Cm man
|
||||||
|
output formats in the same way as the
|
||||||
|
.Xr mdoc 7
|
||||||
|
source it was generated from.
|
||||||
.It Cm width Ns = Ns Ar width
|
.It Cm width Ns = Ns Ar width
|
||||||
The output width is set to
|
The output width is set to
|
||||||
.Ar width .
|
.Ar width
|
||||||
|
instead of the default of 78.
|
||||||
|
When output is to a pager on a terminal that is less than 79 columns
|
||||||
|
wide, the default is reduced to one less than the terminal width.
|
||||||
|
In any case, lines that are output in literal mode are never wrapped
|
||||||
|
and may exceed the output width.
|
||||||
.El
|
.El
|
||||||
.Ss HTML Output
|
.Ss HTML Output
|
||||||
Output produced by
|
Output produced by
|
||||||
|
@ -338,7 +318,8 @@ defaults to simple output (via an embedded style-sheet)
|
||||||
readable in any graphical or text-based web
|
readable in any graphical or text-based web
|
||||||
browser.
|
browser.
|
||||||
.Pp
|
.Pp
|
||||||
Special characters are rendered in decimal-encoded UTF\-8.
|
Non-ASCII characters are rendered
|
||||||
|
as hexadecimal Unicode character references.
|
||||||
.Pp
|
.Pp
|
||||||
The following
|
The following
|
||||||
.Fl O
|
.Fl O
|
||||||
|
@ -388,19 +369,28 @@ This must be a valid absolute or
|
||||||
relative URI.
|
relative URI.
|
||||||
.El
|
.El
|
||||||
.Ss Locale Output
|
.Ss Locale Output
|
||||||
Locale-depending output encoding is triggered with
|
By default,
|
||||||
|
.Nm
|
||||||
|
automatically selects UTF-8 or ASCII output according to the current
|
||||||
|
.Xr locale 1 .
|
||||||
|
If any of the environment variables
|
||||||
|
.Ev LC_ALL ,
|
||||||
|
.Ev LC_CTYPE ,
|
||||||
|
or
|
||||||
|
.Ev LANG
|
||||||
|
are set and the first one that is set
|
||||||
|
selects the UTF-8 character encoding, it produces
|
||||||
|
.Sx UTF-8 Output ;
|
||||||
|
otherwise, it falls back to
|
||||||
|
.Sx ASCII Output .
|
||||||
|
This output mode can also be selected explicitly with
|
||||||
.Fl T Cm locale .
|
.Fl T Cm locale .
|
||||||
This is the default.
|
|
||||||
.Pp
|
|
||||||
This option is not available on all systems: systems without locale
|
|
||||||
support, or those whose internal representation is not natively UCS-4,
|
|
||||||
will fall back to
|
|
||||||
.Fl T Cm ascii .
|
|
||||||
See
|
|
||||||
.Sx ASCII Output
|
|
||||||
for font style specification and available command-line arguments.
|
|
||||||
.Ss Man Output
|
.Ss Man Output
|
||||||
Translate input format into
|
Use
|
||||||
|
.Fl T Cm man
|
||||||
|
to translate
|
||||||
|
.Xr mdoc 7
|
||||||
|
input into
|
||||||
.Xr man 7
|
.Xr man 7
|
||||||
output format.
|
output format.
|
||||||
This is useful for distributing manual sources to legacy systems
|
This is useful for distributing manual sources to legacy systems
|
||||||
|
@ -408,11 +398,7 @@ lacking
|
||||||
.Xr mdoc 7
|
.Xr mdoc 7
|
||||||
formatters.
|
formatters.
|
||||||
.Pp
|
.Pp
|
||||||
If
|
If the input format of a file is
|
||||||
.Xr mdoc 7
|
|
||||||
is passed as input, it is translated into
|
|
||||||
.Xr man 7 .
|
|
||||||
If the input format is
|
|
||||||
.Xr man 7 ,
|
.Xr man 7 ,
|
||||||
the input is copied to the output, expanding any
|
the input is copied to the output, expanding any
|
||||||
.Xr roff 7
|
.Xr roff 7
|
||||||
|
@ -424,11 +410,11 @@ level controls which
|
||||||
.Sx DIAGNOSTICS
|
.Sx DIAGNOSTICS
|
||||||
are displayed before copying the input to the output.
|
are displayed before copying the input to the output.
|
||||||
.Ss Markdown Output
|
.Ss Markdown Output
|
||||||
Translate
|
Use
|
||||||
|
.Fl T Cm markdown
|
||||||
|
to translate
|
||||||
.Xr mdoc 7
|
.Xr mdoc 7
|
||||||
input to the
|
input to the markdown format conforming to
|
||||||
.Sy markdown
|
|
||||||
format conforming to
|
|
||||||
.Lk http://daringfireball.net/projects/markdown/syntax.text\
|
.Lk http://daringfireball.net/projects/markdown/syntax.text\
|
||||||
"John Gruber's 2004 specification" .
|
"John Gruber's 2004 specification" .
|
||||||
The output also almost conforms to the
|
The output also almost conforms to the
|
||||||
|
@ -499,13 +485,24 @@ If an unknown value is encountered,
|
||||||
.Ar letter
|
.Ar letter
|
||||||
is used.
|
is used.
|
||||||
.El
|
.El
|
||||||
.Ss UTF\-8 Output
|
.Ss UTF-8 Output
|
||||||
Use
|
Use
|
||||||
.Fl T Cm utf8
|
.Fl T Cm utf8
|
||||||
to force a UTF\-8 locale.
|
to force text output in UTF-8 multi-byte character encoding,
|
||||||
|
ignoring the
|
||||||
|
.Xr locale 1
|
||||||
|
settings in the environment.
|
||||||
See
|
See
|
||||||
.Sx Locale Output
|
.Sx ASCII Output
|
||||||
for details and options.
|
regarding font styles and
|
||||||
|
.Fl O
|
||||||
|
arguments.
|
||||||
|
.Pp
|
||||||
|
On operating systems lacking locale or wide character support, and
|
||||||
|
on those where the internal character representation is not UCS-4,
|
||||||
|
.Nm
|
||||||
|
always falls back to
|
||||||
|
.Sx ASCII Output .
|
||||||
.Ss Syntax tree output
|
.Ss Syntax tree output
|
||||||
Use
|
Use
|
||||||
.Fl T Cm tree
|
.Fl T Cm tree
|
||||||
|
@ -574,11 +571,18 @@ Meta data is not available in this case.
|
||||||
.El
|
.El
|
||||||
.Sh ENVIRONMENT
|
.Sh ENVIRONMENT
|
||||||
.Bl -tag -width MANPAGER
|
.Bl -tag -width MANPAGER
|
||||||
|
.It Ev LC_CTYPE
|
||||||
|
The character encoding
|
||||||
|
.Xr locale 1 .
|
||||||
|
When
|
||||||
|
.Sx Locale Output
|
||||||
|
is selected, it decides whether to use ASCII or UTF-8 output format.
|
||||||
|
It never affects the interpretation of input files.
|
||||||
.It Ev MANPAGER
|
.It Ev MANPAGER
|
||||||
Any non-empty value of the environment variable
|
Any non-empty value of the environment variable
|
||||||
.Ev MANPAGER
|
.Ev MANPAGER
|
||||||
is used instead of the standard pagination program,
|
is used instead of the standard pagination program,
|
||||||
.Xr less 1 ;
|
.Xr more 1 ;
|
||||||
see
|
see
|
||||||
.Xr man 1
|
.Xr man 1
|
||||||
for details.
|
for details.
|
||||||
|
@ -592,7 +596,7 @@ Specifies the pagination program to use when
|
||||||
.Ev MANPAGER
|
.Ev MANPAGER
|
||||||
is not defined.
|
is not defined.
|
||||||
If neither PAGER nor MANPAGER is defined,
|
If neither PAGER nor MANPAGER is defined,
|
||||||
.Xr less 1
|
.Xr more 1
|
||||||
.Fl s
|
.Fl s
|
||||||
is used.
|
is used.
|
||||||
Only used if
|
Only used if
|
||||||
|
@ -741,7 +745,7 @@ Please use your good judgement to decide whether any particular
|
||||||
.Cm style
|
.Cm style
|
||||||
suggestion really justifies a change to the input file.
|
suggestion really justifies a change to the input file.
|
||||||
.It Cm base
|
.It Cm base
|
||||||
A convertion used in the base system of a specific operating system
|
A convention used in the base system of a specific operating system
|
||||||
is not adhered to.
|
is not adhered to.
|
||||||
These are not markup mistakes, and neither the quality of formatting
|
These are not markup mistakes, and neither the quality of formatting
|
||||||
nor portability are in danger.
|
nor portability are in danger.
|
||||||
|
@ -849,6 +853,16 @@ Consider using the conventional
|
||||||
date format
|
date format
|
||||||
.Dq "Month dd, yyyy"
|
.Dq "Month dd, yyyy"
|
||||||
instead.
|
instead.
|
||||||
|
.It Sy "normalizing date format to" : No ...
|
||||||
|
.Pq mdoc , man
|
||||||
|
The
|
||||||
|
.Ic \&Dd
|
||||||
|
or
|
||||||
|
.Ic \&TH
|
||||||
|
macro provides an abbreviated month name or a day number with a
|
||||||
|
leading zero.
|
||||||
|
In the formatted output, the month name is written out in full
|
||||||
|
and the leading zero is omitted.
|
||||||
.It Sy "lower case character in document title"
|
.It Sy "lower case character in document title"
|
||||||
.Pq mdoc , man
|
.Pq mdoc , man
|
||||||
The title is still used as given in the
|
The title is still used as given in the
|
||||||
|
@ -861,7 +875,7 @@ A single manual page contains two copies of the RCS identifier for
|
||||||
the same operating system.
|
the same operating system.
|
||||||
Consider deleting the later instance and moving the first one up
|
Consider deleting the later instance and moving the first one up
|
||||||
to the top of the page.
|
to the top of the page.
|
||||||
.It Sy "typo in section name"
|
.It Sy "possible typo in section name"
|
||||||
.Pq mdoc
|
.Pq mdoc
|
||||||
Fuzzy string matching revealed that the argument of an
|
Fuzzy string matching revealed that the argument of an
|
||||||
.Ic \&Sh
|
.Ic \&Sh
|
||||||
|
@ -938,6 +952,12 @@ An
|
||||||
request occurs even though the document already switched to no-fill mode
|
request occurs even though the document already switched to no-fill mode
|
||||||
and did not switch back to fill mode yet.
|
and did not switch back to fill mode yet.
|
||||||
It has no effect.
|
It has no effect.
|
||||||
|
.It Sy "verbatim \(dq--\(dq, maybe consider using \e(em"
|
||||||
|
.Pq mdoc
|
||||||
|
Even though the ASCII output device renders an em-dash as
|
||||||
|
.Qq \-\- ,
|
||||||
|
that is not a good way to write it in an input file
|
||||||
|
because it renders poorly on all other output devices.
|
||||||
.It Sy "function name without markup"
|
.It Sy "function name without markup"
|
||||||
.Pq mdoc
|
.Pq mdoc
|
||||||
A word followed by an empty pair of parentheses occurs on a text line.
|
A word followed by an empty pair of parentheses occurs on a text line.
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue