Add sequence placeholder

This commit is contained in:
Matthias Gugel 2021-01-23 15:09:36 +01:00
parent 72956bfd58
commit d72198746f
3 changed files with 30 additions and 0 deletions

View File

@ -12,6 +12,7 @@ import de.idetools.filename_template.placeholders.EpochPlaceholder
import de.idetools.filename_template.placeholders.HostPlaceholder
import de.idetools.filename_template.placeholders.PlaceholderProcessor
import de.idetools.filename_template.placeholders.ProjectPlaceholder
import de.idetools.filename_template.placeholders.SequencePlaceholder
import de.idetools.filename_template.placeholders.UserPlaceholder
import de.idetools.filename_template.settings.FilenameTemplateSettingsState
@ -28,6 +29,7 @@ class InitializeFilenameTemplateActivity : StartupActivity {
DatePlaceholder(),
ProjectPlaceholder(),
HostPlaceholder(),
SequencePlaceholder(),
UserPlaceholder(),
DefaultPlaceholder()
)

View File

@ -0,0 +1,22 @@
package de.idetools.filename_template.placeholders
import com.intellij.psi.PsiFile
class SequencePlaceholder : Placeholder {
override fun supports(placeholder: String): Boolean = placeholder.matches("^\\d+$".toRegex())
override fun process(placeholder: String, context: PlaceholderContext): String {
var value = Integer.parseInt(placeholder)
while (sequenceValueExists(context.directory.files, context.filename + formatSequence(value, placeholder.length))) {
value++
}
return formatSequence(value, placeholder.length)
}
private fun sequenceValueExists(files: Array<PsiFile>, sequence: String): Boolean {
return files.any { it.name.startsWith(sequence) }
}
private fun formatSequence(value: Int, length: Int) =
value.toString().padStart(length, '0')
}

View File

@ -58,6 +58,12 @@
<dd>
The username of the user running the IDE.
</dd>
<dt>{###}</dt>
<dd>
The first available sequential number. Define the initial value and desired leading zeros in the template.
Example: notes({042}).md => notes(042).md, notes(043).md, ...
</dd>
</dl>
</dd>
</dl>