@@ -5,6 +5,7 @@ import { DataviewApi, getAPI, isPluginEnabled } from "obsidian-dataview";
55import { Literal , WrappedLiteral } from "obsidian-dataview/lib/data-model/value" ;
66import { DateTime } from "luxon" ;
77import { LOGGER } from "services/Logger" ;
8+ import { LocalSettings } from "cdm/SettingsModel" ;
89class DataviewProxy {
910
1011 private static instance : DataviewProxy ;
@@ -64,7 +65,7 @@ class DataviewProxy {
6465 return this . getDataviewAPI ( ) . value . wrapValue ( literal ) ;
6566 }
6667
67- parseLiteral ( literal : Literal , dataTypeDst : string , isInline ?: boolean ) : Literal {
68+ parseLiteral ( literal : Literal , dataTypeDst : string , localSettings : LocalSettings , isInline ?: boolean ) : Literal {
6869 let parsedLiteral : Literal = literal ;
6970 if ( ! this . getDataviewAPI ( ) . value . isTruthy ( literal . toString ( ) ) ) {
7071 return "" ;
@@ -79,7 +80,7 @@ class DataviewProxy {
7980 parsedLiteral = this . parseToString ( wrapped ) ;
8081 break ;
8182 case DataTypes . MARKDOWN :
82- parsedLiteral = this . parseToMarkdown ( wrapped , isInline ) ;
83+ parsedLiteral = this . parseToMarkdown ( wrapped , localSettings , isInline ) ;
8384 break ;
8485 case DataTypes . TAGS :
8586 parsedLiteral = this . parseToOptionsArray ( wrapped ) ;
@@ -151,16 +152,23 @@ class DataviewProxy {
151152 return wrapped . type === 'number' ? wrapped . value : Number ( adjustedValue ) ;
152153 }
153154
154- private parseToMarkdown ( wrapped : WrappedLiteral , isInline : boolean ) : string {
155+ private parseToMarkdown ( wrapped : WrappedLiteral , localSettings : LocalSettings , isInline : boolean ) : string {
155156 let auxMarkdown = '' ;
156- if ( wrapped . type === 'array' ) {
157- auxMarkdown = wrapped . value
158- . map ( v => this . parseToMarkdown ( this . getDataviewAPI ( ) . value . wrapValue ( v ) , isInline ) )
159- . join ( ', ' ) ;
160- } else {
161- auxMarkdown = this . parseToString ( wrapped ) as string ;
162- // Check possible markdown breakers
163- auxMarkdown = this . handleMarkdownBreaker ( auxMarkdown , isInline ) ;
157+ switch ( wrapped . type ) {
158+ case 'boolean' :
159+ case 'number' :
160+ // Do nothing
161+ auxMarkdown = wrapped . value . toString ( ) ;
162+ break ;
163+ case 'array' :
164+ auxMarkdown = wrapped . value
165+ . map ( v => this . parseToMarkdown ( this . getDataviewAPI ( ) . value . wrapValue ( v ) , localSettings , isInline ) )
166+ . join ( ', ' ) ;
167+ break ;
168+ default :
169+ auxMarkdown = this . parseToString ( wrapped ) as string ;
170+ // Check possible markdown breakers
171+ auxMarkdown = this . handleMarkdownBreaker ( auxMarkdown , localSettings , isInline ) ;
164172 }
165173 return auxMarkdown ;
166174 }
@@ -172,14 +180,15 @@ class DataviewProxy {
172180 return wrapped . value ;
173181 }
174182
175- private handleMarkdownBreaker ( value : string , isInline ?: boolean ) : string {
183+ private handleMarkdownBreaker ( value : string , localSettings : LocalSettings , isInline ?: boolean ) : string {
176184 if ( isInline || ( value . startsWith ( '"' ) && value . endsWith ( '"' ) ) ) {
177185 return value ;
178186 }
179187 // Check possible markdown breakers of the yaml
180188 if ( MarkdownBreakerRules . INIT_CHARS . some ( c => value . startsWith ( c ) ) ||
181189 MarkdownBreakerRules . BETWEEN_CHARS . some ( rule => value . includes ( rule ) ) ||
182- MarkdownBreakerRules . UNIQUE_CHARS . some ( c => value === c ) ) {
190+ MarkdownBreakerRules . UNIQUE_CHARS . some ( c => value === c ) ||
191+ localSettings . frontmatter_quote_wrap ) {
183192 value = value . replaceAll ( `"` , `\\"` ) ;
184193 return `"${ value } "` ;
185194 }
0 commit comments