diff --git a/rendercv/themes/classic/__init__.py b/rendercv/themes/classic/__init__.py index 9e51f75..a2d3262 100644 --- a/rendercv/themes/classic/__init__.py +++ b/rendercv/themes/classic/__init__.py @@ -3,35 +3,8 @@ from typing import Literal, Annotated import pydantic import pydantic_extra_types.color as pydantic_color -LaTeXDimension = Annotated[ - str, - pydantic.Field( - pattern=r"\d+\.?\d* *(cm|in|pt|mm|ex|em)", - ), -] - - -class ClassicThemePageMargins(pydantic.BaseModel): - top: LaTeXDimension = pydantic.Field( - default="2 cm", - title="Top Margin", - description="The top margin of the page with units.", - ) - bottom: LaTeXDimension = pydantic.Field( - default="2 cm", - title="Bottom Margin", - description="The bottom margin of the page with units.", - ) - left: LaTeXDimension = pydantic.Field( - default="1.24 cm", - title="Left Margin", - description="The left margin of the page with units.", - ) - right: LaTeXDimension = pydantic.Field( - default="1.24 cm", - title="Right Margin", - description="The right margin of the page with units.", - ) +from .. import LaTeXDimension +from .. import PageMargins class ClassicThemeSectionTitleMargins(pydantic.BaseModel): @@ -98,8 +71,8 @@ class ClassicThemeHeaderMargins(pydantic.BaseModel): class ClassicThemeMargins(pydantic.BaseModel): - page: ClassicThemePageMargins = pydantic.Field( - default=ClassicThemePageMargins(), + page: PageMargins = pydantic.Field( + default=PageMargins(), title="Page Margins", description="Page margins for the classic theme.", ) diff --git a/rendercv/themes/moderncv/__init__.py b/rendercv/themes/moderncv/__init__.py index 3a542c8..a7a332c 100644 --- a/rendercv/themes/moderncv/__init__.py +++ b/rendercv/themes/moderncv/__init__.py @@ -2,13 +2,7 @@ from typing import Literal, Annotated import pydantic - -LaTeXDimension = Annotated[ - str, - pydantic.Field( - pattern=r"\d+\.?\d* *(cm|in|pt|mm|ex|em)", - ), -] +from .. import LaTeXDimension class ModerncvThemeOptions(pydantic.BaseModel): diff --git a/rendercv/themes/sb2nov/__init__.py b/rendercv/themes/sb2nov/__init__.py index a504066..d557a4f 100644 --- a/rendercv/themes/sb2nov/__init__.py +++ b/rendercv/themes/sb2nov/__init__.py @@ -2,13 +2,7 @@ from typing import Literal, Annotated import pydantic - -LaTeXDimension = Annotated[ - str, - pydantic.Field( - pattern=r"\d+\.?\d* *(cm|in|pt|mm|ex|em)", - ), -] +from .. import LaTeXDimension, PageMargins class Sb2novThemeOptions(pydantic.BaseModel): @@ -28,13 +22,31 @@ class Sb2novThemeOptions(pydantic.BaseModel): title="Page Size", description="The page size of the CV. It can be a4paper or letterpaper.", ) - disable_page_numbering: bool = pydantic.Field( - default=False, - title="Disable Page Numbering", - description=( - "If this option is set to true, then the page numbering will be disabled." - ), + + link_color: ( + Literal["black"] + | Literal["red"] + | Literal["green"] + | Literal["blue"] + | Literal["cyan"] + | Literal["magenta"] + | Literal["yellow"] + ) = pydantic.Field( + default="cyan", + validate_default=True, + title="Link Color", + description="The color of the links in the CV.", + examples=[ + "black", + "red", + "green", + "blue", + "cyan", + "magenta", + "yellow", + ], ) + date_and_location_width: LaTeXDimension = pydantic.Field( default="4.1 cm", title="Date and Location Column Width", @@ -47,19 +59,6 @@ class Sb2novThemeOptions(pydantic.BaseModel): "The space between the connection objects (like phone, email, and website)." ), ) - text_alignment: Literal["left-aligned", "justified"] = pydantic.Field( - default="left-aligned", - title="Text Alignment", - description="The alignment of the text.", - ) - show_timespan_in: list[str] = pydantic.Field( - default=[], - title="Show Time Span in These Sections", - description=( - "The time span will be shown in the date and location column in these" - " sections. The input should be a list of strings." - ), - ) show_last_updated_date: bool = pydantic.Field( default=True, title="Show Last Updated Date", @@ -73,3 +72,8 @@ class Sb2novThemeOptions(pydantic.BaseModel): title="Header Font Size", description="The font size of the header (the name of the person).", ) + margins: PageMargins = pydantic.Field( + default=PageMargins(), + title="Margins", + description="The page margins of the CV.", + )