dnl "dnl" is the preferred comment convention for m4 files.
dnl Using the other comment conventions of m4 is hazardous because of the
dnl need for changecom(). Using HTML comment conventions is hazardous because
dnl of commas and other m4 syntactic elements that may be recognized by m4.
dnl This file defines macros that are needed to be configure appearance.
dnl primitives.m4 is intended to be processed immediately before this file,
dnl appearance.m4 may redefine some of the macros first defined in
dnl primitives.m4, if appropriate.
dnl Note that literal commas and apostrophe's may be interpreted syntactically
dnl by m4, as parameter separators and quote terminators, respectively. It is
dnl better to use , for comma and ' for apostrophe where literals are
dnl needed. In may also be appropriate to use instead of a space.
dnl A minimal file using these macros would be structured as follows:
dnl dnl FILENAME.m4 $Id: 4www.appearance.m4,v 1.6 2025/01/29 16:13:45 sauer Exp sauer $
dnl
dnl define(`m4_page_name', `index')
dnl define(`m4_page_title', `My home page')
dnl
dnl include(`primitives.m4')
dnl include(`appearance.m4')
dnl
dnl m4_page(
dnl m4_table(
dnl m4_row(
dnl
dnl , dnl {begin row primary content}
dnl
dnl ) dnl end m4_row primary content
dnl ) dnl end m4_table
dnl ) dnl end m4_page
changecom(`#M4#')
dnl If a file forgot to include primitives, do it now.
ifdef(`m4_primitives',,include(primitives.m4))
dnl site-specific terms are a likely end user customization...
sinclude(terms.m4)
define(m4_hostname,
`technologists.com')
dnl `ns.technologists.com')
define(m4_rss_name,
`rss.xml')
define(m4_home_path,
`/.')
define(m4_crumb_home,
`home')
define(m4_html_path,
`https://m4_hostname')
define(m4_shtml_path,
`https://m4_hostname')
define(m4_images_path,
`m4_html_path/images')
define(m4_notes_path,
`https://technologists.com/notes/')
define(m4_gmt2m,
`https://m4_hostname/GMT2M')
define(m4_gmt2m_images,
`https://m4_hostname/GMT2M/images')
dnl `https://ns.technologists.com/notes/')
define(m4_spacer,
`
')
dnl define(`m4_enable_margin_links') dnl margin links for navigation
dnl See comment at define of m4_row in primitives.m4 about need for following:
ifdef(`m4_enable_margin_links',
`
define(`m4_row', dnl redefined to ensure proper definition w/ margin links
m4_row_begin$1m4_row_middle$2m4_row_column_end$3m4_row_end
)
'
)
dnl This is here, not in primitives.m4, because of need for above re-define
define(m4_margin_links,
ifdef(`m4_enable_margin_links',
`
ifelse(m4_page_name,index,,)homeifelse(m4_page_name,index,,)
ifelse(m4_page_name,about,,)aboutifelse(m4_page_name,about,,)
ifelse(m4_page_name,archives,,)archivesifelse(m4_page_name,archives,,)
ifelse(m4_page_name,notes,,)notesifelse(m4_page_name,notes,,)
dnl ifelse(m4_page_name,cams,,)camsifelse(m4_page_name,cams,,)
dnl ifelse(m4_page_name,forum,,)forumifelse(m4_page_name,forum,,)
dnl ifelse(m4_page_name,hotlists,,)hotlistsifelse(m4_page_name,hotlists,,)
dnl ifelse(m4_page_name,library,,)libraryifelse(m4_page_name,library,,)
dnl ifelse(m4_page_name,mod_auth++,,)mod_auth++ifelse(m4_page_name,mod_auth++,,)
dnl ifelse(m4_page_name,nt4eol,,)nt4eolifelse(m4_page_name,nt4eol,,)
ifelse(m4_page_name,tidbits,,)tidbitsifelse(m4_page_name,tidbits,,)
ifelse(m4_page_name,RSS,,()RSSifelse(m4_page_name,RSS,,))
ifelse(m4_page_name,music,,)musicifelse(m4_page_name,music,,)
vidconf.net
'
)
ifelse(m4_page_name,index,
,)
)
define(`m4_conditional_break',ifdef(`m4_enable_margin_links',
,))
define(`m4_conditional_spacer',ifdef(`m4_enable_margin_links',m4_spacer,))
define(`m4_enable_bottom_links') dnl bottom links for navigation
define(m4_head_definition,
`