Welcome, Guest. Please login or register.
Did you miss your activation email?
2018-Sep-23 00:27

Login with username, password and session length

Recent

Shoutbox

Den:
Sep. 19 2018 - 4:15pm
twit to image works again
Den:
Sep. 18 2018 - 4:06am
riders on the storm
Den:
Sep. 16 2018 - 1:07am
Gnomish uprising
Den:
Sep. 15 2018 - 5:44pm
keywords updated on ccgsearch
Den:
Sep. 14 2018 - 3:07am
fixed up daccg.com/ccgsearch/

since magiccards.info is gone, and cant find simple fast replacement
Den:
Sep. 09 2018 - 7:26am
Xayvir, Game Designer
Den:
Sep. 02 2018 - 2:49am
improved card creator Planeswalker frame
Den:
Aug. 28 2018 - 2:54pm
completed lists of plen things in relation to jung archetypes

Author Topic: Versatile Separated Values (VSV)  (Read 1039 times)

Den

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1180
  • Selina is my Superstar
    • View Profile
    • Amuseum
Versatile Separated Values (VSV)
« on: 2017-Nov-12 09:05 »
Versatile Separated Values (VSV)

Proposal: A versatile, efficient, unambiguous, standardized, simple text format for creating tables and lists that's easily read and created by both humans and machines, that supports many variations for any personal style, preferences, and protocols. Can accept any nonspace character (including comma, colon, tab, asterisk, etc.) as delimiter automatically without user input (no annoying popups or options to fill in).

The same simple algorithm will accept almost any delimiter you want. You want commas like CSV? No problem. Or fields separated by tab (TSV)? Sure. How about *NIX files that use colons? We'll take it. Want to mix them up in the same table or file? Go ahead.

Exporting to VSV (creating files)

A VSV file consists of two types of rows: header and data.

Rows are separated by newline. 

Creating Header Rows

Header rows are optional.

A header row consists of one or more header field. Each header field is enclosed by any of these double matching bracket types:
Code: [Select]
[[]]
{{}}
(())
<<>>

A header row is identified when, ignoring the opening spaces of a row, the first two characters of a row are any consecutive double opening brackets, as listed above.

Distinct header fields may use the same or different brackets types. Different bracket types may be employed on the same header row and across rows.

When exporting to a VSV file, characters that are found within a header field must not be used as enclosing brackets for that field. Choose a bracket not found in that inside text to surround that field.

Any text in a header row that is not within the legal boundaries of a header field is ignored. That includes improper closing of brackets, and text outside the brackets. This side effect may be surreptitiously used as comments for your text file, but should be used with care, in order to be properly rendered by plugins. (That is, a plugin cannot safely interpret if your intent is a comment or an error, a typo.)

Creating Data Rows

Data rows (non headers) must be led by an explicit nonspace character, called delimiter. All leading spaces are ignored until a nonspace character is found, which becomes the delimiter for that row.

Values for a data row are placed between two delimiters. The first occurrence of a delimiter on that row is not counted as part of the values. To prevent delimiter-value collision, the delimiter should be a character that is not found in the values' texts of that row.

A null value has zero length, signified by consecutive delimiters with nothing in between them.

A delimiter at the end of the line after the final value is optional, unless the final value is a null value.

Each row may have its own distinct delimiter. A text file may have distinct rows with their own delimiters. Creators can use the same delimiters or mix them for different rows, as long as the desired values on that row are distinguishable (i.e. to prevent delimiter-value collision.)

When exporting to a VSV file, characters that are found in the values of a given row must not be used as delimiter for that row. Choose a character not found in that row's values as the delimiter for that row.
  • Space and newline cannot be used as delimiter. Any other single character may be used.
  • Letters and numbers may be used as delimiters, but are not recommended.
  • Avoid using header field brackets as data row delimiters. Nevertheless, single bracket at beginning of a row should be read as a legal delimiter.
  • Creators may have their own preferred delimiters. Common delimiters to use:
Code: [Select]
,
:
|
;
*
-
@
#
%
~
`
TAB

Importing VSV (reading files)

The following rules dictate how plugins and code should read and interpret VSV files.

Rows are separated by newline. Leading spaces on each row are discarded and ignored.

After discarding all leading spaces, if the first two characters of a row are identical opening brackets, this is a header row. Else it is a data row.

Reading Header Rows

Header fields must be enclosed by both an opening and a closing matching double brackets. Any other text on a header row is discarded and ignored.

Reading Data Rows

The first nonspace character of a data row is its delimiter. The values of this row are stored between two delimiters or the end of line. A value can have zero length, or null value. There is no value between a line-ending delimiter and end of line (it doesn't count as another value, not even null value).

In PHP, use the explode() function to store a row's values into an array split by the delimiter. Likewise, in Javascript, use String.prototype.split(). For other languages, use a regexp to match the values separated by the delimiter.

Examples

Questions

How to handle values that contain newline?
Can it be used for objects or hierarchy? i.e. in place of JSON, XML, HTML
Can it be used as configuration file? cf. INI, CONF files
Can it be used as subtitle file? cf. SRT, VTT
Can it be used as playlist file? cf. PLS, M3U
« Last Edit: 2018-Jun-27 06:34 by Den »
Support me on Patreon

I saw. I conquered. I came.

ADMIN

  • Administrator
  • Member
  • *****
  • Posts: 24
    • View Profile
« Last Edit: 2018-Jun-21 22:32 by Den »

Den

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1180
  • Selina is my Superstar
    • View Profile
    • Amuseum
Re: Versatile Separated Values (VSV)
« Reply #2 on: 2017-Nov-15 10:58 »
VSV Usage examples and comparison to other formats


VSV as Tabular Data

Double Matching Brackets are header fields (optional)
Everything else are data rows

Ex. When using the Comma , as delimiter, similar to CSV:

Code: [Select]
[tables=vsv]
((Name)) ((Score 1)) ((Score 2))
,BEAKL 8, 104, 132
,BEAKL 9, 120, 144
,BEAKL 10, 44, 99
[/tables]

NameScore 1Score 2
BEAKL 8 104 132
BEAKL 9 120 144
BEAKL 10 44 99


Ex. Can use any nonspace character as delimiter--lots of freedom:

Code: [Select]
[tables=vsv]
[[Name]] {{Age}} ((Gender))
,Hammie, 20.5, F
-Chow, Vivian-40-F
:Amuseum:25:M:
*Shena'Fu *18+5/12 *F
|Grndr-1245|21 months||
Fairy Nuff 14 K N/A
[/tables]

Name{{Age}}Gender
Hammie 20.5 F
Chow, Vivian40F
Amuseum25M
Shena'Fu 18+5/12 F
Grndr-124521 months
Fairy Nuff14 KN/A



VSV as Linux password file

The Colon :  starts each line and separates each field

Code: [Select]
:smithj:x:561:561:Joe Smith:/home/smithj:/bin/bash


VSV as configuration file

Double Square Brackets [[ starts each section
Unclosed Double Brackets are comments and help
The Equal = starts each line and separates the setting key from its value

Code: [Select]
[[General]]
((display options: fullscreen, windowed, windowedmax
=display=fullscreen
=width=1920
=height=1080


VSV as XML replacement

Double Angled Brackets << as tags
Close innermost tag with the Slash / inside double brackets
Data rows as attributes and content
Use spaces to indent

Code: [Select]
<<div>>
 <<p>>
  ~To: Tove
 <</>>
 <<p>>
  ~From: Jani
 <</>>
 <<h2>>
  ~Reminder
 <</>>
 <<p>>
   ~Meeting this weekend!
  <<span>>
   =style=color: red
   ~ Don't forget!
  <</>>
  <<p>>
   ~-J
  <</>>
 <</>>
<</>>


VSV as Objects and Arrays

Double Curly Brackets {{ as Objects
Double Square Brackets [[ as Arrays
Close innermost object or array with the Semicolon ; inside double brackets
Data rows as properties
Use spaces to indent

Code: [Select]
((probably harder to read than JSON, but has similar capabilities
((however, JSON doesn't allow comments, like these first two lines
{{}}
 {{menu}}
  ~id~file
  ~value~File
  {{popup}}
   [[menuitem]]
    {{}}
     ~value~New
     ~onclick~CreateNewDoc()
    {{;}}
    {{}}
     ~value~Open
     ~onclick~OpenDoc()
    {{;}}
    {{}}
     ~value~Close
     ~onclick~CloseDoc()
    {{;}}
   [[;]]
  {{;}}
 {{;}}
{{;}}


« Last Edit: 2018-Jun-25 16:00 by Den »

Den

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1180
  • Selina is my Superstar
    • View Profile
    • Amuseum
Re: Versatile Separated Values (VSV)
« Reply #3 on: 2018-Jun-22 05:45 »
Project via git:
Git repo @ bitbucket.org: https://bitbucket.org/Shenafu/vsv/

Examples of utilizing Javascript to interpret VSV into HTML lists, tables, XML/HTML, and JSON:
https://shenafu.com/code/vsv/test.html
« Last Edit: 2018-Jun-25 16:02 by Den »

Den

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1180
  • Selina is my Superstar
    • View Profile
    • Amuseum
Versatile Subtitles
« Reply #4 on: 2018-Jun-23 06:42 »
VSV as Subtitle Format

(research and development phase)

File extension: *.vst

Criteria

- simple, yet extensible
- basic features, incl. time start and end, text to display
- advanced features, incl. styling, position, angle, color, classes, scrolling (ala marquee),
- optional metadata and general options, incl. language and encoding, movie metadata, author and staff of subtitle (e.g. translators, timers)

The wonderful thing about VSV is simple, yet extensible and universal. Thus both simple and complex subtitles can be created in VSV. Simple ones will look simple; complex ones will also look simple without clutter or different look or rules. (Cf. XML is a cluttered format. VTT has different syntax for different sections.)

Sections

A subtitle file is divided into sections marked by headers (which are not case sensitive). All sections are optional. If a file begins with no headers, it is implied to begin in the Main section. A section type can appear multiple times in the same file.

The [[Main]] section holds the subtitles texts, timing, and additional information pertaining to that subtitle segment.

The [[General]] section holds the metadata and general options.

The [[Style]] section defines styles in the same format as CSS.

Data fields

Data rows holds one or more data fields or values. For rows that contain more than one field, the first is the property that defines the rest of the fields on that row.

The \ backslash is the escape character for advanced features. Including new lines of a multiline subtext, and inline styling. To print the backslash itself, use double backslash \\. The \ must not be used as delimiter.

Subtitle data

Data rows in the main section hold the subtitle data that will be displayed in a video. The general layout is a time or frame row, followed by one or more rows that describe a subtitle line, including text and additional optional properties, such as style and class. That means a time or frame row signals the beginning of a new subtitle segment.

----

The 't' property means time, and is followed by one or two data fields that represent the start and end times of a subtitle line. The time data is in the format HH:MM:SS.mmm. HH: can be omitted to imply zero hours. .mmm can be omitted to imply zero milliseconds. The start time must be included. If the end time is omitted, the subtitle will be displayed until the end of the video.
Ex.
Code: [Select]
,t,12:27,12:38
----

The 'f' property means frame, and is followed by one or two data fields that represent the start and end frames of a subtitle line. The frame data is an integer from 0 to the last frame of the video. The start frame must be included. If the end frame is omitted, the subtitle will be displayed until the end of the video.
Ex.
Code: [Select]
,f,335,518
----

The 's' property defines the text to be displayed.

Every additional data field starts on a new line when displayed on the video; i.e. multiline. That is, whenever a delimiter is repeated on the same data row, it starts a new line in the video. New lines can also be denoted with \n.

To prevent delimiter-value collision, it is behooved to use a delimiter not found in the particular text for that row, and generally not normally found in your language's everyday grammar.

Ex.
In both examples, the delimiter is tick `.
Single line
Code: [Select]
`s`Stop! In the name of love!
Multiline
Code: [Select]
`s`Stop!`In the name of love!
Code: [Select]
`s`Stop!\nIn the name of love!
----

The 'c' property declares the class of this particular subtitle segment. Classes are the same concept as HTML classes. So they can be used as expedient access to various features, including styling, positioning, etc. These styles are defined in another section of the file or in a separate .css file.

Ex.
Code: [Select]
,s,Stop! In the name of love!
,c,music

----

The 'func' properties allows passing special commands to the media player, including vendor specific options.
----

TBD: additional properties, including position, color, scrolling, angle, etc.

TBD: markup for inline styling a substring of a line, incl. bold, underline, italicize (e.g. \*, \_, \/)

TBD: properties for general options and metadata

TBD: considerations for real-time caption, streaming

TBD: embed media: images, video, audio, 3d models, transformations, effects

TBD: commands and scripting: pause, resume, include external files, shift time or frames for text and audio (e.g. fix out of sync)

TBD: plugins for media players: VLC via Lua,



Full Examples

Simple files

Code: [Select]
,t,01:11.704,01:13.006
`s`All right, let’s go. I’ll give you half an hour.

,t,01:16.209,01:17.777
`s`What?

,t,01:18.845,01:20.547
`s`Are you serious?

,t,01:20.547,01:23.750
`s`Look, Jerry, we have to have sex to save the friendship.

,t,01:24.951,01:29.489
`s`Sex, to \*save\* the friendship.

,t,01:31.057,01:35.328
`s`Well if we have to, we have to.


Complex files

Code: [Select]
[[Style]]
`.jerry`color: green
`.elaine`color: yellow


[[Main]]
,t,01:11.704,01:13.006
`s`All right, let’s go. I’ll give you half an hour.
,c,elaine

,t,01:16.209,01:17.777
`s`What?
,c,jerry

,t,01:18.845,01:20.547
`s`Are you serious?
,c,jerry

,t,01:20.547,01:23.750
`s`Look, Jerry, we have to have sex to save the friendship.
,c,elaine

,t,01:24.951,01:29.489
`s`Sex, to \*save\* the friendship.
,c,jerry

,t,01:31.057,01:35.328
`s`Well if we have to, we have to.
,c,jerry

Code: [Select]
[[Style]]
`.aside`vertical-align: top`margin-top: 1em
`.music`font-style: italic
`.music::before`content: "#"
`.music::after`content: "#"

[[Main]]
,t,01:31.057,01:35.328
,s,Stop! In the name of love!
,c,music

,t,01:31.057,01:45.328
`s`Stop! In the Name of Love`by Diana Ross and The Supremes
,c,aside


« Last Edit: 2018-Jun-29 21:15 by Den »

Den

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1180
  • Selina is my Superstar
    • View Profile
    • Amuseum
Versatile Playlists
« Reply #5 on: 2018-Jun-24 17:51 »
VSV as Playlist Format

(research and development phase)

File extension: *.vpl

Criteria

- simple, yet extensible
- basic features, incl. file, title, artist, duration
- advanced features, incl. repeat amount, gain, media start and end times, resume from last media played, associated files (such as subtitle or lyrics)
- optional metadata and general options

Sections

A playlist file is divided into sections marked by headers (which are not case sensitive). All sections are optional. If a file begins with no headers, it is implied to begin in the Main section. A section type can appear multiple times in the same file.

The [[Main]] section holds the list of media, including their filenames and other specific data.

The [[General]] section holds the metadata and general options.

Playlist data

Data rows in the main section hold the playlist data. The general layout is a file row, followed by one or more rows that describe a file, including title, artist, duration, and additional optional properties, such as style and class. That means a file row signals the beginning of a new file subsection.

Some properties will hold data that will be applied for all subsequent files. So that one may apply the same title and artist for many files without the need to repeat. See below for these properties.

----

The 'f' property means file name, and is followed by a field that refers to a video file or another playlist file. The file can point to a local computer or remote address, such that the media player can access that file. As such, the file can be relative path, absolute path, or URL that can be handled by the media player.

If 'pathAll' is defined, every subsequent file is affixed by that property. The first data is prefix (will precede the file name), and second data is suffix (will follow the file name).

Ex.
Code: [Select]
`f`video-01.mp4
`f`video-02.mp4
`f`video-03.mp4
`f`video-04.mp4
Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.02.rmvb
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.03.rmvb
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.04.rmvb
Code: [Select]
'pathAll'file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/'.rmvb

`f`Cooking.Beauties.01
`f`Cooking.Beauties.02
`f`Cooking.Beauties.03
`f`Cooking.Beauties.04

----

The 's' property means subtitle file, and is followed by a field that refers to a subtitle file or lyrics file.

Unfortunately, VLC only accepts local OS format to the subtitle file's path.

Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`s`f:\media/Chinese\-Variety\Cooking Beauties 2018\Cooking.Beauties.01.vst

Note difference in file path format for VLC.

----

The 'd' property means duration. Format depends on media player. VLC supports seconds.
Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`d`2700

----

The 't' property means title that will be displayed on the playlist panel or window, if supported by the media player.
Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`t`Cooking Beauties 2018 - EP 01

----

The 'a' property means artist.
Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`a`TVB

----

The 'p' property means publisher.
Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`p`TVB

----

The 'desc' property means description. A blurb to describe the media.
Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`desc`Beautiful women celebrities compete in cooking contest. But will their cooking be delicious or horrendous?

----

The 'id' property sets the track's id. Usage depends on whether in 'idAuto' or 'idManual' mode.

The 'idAuto' property sets id assignment to auto. This is default mode, and doesn't have to used unless you want to return to auto mode from 'idManual'.

The 'idManual' property sets id assignment to manual.

In auto mode, each file on the playlist is automatically assgined an id, starting at 1 and incremented by 1 as new files are added. Use the 'id' property to assign a file's id to that value and start counting from there for subsequent files.

In manual mode, each file has id 0 unless set with 'id' property.

Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`id`1

----

The 'startPlayId' property picks the id of the file to start playing when the playlist is first loaded. In the id auto mode, the id starts at 1 to the maximum number of files on the list. The default value for startPlayAt is 1--the first item on the playlist; a value that doesn't match any id will start playing at first file.

Code: [Select]
`startPlayId`3

`f`video-01.mp4
`f`video-02.mp4
`f`video-03.mp4
`f`video-04.mp4

will start playing at video-03.mp4.

----

The 'startPlayFile' property matches the filename to start playing when the playlist is first loaded. The data supplied can be a partial file name.

'startPlayFile' is not processed if 'startPlayId' is also supplied.

Code: [Select]
`startPlayFile`video-04

`f`video-01.mp4
`f`video-02.mp4
`f`video-03.mp4
`f`video-04.mp4

will start playing at video-04.mp4.

----

The 'startHere' property sets the current file id as the first file to be played. The last command found in the playlist between 'startHere' or 'startPlayId' will take priority; either of these commands will take priority before 'startPlayFile'.

Code: [Select]
`f`video-01.mp4
`f`video-02.mp4
`f`video-03.mp4
'startHere
`f`video-04.mp4

----

The 'func' properties allows passing special commands to the media player, including vendor specific options.

----

Global properties

The following properties apply the same data to all subsequent files if not specifically set for those files, until that property is invoked again to assign new data. Basically a fast way to assign the same data to an entire group of files, without repetitive text cluttering the playlist file, nor repetitive cut and paste.

Global properties are immediately assigned to any new file declared by 'f'.

'tAll' : same title
'aAll': same artist
'pAll': same publisher
'dAll': same duration
'descAll': same description
'pathAll': same path affixes

----

Substitution

Data can also be substituted into other data by enclosing the corresponding property name inside double brackets (any of the header brackets are valid).

Replacements should be defined beforehand.

{{f}}: substitute file (full path)
{{s}}: substitute subtitle file (full path)
{{t}}: substitute title
{{a}}: substitute artist
{{p}}: substitute publisher
{{d}}: substitute duration
{{id}}: substitute id
{{desc}}: substitute description

{{tAll}}: substitute global title
{{aAll}}: substitute global artist
{{pAll}}: substitute global publisher
{{descAll}}: substitute global description

Code: [Select]
`tAll`Cooking Beauties

`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`t`{{tAll}}`part 01

`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.02.rmvb
`t`{{tAll}}`part 02

will become:
Cooking Beauties - part 01
Cooking Beauties - part 02

Code: [Select]
`f`...
`a`S.H.E
`desc`Enjoy new hit single by {{a}}

In this case, `a` should be defined before `desc` can substitute it in. Else {{a}} will just be empty. You can also define global properties instead, also beforehand. So the following will also work:

Code: [Select]
`aAll`S.H.E

`f`...
`desc`Enjoy new hit single by {{a}}

In this case, `f` will immediately receive global properties, such as `aAll` before it. This implicitly defines `a` for this file. Thus, {{a}} will be available for substitution.

To represent a property that will be substituted later, enclose the substitution in another layer of double enclosed brackets.

Code: [Select]
`tAll`Cooking Beauties`{{{{id}}}}

`f`Cooking.Beauties.01.rmvb
`f`Cooking.Beauties.02.rmvb

will become:
Cooking Beauties - 1
Cooking Beauties - 2

In this case, 'tAll' has a code {{{{id}}}}. When this line is processed, this will reduce it to just {{id}}. When 'f' is processed, 'tAll' is passed down and also processed, but now with just {{id}}, which of course refers to the current file's id.

----

Variables

The 'var' property sets custom variables that can be substituted into other data by enclosing semicolon : and variable name in double brackets.

Code: [Select]
:var:baseTitle:Cooking Beauties
'tAll'{{:baseTitle}}'{{{{id}}}}
'desc'{{:baseTitle}} features {{a}}

----

Full Examples

Simple playlists
Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.02.rmvb
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.03.rmvb
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.04.rmvb

Complex playlists
Code: [Select]
`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`t`Cooking Beauties 2018 - EP 01
`d`2700
`a`TVB
`p`TVB
`desc`Beautiful women celebrities compete in cooking contest. But will their cooking be delicious or horrendous?

`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.02.rmvb
`t`Cooking Beauties 2018 - EP 02
`d`2700
`a`TVB
`p`TVB
`desc`Beautiful women celebrities compete in cooking contest. But will their cooking be delicious or horrendous?

`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.03.rmvb
`t`Cooking Beauties 2018 - EP 03
`d`2700
`a`TVB
`p`TVB
`desc`Beautiful women celebrities compete in cooking contest. But will their cooking be delicious or horrendous?

`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.04.rmvb
`t`Cooking Beauties 2018 - EP 04
`d`2700
`a`TVB
`p`TVB
`desc`Beautiful women celebrities compete in cooking contest. But will their cooking be delicious or horrendous?

Neater with *All properties:
Code: [Select]
:var:baseTitle:Cooking Beauties 2018
,tAll,{{:baseTitle}},{{{{id}}}}
`aAll`TVB
,pAll,TVB
`descAll`Beautiful women celebrities compete in cooking contest. But will their cooking be delicious or horrendous?
`commentAll`Beautiful Cooking returns to a third season after nine years of hiatus.

'pathAll'file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.'.rmvb

`f`01
`f`02
`f`03
`f`04
Code: [Select]
,startPlayId,2

,tAll,Asheron's Call 2 Livestream ft. Shena'Fu,part {{{{id}}}}

,pathAll,https://www.youtube.com/watch?v=

`f`EZfbsT8FAQ4
`f`RysXIquKQwY
`f`iG-s9QhaQZQ
`f`NySeXRmeAEg

Multiple levels of substitution:
Code: [Select]
{{Main}}

`tAll`Cooking Beauties 2018`{{{{id}}}}
`aAll`TVB
,pAll,TVB
`descAll`Beautiful women celebrities compete in cooking contest. But will their cooking be delicious or horrendous?``{{{{t}}}} features {{{{a}}}}.
`commentAll`Beautiful Cooking returns to a third season after nine years of hiatus.

`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.01.rmvb
`d`2700

`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.02.rmvb
`d`2700

`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.03.rmvb
`d`2700

`f`file:///f:/media/Chinese/-Variety/Cooking Beauties 2018/Cooking.Beauties.04.rmvb
`a`[[aAll]]`beauties
`p`[[pAll]]`partners
`d`2700

----
TBD: append supplementary playlists; should also append indexes

TBD: auto-generated files, i.e. 'smart' playlists. e.g. generate incremented ids in filenames; get all files in directory based on criteria

TBD: plugins for media players: Winamp

Plugins

VPL playlist can be loaded in VLC via Lua extension:
https://bitbucket.org/Shenafu/vsv/src/master/playlist/
« Last Edit: 2018-Sep-21 00:57 by Den »

Den

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1180
  • Selina is my Superstar
    • View Profile
    • Amuseum
Re: Versatile Separated Values (VSV)
« Reply #6 on: 2018-Jun-27 03:17 »
Prototype for loading playlist in VLC is successful and powerful. Gives hope for loading subtitles as well.
« Last Edit: 2018-Jul-04 05:39 by Den »

 

3 Guests, 0 Users