Convert Properties to Textile
Max file size 100mb.
Properties vs Textile Format Comparison
| Aspect | Properties (Source Format) | Textile (Target Format) |
|---|---|---|
| Format Overview |
Properties
Java Properties File
The standard configuration format for Java applications and Spring Boot services. Properties files store settings as key=value pairs with dotted namespace conventions (e.g., spring.jpa.hibernate.ddl-auto). They support line comments with # or !, multi-line values with backslash continuation, and Unicode escape sequences for internationalized content. Key-Value Pairs Configuration |
Textile
Textile Markup Language
A lightweight markup language that converts plain text into styled HTML. Textile provides concise syntax for headings, bold, italic, links, images, tables, and lists. It is the native markup for Redmine project management, Textpattern CMS, and several other web platforms. Textile prioritizes readability in both source and rendered forms. Markup Language Web Publishing |
| Technical Specifications |
Structure: Line-oriented key=value pairs
Encoding: ISO 8859-1 (Latin-1) / UTF-8 Format: java.util.Properties specification Compression: None Extensions: .properties |
Structure: Inline markup with special characters
Encoding: UTF-8 Format: Textile markup specification Compression: None Extensions: .textile, .txt |
| Syntax Examples |
Key-value pairs with dotted notation: # Actuator endpoints management.endpoints.web.exposure.include=health,info,metrics management.endpoint.health.show-details=always management.metrics.export.prometheus.enabled=true |
Textile with tables and formatting: h2. Actuator Endpoints |_. Property |_. Value | | @management.endpoints.web.exposure.include@ | health,info,metrics | | @management.endpoint.health.show-details@ | always | | @management.metrics.export.prometheus.enabled@ | true | *Note:* Prometheus metrics export is enabled. |
| Content Support |
|
|
| Advantages |
|
|
| Disadvantages |
|
|
| Common Uses |
|
|
| Best For |
|
|
| Version History |
Introduced: Java 1.0 (1996)
Current Version: Part of java.util since JDK 1.0 Status: Stable, widely used Evolution: XML properties variant added in Java 5 |
Introduced: 2002 (Dean Allen)
Current Version: Textile 2 (RedCloth 4.x) Status: Stable, maintained Evolution: Adopted by Redmine, influenced Markdown |
| Software Support |
Java: java.util.Properties (built-in)
Spring: @PropertySource, application.properties IDEs: IntelliJ, Eclipse, VS Code Other: Python configparser, Node.js properties-parser |
Redmine: Native Textile rendering
Ruby: RedCloth gem Python: textile library Other: Textpattern CMS, Pandoc (conversion) |
Why Convert Properties to Textile?
Converting Java Properties files to Textile markup creates formatted configuration documentation that integrates directly with Redmine, one of the most popular open-source project management tools. Many development teams use Redmine for issue tracking, wiki documentation, and project management. Textile-formatted configuration references can be pasted directly into Redmine wiki pages, issue descriptions, and project documentation without any additional processing.
Textile's table syntax is exceptionally clean and readable compared to alternatives. A properties table in Textile uses the simple pipe-delimited format with header markers (|_. for header cells), producing well-formatted tables that render beautifully in web browsers. Property keys formatted with @inline code@ markers display in monospaced font, making them visually distinct from descriptive text and values. This native table support makes Textile ideal for presenting key-value configuration data.
For teams managing microservice configurations in Redmine, Textile conversion enables a documentation workflow where configuration changes are tracked alongside code changes. Each microservice can have a Redmine wiki page with its current configuration reference, formatted with proper headings for each property group, tables for key-value pairs, and annotated notes for critical settings. When properties change, the Textile can be regenerated and updated on the wiki.
Textile's CSS class and ID support allows for customized styling of configuration documentation. Critical security properties can be highlighted with custom classes, deprecated settings can be styled with strikethrough, and environment-specific values can be color-coded. This styling capability, combined with Textile's clean syntax, produces configuration documentation that is both informative and visually organized.
Key Benefits of Converting Properties to Textile:
- Redmine Native: Paste directly into Redmine wiki pages and issue descriptions
- Clean Table Syntax: Intuitive pipe-delimited tables with header support
- Inline Code Markers: Property keys formatted with @code@ for monospaced display
- CSS Class Support: Custom styling for different property categories
- Readable Source: Textile source is human-readable even before rendering
- Quick Formatting: Headings, bold, lists, and links with minimal syntax
- Wiki Integration: Seamless fit for wiki-based documentation workflows
Practical Examples
Example 1: Spring Boot Configuration Wiki Page
Input Properties file (application.properties):
# Application settings spring.application.name=billing-service server.port=8080 server.servlet.context-path=/api/billing # Database spring.datasource.url=jdbc:mysql://db-host:3306/billing spring.datasource.username=billing_svc spring.datasource.pool-size=20
Output Textile file (application_config.textile):
h1. Billing Service Configuration h2. Application Settings |_. Property |_. Value | | @spring.application.name@ | billing-service | | @server.port@ | 8080 | | @server.servlet.context-path@ | /api/billing | h2. Database Configuration |_. Property |_. Value | | @spring.datasource.url@ | @jdbc:mysql://db-host:3306/billing@ | | @spring.datasource.username@ | billing_svc | | @spring.datasource.pool-size@ | 20 | p(note). Database connection pool is configured with 20 connections. Adjust based on expected load.
Example 2: Monitoring Configuration for Redmine Ticket
Input Properties file (monitoring.properties):
# Actuator and Prometheus
management.endpoints.web.exposure.include=health,info,metrics,prometheus
management.endpoint.health.show-details=always
management.metrics.export.prometheus.enabled=true
management.metrics.tags.application=${spring.application.name}
# Health checks
management.health.db.enabled=true
management.health.redis.enabled=true
management.health.diskspace.threshold=10485760
Output Textile file (monitoring_config.textile):
h1. Monitoring Configuration
h2. Actuator Endpoints
|_. Property |_. Value |_. Description |
| @management.endpoints.web.exposure.include@ | health,info,metrics,prometheus | Exposed actuator endpoints |
| @management.endpoint.health.show-details@ | always | Show full health details |
| @management.metrics.export.prometheus.enabled@ | *true* | Prometheus export active |
| @management.metrics.tags.application@ | @${spring.application.name}@ | Auto-tagged from app name |
h2. Health Checks
|_. Check |_. Enabled |_. Threshold |
| Database | !/images/icons/true.png! Yes | - |
| Redis | !/images/icons/true.png! Yes | - |
| Disk Space | !/images/icons/true.png! Yes | 10 MB |
h3. Notes
* Prometheus scraping endpoint: @/actuator/prometheus@
* Health endpoint: @/actuator/health@
* Disk space threshold is set to *10 MB* minimum free space
Example 3: Multi-Environment Comparison Table
Input Properties file (application-dev.properties):
# Development environment spring.profiles.active=dev server.port=8080 logging.level.root=DEBUG spring.datasource.url=jdbc:h2:mem:devdb spring.h2.console.enabled=true spring.jpa.show-sql=true
Output Textile file (dev_config.textile):
h1. Development Environment Configuration p(%. Profile: *dev* h2. Server Settings |_. Property |_. Value | | @spring.profiles.active@ | dev | | @server.port@ | 8080 | h2. Logging |_. Logger |_. Level | | Root | *DEBUG* | p>. _Debug logging is enabled for development._ h2. Database (H2 In-Memory) |_. Property |_. Value | | @spring.datasource.url@ | @jdbc:h2:mem:devdb@ | | @spring.h2.console.enabled@ | *true* | | @spring.jpa.show-sql@ | *true* | bq. The H2 web console is accessible at @/h2-console@ for development database inspection. *Do not enable in production.* h3. Development-Only Features # H2 in-memory database (no external DB required) # SQL logging enabled for query debugging # H2 console available for direct database access
Frequently Asked Questions (FAQ)
Q: What is Textile markup format?
A: Textile is a lightweight markup language created by Dean Allen in 2002 for converting plain text into styled HTML. It is the native markup format for Redmine project management software and Textpattern CMS. Textile provides clean syntax for headings (h1., h2.), bold (*text*), italic (_text_), code (@text@), tables (| delimited), and lists.
Q: Can I paste the output directly into Redmine?
A: Yes, Redmine uses Textile as its default markup language. The converted output can be pasted directly into Redmine wiki pages, issue descriptions, issue comments, and project documentation. The tables, headings, and formatting will render correctly without any modifications.
Q: How are property keys formatted in Textile?
A: Property keys are wrapped in Textile's inline code markers (@property.key@), which renders them in a monospaced font with a subtle background. This makes property names visually distinct from regular text and values, improving readability in the rendered output.
Q: Does Textile support syntax-highlighted code blocks?
A: Textile supports code blocks using the bc. prefix for block code. In Redmine, you can also use <pre><code class="properties"> for syntax-highlighted blocks. The converter wraps original properties snippets in appropriate code blocks that render with proper formatting in Textile-compatible platforms.
Q: How are property groups organized in the Textile output?
A: Properties are grouped by their dotted namespace prefix and organized under Textile headings (h2., h3.). Each group is presented as a formatted table with header rows (|_. Property |_. Value |). Comments from the original file become descriptive paragraphs between sections.
Q: Is Textile similar to Markdown?
A: Textile and Markdown are both lightweight markup languages with similar goals but different syntax. Textile predates Markdown (2002 vs 2004) and offers features like CSS class assignment and more flexible table syntax. However, Markdown has a larger community. The main reason to use Textile is for Redmine and Textpattern integration.
Q: Can I convert the Textile output to other formats?
A: Yes, Pandoc can convert Textile to Markdown, HTML, PDF, DOCX, and many other formats. Ruby's RedCloth library converts Textile to HTML. This makes Textile a useful intermediate format if you need to generate multiple output formats from your properties documentation.
Q: Does the conversion preserve the original properties file structure?
A: Yes, the converter maintains the logical grouping and ordering of properties. Comments, blank lines, and property groups from the original file are reflected in the Textile output as sections, headings, and table groupings. The overall structure is preserved while adding rich formatting and organization.