mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-04-24 14:47:13 -04:00
* feat: improve white label scripts on Windows * feat: add font white label script * chore: integrate font white label script
198 lines
6 KiB
Bash
198 lines
6 KiB
Bash
#!/bin/bash
|
|
|
|
show_usage() {
|
|
echo "Usage: $0 [options]"
|
|
echo "Options:"
|
|
echo " --font-path Set the path to the folder containing font files (.ttf or .otf files)"
|
|
echo " --font-family Set the name of the font family"
|
|
echo " --help Show this help message"
|
|
echo ""
|
|
echo "Example:"
|
|
echo " $0 --font-path \"/path/to/fonts\" --font-family \"CustomFont\""
|
|
}
|
|
|
|
FONT_PATH=""
|
|
FONT_FAMILY=""
|
|
TARGET_FONT_DIR="appflowy_flutter/assets/fonts/"
|
|
PUBSPEC_FILE="appflowy_flutter/pubspec.yaml"
|
|
BASE_APPEARANCE_FILE="appflowy_flutter/lib/workspace/application/settings/appearance/base_appearance.dart"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--font-path)
|
|
FONT_PATH="$2"
|
|
shift 2
|
|
;;
|
|
--font-family)
|
|
FONT_FAMILY="$2"
|
|
shift 2
|
|
;;
|
|
--help)
|
|
show_usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
show_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Validate required arguments
|
|
if [ -z "$FONT_PATH" ]; then
|
|
echo "Error: Font path is required"
|
|
show_usage
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$FONT_FAMILY" ]; then
|
|
echo "Error: Font family name is required"
|
|
show_usage
|
|
exit 1
|
|
fi
|
|
|
|
# Check if source directory exists
|
|
if [ ! -d "$FONT_PATH" ]; then
|
|
echo "Error: Font directory not found at $FONT_PATH"
|
|
exit 1
|
|
fi
|
|
|
|
# Create target directory if it doesn't exist
|
|
mkdir -p "$TARGET_FONT_DIR"
|
|
|
|
# Clean existing fonts in target directory
|
|
echo "Cleaning existing fonts in $TARGET_FONT_DIR..."
|
|
rm -rf "$TARGET_FONT_DIR"/*
|
|
|
|
# Copy font files to target directory
|
|
echo "Copying font files from $FONT_PATH to $TARGET_FONT_DIR..."
|
|
found_fonts=false
|
|
for ext in ttf otf; do
|
|
if ls "$FONT_PATH"/*."$ext" >/dev/null 2>&1; then
|
|
cp "$FONT_PATH"/*."$ext" "$TARGET_FONT_DIR"/ 2>/dev/null && found_fonts=true
|
|
fi
|
|
done
|
|
|
|
if [ "$found_fonts" = false ]; then
|
|
echo "Error: No font files (.ttf or .otf) found in source directory"
|
|
exit 1
|
|
fi
|
|
|
|
# Generate font configuration for pubspec.yaml
|
|
echo "Generating font configuration..."
|
|
|
|
# Create temporary file for font configuration
|
|
TEMP_FILE=$(mktemp)
|
|
|
|
{
|
|
echo " # BEGIN: WHITE_LABEL_FONT"
|
|
echo " - family: $FONT_FAMILY"
|
|
echo " fonts:"
|
|
|
|
# Generate entries for each font file
|
|
for font_file in "$TARGET_FONT_DIR"/*; do
|
|
filename=$(basename "$font_file")
|
|
echo " - asset: assets/fonts/$filename"
|
|
|
|
# Try to detect font weight from filename
|
|
if [[ $filename =~ (Thin|ExtraLight|Light|Regular|Medium|SemiBold|Bold|ExtraBold|Black) ]]; then
|
|
case ${BASH_REMATCH[1]} in
|
|
"Thin") echo " weight: 100";;
|
|
"ExtraLight") echo " weight: 200";;
|
|
"Light") echo " weight: 300";;
|
|
"Regular") echo " weight: 400";;
|
|
"Medium") echo " weight: 500";;
|
|
"SemiBold") echo " weight: 600";;
|
|
"Bold") echo " weight: 700";;
|
|
"ExtraBold") echo " weight: 800";;
|
|
"Black") echo " weight: 900";;
|
|
esac
|
|
fi
|
|
|
|
# Try to detect italic style from filename
|
|
if [[ $filename =~ Italic ]]; then
|
|
echo " style: italic"
|
|
fi
|
|
done
|
|
echo " # END: WHITE_LABEL_FONT"
|
|
} > "$TEMP_FILE"
|
|
|
|
# Update pubspec.yaml
|
|
echo "Updating pubspec.yaml..."
|
|
if [ -f "$PUBSPEC_FILE" ]; then
|
|
# Create a backup of the original file
|
|
cp "$PUBSPEC_FILE" "${PUBSPEC_FILE}.bak"
|
|
|
|
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then
|
|
# Windows-specific handling
|
|
# First, remove existing white label font configuration
|
|
awk '/# BEGIN: WHITE_LABEL_FONT/,/# END: WHITE_LABEL_FONT/{ next } /# White-label font configuration will be added here/{ print; system("cat '"$TEMP_FILE"'"); next } 1' "$PUBSPEC_FILE" > "${PUBSPEC_FILE}.tmp"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
mv "${PUBSPEC_FILE}.tmp" "$PUBSPEC_FILE"
|
|
rm -f "${PUBSPEC_FILE}.bak"
|
|
else
|
|
echo "Error: Failed to update pubspec.yaml"
|
|
mv "${PUBSPEC_FILE}.bak" "$PUBSPEC_FILE"
|
|
rm -f "${PUBSPEC_FILE}.tmp"
|
|
rm -f "$TEMP_FILE"
|
|
exit 1
|
|
fi
|
|
else
|
|
# Unix-like systems handling
|
|
if sed --version >/dev/null 2>&1; then
|
|
SED_INPLACE="-i"
|
|
else
|
|
SED_INPLACE="-i ''"
|
|
fi
|
|
|
|
# Remove existing white label font configuration
|
|
sed $SED_INPLACE '/# BEGIN: WHITE_LABEL_FONT/,/# END: WHITE_LABEL_FONT/d' "$PUBSPEC_FILE"
|
|
|
|
# Add new font configuration
|
|
sed $SED_INPLACE "/# White-label font configuration will be added here/r $TEMP_FILE" "$PUBSPEC_FILE"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Failed to update pubspec.yaml"
|
|
mv "${PUBSPEC_FILE}.bak" "$PUBSPEC_FILE"
|
|
rm -f "$TEMP_FILE"
|
|
exit 1
|
|
fi
|
|
rm -f "${PUBSPEC_FILE}.bak"
|
|
fi
|
|
else
|
|
echo "Error: pubspec.yaml not found at $PUBSPEC_FILE"
|
|
rm -f "$TEMP_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# Update base_appearance.dart
|
|
echo "Updating base_appearance.dart..."
|
|
if [ -f "$BASE_APPEARANCE_FILE" ]; then
|
|
# Create a backup of the original file
|
|
cp "$BASE_APPEARANCE_FILE" "${BASE_APPEARANCE_FILE}.bak"
|
|
|
|
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then
|
|
# Windows-specific handling
|
|
sed -i "s/const defaultFontFamily = '.*'/const defaultFontFamily = '$FONT_FAMILY'/" "$BASE_APPEARANCE_FILE"
|
|
else
|
|
# Unix-like systems handling
|
|
sed -i '' "s/const defaultFontFamily = '.*'/const defaultFontFamily = '$FONT_FAMILY'/" "$BASE_APPEARANCE_FILE"
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Failed to update base_appearance.dart"
|
|
mv "${BASE_APPEARANCE_FILE}.bak" "$BASE_APPEARANCE_FILE"
|
|
exit 1
|
|
fi
|
|
rm -f "${BASE_APPEARANCE_FILE}.bak"
|
|
else
|
|
echo "Error: base_appearance.dart not found at $BASE_APPEARANCE_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# Cleanup
|
|
rm -f "$TEMP_FILE"
|
|
|
|
echo "Font white labeling completed successfully!"
|