129 lines
3.7 KiB
Python
129 lines
3.7 KiB
Python
import re
|
|
from typing import List
|
|
|
|
|
|
def define_env(env):
|
|
@env.macro
|
|
def javadoc(clazz: str = None, target: str = None) -> str:
|
|
if not "javadoc_url" in env.variables:
|
|
return clazz
|
|
|
|
if not clazz:
|
|
return f"{env.variables['javadoc_url'].rstrip('/')}/index.html"
|
|
else:
|
|
if "javadoc_default_package" in env.variables and not clazz.startswith(env.variables['javadoc_default_package']):
|
|
clazz = f"{env.variables['javadoc_default_package'].rstrip('.')}.{clazz}"
|
|
javadoc_url = env.variables["javadoc_url"].rstrip("/")
|
|
|
|
path = list()
|
|
name = list()
|
|
|
|
for p in clazz.split('.'):
|
|
if p[0].islower():
|
|
path.append(p)
|
|
else:
|
|
name.append(p)
|
|
|
|
path = '/'.join(path) + '/' + '.'.join(name) + ".html"
|
|
if target:
|
|
path = f"{path}#{target}"
|
|
return f"{javadoc_url}/{path}"
|
|
|
|
@env.macro
|
|
def jd(cl: str = None, t: str = None) -> str:
|
|
return javadoc(cl, t)
|
|
|
|
@env.macro
|
|
def javadoc_link(
|
|
clazz: str = None,
|
|
target: str = None,
|
|
strip_package: bool = True,
|
|
strip_clazz: bool = False,
|
|
strip_params: bool = True,
|
|
title: str = None
|
|
) -> str:
|
|
name = clazz or "Javadoc"
|
|
if strip_package:
|
|
if clazz and clazz.rfind(".") > -1:
|
|
name = clazz[clazz.rfind(".") + 1 :]
|
|
if target:
|
|
# _target = re.sub(r"([^(][^,]*?\.)*?([^)]+)", lambda m: m.group(2), target)
|
|
_target = target
|
|
|
|
if m := re.match(r'^(.+?)\((.*)\)$', _target):
|
|
if strip_params and m.group(2):
|
|
params = m.group(2).split(',')
|
|
for i, param in enumerate(params):
|
|
dot = param.rfind('.')
|
|
if dot >= 0:
|
|
params[i] = param[dot+1:].strip()
|
|
params = ", ".join(params)
|
|
_target = f'{m.group(1)}({params})'
|
|
|
|
if strip_clazz:
|
|
name = _target
|
|
else:
|
|
name = f"{name}.{_target}"
|
|
if title:
|
|
name = title
|
|
|
|
return f"[`{name}`]({javadoc(clazz, target)})"
|
|
|
|
@env.macro
|
|
def jdl(
|
|
cl: str = None,
|
|
t: str = None,
|
|
p: bool = False,
|
|
c: bool = True,
|
|
title: str = None
|
|
) -> str:
|
|
return javadoc_link(cl, t, strip_package=not p, strip_clazz=not c, strip_params=True, title=title)
|
|
|
|
@env.macro
|
|
def jdc(
|
|
cl: str,
|
|
p: bool = False
|
|
) -> str:
|
|
return javadoc_link(cl, strip_package=not p)
|
|
|
|
@env.macro
|
|
def jdm(
|
|
cl: str,
|
|
t: str,
|
|
p: bool = False,
|
|
c: bool = False
|
|
) -> str:
|
|
return javadoc_link(cl, t, strip_package=not p, strip_clazz=not c)
|
|
|
|
@env.macro
|
|
def javadoc_signature(
|
|
clazz: str = None,
|
|
member: str = None,
|
|
package: str = None,
|
|
params: List[str] = list(),
|
|
) -> str:
|
|
sig = clazz or ""
|
|
if clazz and package:
|
|
sig = f"{package}.{sig}"
|
|
if member:
|
|
sig = f"{sig}#{member}"
|
|
|
|
pparams = ",".join(params)
|
|
sig = f"{sig}({pparams})"
|
|
|
|
return sig
|
|
|
|
@env.macro
|
|
def jds(
|
|
cl: str = None,
|
|
m: str = None,
|
|
pkg: str = None,
|
|
params: List[str] = list(),
|
|
) -> str:
|
|
javadoc_signature(cl, m, pkg, params)
|
|
|
|
|
|
# schule/ngb/zm/Zeichenmaschine.html#setCursor(java.awt.Image,int,int)
|
|
# schule/ngb/zm/Zeichenmaschine.html#getLayer(java.lang.Class)
|
|
# schule/ngb/zm/DrawableLayer.html#add(schule.ngb.zm.Drawable...)
|