Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial refactoring for making the use of facsimile more generic #3565

Merged
merged 31 commits into from
Jan 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
28b9808
Use Doc type helpers in Toolkit and in DrawClef
lpugin Dec 23, 2023
b071364
Remove unnecessary check in FacsimileInterface::GetSurfaceY
lpugin Dec 23, 2023
d8600ed
Read and write `staff@facs` through Read/WriteFacsimileInterface
lpugin Dec 23, 2023
24bc829
Add FacsimileInterface to Measure
lpugin Dec 23, 2023
da9470f
Add FacsimileInterface getters to Measure
lpugin Dec 23, 2023
dabd14b
Add Doc::SyncFromFacsimileDoc and implement functor
lpugin Dec 23, 2023
70b1646
Fix missing Read/Write zone coordinated ul
lpugin Dec 23, 2023
cdc8cab
Fix overlooked Doc type helper
lpugin Dec 23, 2023
f3ac85b
Initial implementation of call to SyncFromFacsimileDoc
lpugin Dec 23, 2023
6742a01
Add FacsimileInterface to Pb and Sb
lpugin Dec 23, 2023
808aa9d
Sync Pb facsimile in SyncFromFacsimile functor
lpugin Dec 23, 2023
a1a7a93
Scaffold SyncFromFacsimileFunctor
lpugin Dec 23, 2023
44e8365
Fix format
lpugin Dec 23, 2023
85c6b51
Implement SyncToFacsimile
lpugin Dec 27, 2023
aa34af4
Read sb@facs
lpugin Dec 27, 2023
220f0fb
Call SyncToFacsimileDoc (testing)
lpugin Dec 27, 2023
065805f
Remove FunctorParams old mentions
lpugin Dec 27, 2023
4cc1e83
Allow surface within surface
lpugin Dec 27, 2023
af4fe04
Read and write att.coordinated.ul in Surface (missing)
lpugin Dec 27, 2023
8a4a76a
Output facsimile with nested surface (invalid MEI)
lpugin Dec 27, 2023
82845f9
Add pseudo functors to FacsimileInterface
lpugin Dec 28, 2023
0eb3ce4
Make sure ResetData parent is always called
lpugin Dec 28, 2023
238e3bb
Revert "Allow surface within surface"
lpugin Dec 28, 2023
3a5dda7
Make a separate Doc::UpdatePageDrawingSizes method
lpugin Dec 28, 2023
64110d1
Adjust the implementation of SyncFromFacsimile
lpugin Dec 28, 2023
bf6a3cf
Merge branch 'develop' into develop-facsimile
lpugin Dec 28, 2023
ca05528
Remove unused vrv_params_cast
lpugin Dec 28, 2023
cc9269d
Add mei-facs output option in the command-line tool
lpugin Dec 28, 2023
972ae2c
Move call to Doc::SyncFromFacsimile to Toolkit::LoadData
lpugin Dec 29, 2023
6d05ef6
Rename m_*Abs members to m_drawingFacs*
lpugin Dec 29, 2023
3a03a72
Make a vector of possible output formats
lpugin Jan 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions Verovio.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -800,6 +800,12 @@
4DE96E3B21C4373200CB85BE /* bracketspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DE96E3A21C4373200CB85BE /* bracketspan.cpp */; };
4DE96E3C21C4373200CB85BE /* bracketspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DE96E3A21C4373200CB85BE /* bracketspan.cpp */; };
4DE96E3D21C4373200CB85BE /* bracketspan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DE96E3A21C4373200CB85BE /* bracketspan.cpp */; };
4DEBE6E12B36E78900B67DFB /* facsimilefunctor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DEBE6E02B36E78900B67DFB /* facsimilefunctor.h */; };
4DEBE6E22B36E78900B67DFB /* facsimilefunctor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DEBE6E02B36E78900B67DFB /* facsimilefunctor.h */; settings = {ATTRIBUTES = (Public, ); }; };
4DEBE6E42B36E79600B67DFB /* facsimilefunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */; };
4DEBE6E52B36E79600B67DFB /* facsimilefunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */; };
4DEBE6E62B36E9B300B67DFB /* facsimilefunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */; };
4DEBE6E72B36E9B400B67DFB /* facsimilefunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */; };
4DEC4D5A21C800A000D1D273 /* abbr.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DEC4D5921C8009600D1D273 /* abbr.h */; };
4DEC4D7A21C8048700D1D273 /* abbr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEC4D7921C8048700D1D273 /* abbr.cpp */; };
4DEC4D7B21C8048700D1D273 /* abbr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DEC4D7921C8048700D1D273 /* abbr.cpp */; };
Expand Down Expand Up @@ -2014,6 +2020,8 @@
4DE644F41EDBEA01002FBE6C /* breath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = breath.cpp; path = src/breath.cpp; sourceTree = "<group>"; };
4DE96E3821C4370E00CB85BE /* bracketspan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bracketspan.h; path = include/vrv/bracketspan.h; sourceTree = "<group>"; };
4DE96E3A21C4373200CB85BE /* bracketspan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bracketspan.cpp; path = src/bracketspan.cpp; sourceTree = "<group>"; };
4DEBE6E02B36E78900B67DFB /* facsimilefunctor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = facsimilefunctor.h; path = include/vrv/facsimilefunctor.h; sourceTree = "<group>"; };
4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = facsimilefunctor.cpp; path = src/facsimilefunctor.cpp; sourceTree = "<group>"; };
4DEC4D5921C8009600D1D273 /* abbr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = abbr.h; path = include/vrv/abbr.h; sourceTree = "<group>"; };
4DEC4D7921C8048700D1D273 /* abbr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = abbr.cpp; path = src/abbr.cpp; sourceTree = "<group>"; };
4DEC4D7D21C804C500D1D273 /* add.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = add.cpp; path = src/add.cpp; sourceTree = "<group>"; };
Expand Down Expand Up @@ -3012,6 +3020,8 @@
E7265E6D29DC6FD200D11F41 /* castofffunctor.h */,
E763EF4129E939FB0029E56D /* convertfunctor.cpp */,
E763EF3E29E939C00029E56D /* convertfunctor.h */,
4DEBE6E32B36E79600B67DFB /* facsimilefunctor.cpp */,
4DEBE6E02B36E78900B67DFB /* facsimilefunctor.h */,
E74A806028BC9111005274E7 /* findfunctor.cpp */,
E74A806528BC97D5005274E7 /* findfunctor.h */,
E722106528F856C4002CD6E9 /* findlayerelementsfunctor.cpp */,
Expand Down Expand Up @@ -3384,6 +3394,7 @@
40DA9C3720905CEB006BED92 /* ioabc.h in Headers */,
4DB3D8CD1F83D11100B5FC2B /* harm.h in Headers */,
40D45EC2204EEAFB009C1EC9 /* instrdef.h in Headers */,
4DEBE6E12B36E78900B67DFB /* facsimilefunctor.h in Headers */,
4D94E0E22995411100F49F89 /* meibasic.h in Headers */,
BD2E4D9B2875882200B04350 /* stem.h in Headers */,
4DACC9EA2990F29A00B55913 /* attmodule.h in Headers */,
Expand Down Expand Up @@ -3441,6 +3452,7 @@
E7908EA0298582090004C1F9 /* alignfunctor.h in Headers */,
BB4C4B9822A932E5001F6AF0 /* durationinterface.h in Headers */,
BB4C4BB722A932F6001F6AF0 /* jsonxx.h in Headers */,
4DEBE6E22B36E78900B67DFB /* facsimilefunctor.h in Headers */,
BB4C4B1622A932C8001F6AF0 /* systemelement.h in Headers */,
BB4C4AC622A932B6001F6AF0 /* measure.h in Headers */,
E741AD00299A3D3500854426 /* calcslurdirectionfunctor.h in Headers */,
Expand Down Expand Up @@ -3926,6 +3938,7 @@
E7F39C6229A62B430055DBE0 /* adjustclefchangesfunctor.cpp in Sources */,
E79320682991454000D80975 /* calcstemfunctor.cpp in Sources */,
4DED4F18294733140073E504 /* altsyminterface.cpp in Sources */,
4DEBE6E72B36E9B400B67DFB /* facsimilefunctor.cpp in Sources */,
4DEF8A6521B7AAF90093A76B /* f.cpp in Sources */,
4D2073F922A3BCE000E0765F /* tabdursym.cpp in Sources */,
4D16940B1E3A44F300569BF4 /* keysig.cpp in Sources */,
Expand Down Expand Up @@ -4206,6 +4219,7 @@
8F086EF1188539540037FD8E /* keysig.cpp in Sources */,
E74A806C28BC98B2005274E7 /* functorinterface.cpp in Sources */,
E7870357299CF06D00156DC4 /* adjustarpegfunctor.cpp in Sources */,
4DEBE6E62B36E9B300B67DFB /* facsimilefunctor.cpp in Sources */,
4DEC4D9E21C81E9400D1D273 /* orig.cpp in Sources */,
4DDBBB5D1C7AE45900054AFF /* hairpin.cpp in Sources */,
4D43C30C1A9BB22A00EA28F3 /* view_mensural.cpp in Sources */,
Expand Down Expand Up @@ -4489,6 +4503,7 @@
4DB3D8D51F83D12B00B5FC2B /* tempo.cpp in Sources */,
4DEC4DA021C81E9400D1D273 /* orig.cpp in Sources */,
E7F39C6329A62B440055DBE0 /* adjustclefchangesfunctor.cpp in Sources */,
4DEBE6E42B36E79600B67DFB /* facsimilefunctor.cpp in Sources */,
E79320692991454000D80975 /* calcstemfunctor.cpp in Sources */,
8F3DD33E18854B2E0051330C /* beam.cpp in Sources */,
4DED4F19294733140073E504 /* altsyminterface.cpp in Sources */,
Expand Down Expand Up @@ -4771,6 +4786,7 @@
E793206A2991454100D80975 /* calcstemfunctor.cpp in Sources */,
BB4C4AD722A932B6001F6AF0 /* staff.cpp in Sources */,
4DED4F1A294733140073E504 /* altsyminterface.cpp in Sources */,
4DEBE6E52B36E79600B67DFB /* facsimilefunctor.cpp in Sources */,
BB4C4B9F22A932E5001F6AF0 /* positioninterface.cpp in Sources */,
BB4C4B5322A932D7001F6AF0 /* halfmrpt.cpp in Sources */,
BB4C4B8722A932DF001F6AF0 /* num.cpp in Sources */,
Expand Down
18 changes: 17 additions & 1 deletion include/vrv/doc.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ class Doc : public Object {

/**
* Getter and setter for the DocType.
* The setter resets the document.
*/
///@{
DocType GetType() const { return m_type; }
Expand Down Expand Up @@ -370,6 +369,18 @@ class Doc : public Object {
*/
void ConvertMarkupDoc(bool permanent = true);

/**
* Sync the coordinate provided trought <facsimile> to m_drawingFacsX/Y.
* Call the SyncToFacsimile functor.
*/
void SyncFromFacsimileDoc();

/**
* Sync the coordinate provided in rendering to a <facsimile>.
* The document must have encoded layout and the option --break encoded must have enabled.
*/
void SyncToFacsimileDoc();

/**
* Transpose the content of the doc.
*/
Expand All @@ -387,6 +398,11 @@ class Doc : public Object {
*/
Page *SetDrawingPage(int pageIdx);

/**
* Update the drawing page sizes when a page is set as drawing page.
*/
void UpdatePageDrawingSizes();

/**
* Reset drawing page to NULL.
* This might be necessary if we have replaced a page in the document.
Expand Down
1 change: 0 additions & 1 deletion include/vrv/durationinterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

namespace vrv {

class FunctorParams;
class Mensur;
class Object;

Expand Down
136 changes: 136 additions & 0 deletions include/vrv/facsimilefunctor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
/////////////////////////////////////////////////////////////////////////////
// Name: facsimilefunctor.h
// Author: Laurent Pugin
// Created: 2023
// Copyright (c) Authors and others. All rights reserved.
/////////////////////////////////////////////////////////////////////////////

#ifndef __VRV_FACSIMILEFUNCTOR_H__
#define __VRV_FACSIMILEFUNCTOR_H__

#include "functor.h"
#include "view.h"

namespace vrv {

class LayerElement;
class Measure;
class Page;
class Pb;
class Sb;
class Staff;
class Surface;
class System;

//----------------------------------------------------------------------------
// SyncFromFacsimileFunctor
//----------------------------------------------------------------------------

/**
* This class sync the layout encoded in the facsimile to m_Abs members
*/
class SyncFromFacsimileFunctor : public Functor {
public:
/**
* @name Constructors, destructors
*/
///@{
SyncFromFacsimileFunctor(Doc *doc);
virtual ~SyncFromFacsimileFunctor() = default;
///@}

/*
* Abstract base implementation
*/
bool ImplementsEndInterface() const override { return false; }

/*
* Functor interface
*/
///@{
FunctorCode VisitLayerElement(LayerElement *layerElement) override;
FunctorCode VisitMeasure(Measure *measure) override;
FunctorCode VisitPage(Page *page) override;
FunctorCode VisitPb(Pb *pb) override;
FunctorCode VisitSb(Sb *sb) override;
FunctorCode VisitStaff(Staff *staff) override;
FunctorCode VisitSystem(System *system) override;
///@}

protected:
//
private:
//
public:
//
private:
/** The doc */
Doc *m_doc;
//
View m_view;
//
Page *m_currentPage;
System *m_currentSystem;
};

//----------------------------------------------------------------------------
// SyncToFacsimileFunctor
//----------------------------------------------------------------------------

/**
* This class sync the layout calculated to the facsimile
*/
class SyncToFacsimileFunctor : public Functor {
public:
/**
* @name Constructors, destructors
*/
///@{
SyncToFacsimileFunctor(Doc *doc);
virtual ~SyncToFacsimileFunctor() = default;
///@}

/*
* Abstract base implementation
*/
bool ImplementsEndInterface() const override { return false; }

/*
* Functor interface
*/
///@{
FunctorCode VisitLayerElement(LayerElement *layerElement) override;
FunctorCode VisitMeasure(Measure *measure) override;
FunctorCode VisitPage(Page *page) override;
FunctorCode VisitPb(Pb *pb) override;
FunctorCode VisitSb(Sb *sb) override;
FunctorCode VisitStaff(Staff *staff) override;
FunctorCode VisitSystem(System *system) override;
///@}

protected:
//
private:
/** Create zone if not exist */
Zone *GetZone(FacsimileInterface *interface, std::string type);

public:
//
private:
/** The doc */
Doc *m_doc;
//
View m_view;
/** The surface we are going to add / update zone */
Surface *m_surface;
//
Page *m_currentPage;
System *m_currentSystem;
//
int m_pageMarginTop;
int m_pageMarginLeft;
};

} // namespace vrv

#endif // __VRV_FACSIMILEFUNCTOR_H__
24 changes: 21 additions & 3 deletions include/vrv/facsimileinterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@
#include "interface.h"

namespace vrv {
class FunctorParams;
class View;

class Facsimile;
class PrepareFacsimileFunctor;
class ResetDataFunctor;
class Surface;
class Zone;

//----------------------------------------------------------------------------
Expand Down Expand Up @@ -56,8 +59,23 @@ class FacsimileInterface : public Interface, public AttFacsimile {
const Zone *GetZone() const { return m_zone; }
///@}

//-----------------//
// Pseudo functors //
//-----------------//

/**
* We have functor code in the interface for avoiding code duplication in each implementation class.
* Since we are in an interface, we need to pass the object (implementation) to
* the pseudo functor method.
*/
///@{
FunctorCode InterfacePrepareFacsimile(PrepareFacsimileFunctor &functor, Object *object);
FunctorCode InterfaceResetData(ResetDataFunctor &functor, Object *object);
///@}

private:
Zone *m_zone = NULL;
Zone *m_zone;
Surface *m_surface;
};
} // namespace vrv
#endif
2 changes: 1 addition & 1 deletion include/vrv/layerelement.h
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ class LayerElement : public Object,

public:
/** Absolute position X. This is used for facsimile (transcription) encoding */
int m_xAbs;
int m_drawingFacsX;
/**
* This stores a pointer to the cross-staff (if any) and the appropriate layer
* See PrepareCrossStaffFunctor
Expand Down
17 changes: 15 additions & 2 deletions include/vrv/measure.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "atts_cmn.h"
#include "atts_shared.h"
#include "barline.h"
#include "facsimileinterface.h"
#include "horizontalaligner.h"
#include "object.h"

Expand All @@ -34,6 +35,7 @@ class TimestampAttr;
* For internally simplication of processing, unmeasured music is contained in one single measure object
*/
class Measure : public Object,
public FacsimileInterface,
public AttBarring,
public AttCoordX1,
public AttCoordX2,
Expand Down Expand Up @@ -63,6 +65,17 @@ class Measure : public Object,
*/
void CloneReset() override;

/**
* @name Getter to interfaces
*/
///@{
FacsimileInterface *GetFacsimileInterface() override { return vrv_cast<FacsimileInterface *>(this); }
const FacsimileInterface *GetFacsimileInterface() const override
{
return vrv_cast<const FacsimileInterface *>(this);
}
///@}

/**
* Return true if measured music (otherwise we have fake measures)
*/
Expand Down Expand Up @@ -358,8 +371,8 @@ class Measure : public Object,
* This is the left and right position of the measure.
*/
///@{
int m_xAbs;
int m_xAbs2;
int m_drawingFacsX1;
int m_drawingFacsX2;
///@}

/**
Expand Down
1 change: 0 additions & 1 deletion include/vrv/object.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ class EditorialElement;
class Output;
class Filters;
class Functor;
class FunctorParams;
class Functor;
class ConstFunctor;
class LinkingInterface;
Expand Down
13 changes: 12 additions & 1 deletion include/vrv/pb.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#define __VRV_PB_H__

#include "atts_shared.h"
#include "facsimileinterface.h"
#include "systemelement.h"

namespace vrv {
Expand All @@ -21,7 +22,7 @@ namespace vrv {
* This class represents a MEI pb in score-based MEI.
* In page-based MEI, it remains as is as. Actual pages are represented by Page objects.
*/
class Pb : public SystemElement, public AttNNumberLike {
class Pb : public SystemElement, public FacsimileInterface, public AttNNumberLike {
public:
/**
* @name Constructors, destructors, and other standard methods
Expand All @@ -35,6 +36,16 @@ class Pb : public SystemElement, public AttNNumberLike {
std::string GetClassName() const override { return "Pb"; }
///@}

/**
* @name Getter to interfaces
*/
///@{
FacsimileInterface *GetFacsimileInterface() override { return vrv_cast<FacsimileInterface *>(this); }
const FacsimileInterface *GetFacsimileInterface() const override
{
return vrv_cast<const FacsimileInterface *>(this);
}

//----------//
// Functors //
//----------//
Expand Down
Loading