// Path: src/main/java/com/mageddo/bookmarks/entity/SettingEntity.java
// public enum Setting {
// 
//   CODE_BLOCK_MAX_HEIGHT, //
//   MOBILE_CODE_BLOCK_MAX_HEIGHT, //
//   CODE_STYLE_TAB_SIZE, //
//   CODE_STYLE_TAB_STYLE, //
//   CODE_STYLE_SHOW_WHITESPACES, //
// 
//   /**
//    * HTML which should be put inside the &lt;head&gt; tag
//    */
//   PUBLIC_PAGES_HEADER_HTML, //
//   ;
// }
// 
// Path: src/main/java/com/mageddo/bookmarks/service/SettingsService.java
// @Singleton
// public class SettingsService {
// 
//   private final SettingsDAO settingsDAO;
// 
//   public SettingsService(SettingsDAO settingsDAO) {
//     this.settingsDAO = settingsDAO;
//   }
// 
//   public Map<String, String> findAllAsMap() {
//     final List<SettingEntity> settings = settingsDAO.findAll();
//     final Map<String, String> settingsMap = new LinkedHashMap<>();
//     for (SettingEntity setting : settings) {
//       settingsMap.put(setting.getKey(), setting.getValue());
//     }
//     return settingsMap;
//   }
// 
//   public List<SettingEntity> findAll() {
//     return settingsDAO.findAll();
//   }
// 
//   public SettingEntity findSetting(String key) {
//     return settingsDAO.find(key);
//   }
// 
//   public boolean patch(SettingEntity settingEntity) {
//     final SettingEntity dbSettingEntity = settingsDAO.find(settingEntity.getKey());
//     if (dbSettingEntity == null) {
//       throw new NotFoundException(String.format("parameter doesn't exists %s", settingEntity.getKey()));
//     }
//     dbSettingEntity.setValue(settingEntity.getValue());
//     dbSettingEntity.setUpdate(LocalDateTime.now());
//     settingsDAO.patch(dbSettingEntity);
//     return true;
//   }
// 
//   public void patch(List<SettingEntity> settings) {
//     for (SettingEntity setting : settings) {
//       this.patch(setting);
//     }
//   }
// }
// 
// Path: src/main/java/com/mageddo/bookmarks/service/SiteMapService.java
// @Rsl
// @Singleton
// public class SiteMapService {
// 
//   private final BookmarkDAO bookmarkDAO;
// 
//   public SiteMapService(BookmarkDAO bookmarkDAO) {
//     this.bookmarkDAO = bookmarkDAO;
//   }
// 
//   @Transactional
//   public void generateSiteMapXML(OutputStream out, HttpRequest req) throws IOException {
//     /*
//     <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
//      */
//     @RawString
//     final String header = lateInit();
//     out.write(header.getBytes());
// 
//     /*
//     <url>
//       <loc>%s</loc>
//       %s
//       <changefreq>weekly</changefreq>
//       <priority>1</priority>
//     </url>
//      */
//     @RawString
//     final String siteMapItem = lateInit();
// 
//     for (final var bookmarkEntity : this.bookmarkDAO.loadSiteMap()) {
//       out.write(String.format(
//           siteMapItem, this.formatURL(req, bookmarkEntity),
//           this.formatDate(bookmarkEntity.getLastUpdate())
//       ).getBytes());
//     }
//     out.write("</urlset>\n".getBytes());
// 
//   }
// 
//   private String formatDate(LocalDateTime date) {
//     if (date == null) {
//       return "";
//     }
//     return String.format("<lastmod>%s</lastmod>", date.format(DateTimeFormatter.ISO_DATE));
//   }
// 
//   private String formatURL(HttpRequest url, BookmarkEntity bookmarkEntity) {
//     return String.format(
//         "%s%s",
//         UrlUtils.getFullHost(url),
//         formatUrl(bookmarkEntity.getId(), bookmarkEntity.getName())
//     );
//   }
// 
//   public static String formatUrl(long bookmarkId, String bookmarkName){
//     return String.format("/bookmark/%d/%s", bookmarkId, UrlUtils.encodeSeoUrl(bookmarkName));
//   }
// }
// 
// Path: src/main/java/com/mageddo/commons/UrlUtils.java
// public final class UrlUtils {
//   private UrlUtils() {
//   }
// 
//   public static String encode(String path) {
//     if (path == null) {
//       return "";
//     }
//     try {
//       return URLEncoder.encode(path, StandardCharsets.UTF_8.displayName())
//           .toLowerCase();
//     } catch (UnsupportedEncodingException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   public static String encodeSeoUrl(String path) {
//     if (path == null) {
//       return "";
//     }
//     return normalizeURL(path)
//         .replaceAll("[^a-z0-9\\-_]", "-")
//         .replaceAll("-{2,}", "-")
//         .replaceAll("-+$", "")
//         .replaceAll("^-+", "")
//         ;
//   }
// 
//   public static String getHost(HttpRequest req) {
//     return req.getHeaders()
//         .get("Host");
//   }
// 
//   public static String getFullHost(HttpRequest req) {
//     return String.format("http://%s", getHost(req));
//   }
// 
//   static String normalizeURL(String path) {
//     return StringUtils.stripAccents(path.toLowerCase()
//         .replaceAll("\\s", "-"));
//   }
// }
// 
// Path: src/main/java/com/mageddo/config/ApplicationContextUtils.java
// public static ApplicationContext context() {
//   return context;
// }


import com.mageddo.bookmarks.entity.SettingEntity.Setting;
import com.mageddo.bookmarks.service.SettingsService;
import com.mageddo.bookmarks.service.SiteMapService;
import com.mageddo.commons.UrlUtils;
import org.commonmark.internal.util.Html5Entities;
import org.unbescape.html.HtmlEscape;
import static com.mageddo.config.ApplicationContextUtils.context;
package thymeleaf;




public final class ThymeleafUtils {

  private ThymeleafUtils() {
  }

  public static String[] splitTags(String tags) {
    return tags == null ? null : tags.split(",");
  }

  public static String encodePath(String path) {
// Path: src/main/java/com/mageddo/bookmarks/entity/SettingEntity.java
// public enum Setting {
// 
//   CODE_BLOCK_MAX_HEIGHT, //
//   MOBILE_CODE_BLOCK_MAX_HEIGHT, //
//   CODE_STYLE_TAB_SIZE, //
//   CODE_STYLE_TAB_STYLE, //
//   CODE_STYLE_SHOW_WHITESPACES, //
// 
//   /**
//    * HTML which should be put inside the &lt;head&gt; tag
//    */
//   PUBLIC_PAGES_HEADER_HTML, //
//   ;
// }
// 
// Path: src/main/java/com/mageddo/bookmarks/service/SettingsService.java
// @Singleton
// public class SettingsService {
// 
//   private final SettingsDAO settingsDAO;
// 
//   public SettingsService(SettingsDAO settingsDAO) {
//     this.settingsDAO = settingsDAO;
//   }
// 
//   public Map<String, String> findAllAsMap() {
//     final List<SettingEntity> settings = settingsDAO.findAll();
//     final Map<String, String> settingsMap = new LinkedHashMap<>();
//     for (SettingEntity setting : settings) {
//       settingsMap.put(setting.getKey(), setting.getValue());
//     }
//     return settingsMap;
//   }
// 
//   public List<SettingEntity> findAll() {
//     return settingsDAO.findAll();
//   }
// 
//   public SettingEntity findSetting(String key) {
//     return settingsDAO.find(key);
//   }
// 
//   public boolean patch(SettingEntity settingEntity) {
//     final SettingEntity dbSettingEntity = settingsDAO.find(settingEntity.getKey());
//     if (dbSettingEntity == null) {
//       throw new NotFoundException(String.format("parameter doesn't exists %s", settingEntity.getKey()));
//     }
//     dbSettingEntity.setValue(settingEntity.getValue());
//     dbSettingEntity.setUpdate(LocalDateTime.now());
//     settingsDAO.patch(dbSettingEntity);
//     return true;
//   }
// 
//   public void patch(List<SettingEntity> settings) {
//     for (SettingEntity setting : settings) {
//       this.patch(setting);
//     }
//   }
// }
// 
// Path: src/main/java/com/mageddo/bookmarks/service/SiteMapService.java
// @Rsl
// @Singleton
// public class SiteMapService {
// 
//   private final BookmarkDAO bookmarkDAO;
// 
//   public SiteMapService(BookmarkDAO bookmarkDAO) {
//     this.bookmarkDAO = bookmarkDAO;
//   }
// 
//   @Transactional
//   public void generateSiteMapXML(OutputStream out, HttpRequest req) throws IOException {
//     /*
//     <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
//      */
//     @RawString
//     final String header = lateInit();
//     out.write(header.getBytes());
// 
//     /*
//     <url>
//       <loc>%s</loc>
//       %s
//       <changefreq>weekly</changefreq>
//       <priority>1</priority>
//     </url>
//      */
//     @RawString
//     final String siteMapItem = lateInit();
// 
//     for (final var bookmarkEntity : this.bookmarkDAO.loadSiteMap()) {
//       out.write(String.format(
//           siteMapItem, this.formatURL(req, bookmarkEntity),
//           this.formatDate(bookmarkEntity.getLastUpdate())
//       ).getBytes());
//     }
//     out.write("</urlset>\n".getBytes());
// 
//   }
// 
//   private String formatDate(LocalDateTime date) {
//     if (date == null) {
//       return "";
//     }
//     return String.format("<lastmod>%s</lastmod>", date.format(DateTimeFormatter.ISO_DATE));
//   }
// 
//   private String formatURL(HttpRequest url, BookmarkEntity bookmarkEntity) {
//     return String.format(
//         "%s%s",
//         UrlUtils.getFullHost(url),
//         formatUrl(bookmarkEntity.getId(), bookmarkEntity.getName())
//     );
//   }
// 
//   public static String formatUrl(long bookmarkId, String bookmarkName){
//     return String.format("/bookmark/%d/%s", bookmarkId, UrlUtils.encodeSeoUrl(bookmarkName));
//   }
// }
// 
// Path: src/main/java/com/mageddo/commons/UrlUtils.java
// public final class UrlUtils {
//   private UrlUtils() {
//   }
// 
//   public static String encode(String path) {
//     if (path == null) {
//       return "";
//     }
//     try {
//       return URLEncoder.encode(path, StandardCharsets.UTF_8.displayName())
//           .toLowerCase();
//     } catch (UnsupportedEncodingException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   public static String encodeSeoUrl(String path) {
//     if (path == null) {
//       return "";
//     }
//     return normalizeURL(path)
//         .replaceAll("[^a-z0-9\\-_]", "-")
//         .replaceAll("-{2,}", "-")
//         .replaceAll("-+$", "")
//         .replaceAll("^-+", "")
//         ;
//   }
// 
//   public static String getHost(HttpRequest req) {
//     return req.getHeaders()
//         .get("Host");
//   }
// 
//   public static String getFullHost(HttpRequest req) {
//     return String.format("http://%s", getHost(req));
//   }
// 
//   static String normalizeURL(String path) {
//     return StringUtils.stripAccents(path.toLowerCase()
//         .replaceAll("\\s", "-"));
//   }
// }
// 
// Path: src/main/java/com/mageddo/config/ApplicationContextUtils.java
// public static ApplicationContext context() {
//   return context;
// }


// Path: src/main/java/thymeleaf/ThymeleafUtils.java
import com.mageddo.bookmarks.entity.SettingEntity.Setting;
import com.mageddo.bookmarks.service.SettingsService;
import com.mageddo.bookmarks.service.SiteMapService;
import com.mageddo.commons.UrlUtils;
import org.commonmark.internal.util.Html5Entities;
import org.unbescape.html.HtmlEscape;
import static com.mageddo.config.ApplicationContextUtils.context;

package thymeleaf;




public final class ThymeleafUtils {

  private ThymeleafUtils() {
  }

  public static String[] splitTags(String tags) {
    return tags == null ? null : tags.split(",");
  }

  public static String encodePath(String path) {
    return UrlUtils.encode(path);